package Ġplot č Ċ import Ġkotlinx . c interop . internal .* č Ċ import Ġplatform . posix . sleep č Ċ import Ġkotlinx . c interop .* č Ċ import Ġkotlin . math .* č Ċ import Ġopen al .* č Ċ import Ġm gl .* čĊ Ċ fun Ġmain () Ġ{ ĊĠĠ Ġmem Scoped Ġ{ čĊč ĊĉĠ Ġvar Ġdef name Ġ= Ġal c GetString ( null , ĠAL C _ DEFAULT _ DEVICE _ SPECI FIER ) čĊĉĠ Ġvar Ġdev Ġ= Ġal c Open Device ( def name ?. to K String ()) čĊĉĠ Ġvar Ġctx Ġ= Ġal c Create Context ( dev , Ġnull ) čĊĉĠ Ġal c Make Context Current ( ctx ) čĊĉĠĠ čĊĉĠ Ġvar Ġbuf Ġ= Ġalloc < AL uint Var >() čĊĉĠ Ġal Gen Buffers ( 1 , Ġbuf . ptr ) čĊĉĠĠ čĊĉĠ Ġvar Ġd Ġ= Ġ 1 . 0 f ; čĊĉĠ Ġvar Ġsr Ġ= Ġ 4 4 1 0 0 ; čĊĉĠ Ġvar Ġy Ġ= Ġm gl _ create _ data _ size ( sr . toInt (), 1 , 0 ) čĊĉĠ Ġm gl _ data _ modify ( y ," 1 0 0 0 0 . 0 *( sin (( 2 . 0 * pi *( 4 4 0 . 0 * pow ( 2 . 0 ,- 7 . 0 / 6 6 . 0 ))) * x )* cos (( pi * x )/( 2 . 0 * 1 . 0 ))) ", 0 ); čĊĉĠ Ġvar Ġsamples Ġ= ĠShort Array ( sr . toInt ()) čĊĉĠ Ġfor ( i Ġin Ġ 0 .. sr - 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠ Ġsamples [ i ] Ġ= Ġm gl _ data _ get _ value ( y , i , 0 , 0 ). toInt (). to Short () čĊĠĠĠĠĠ Ġ} čĊĉĠĠ čĊĉĠ Ġsamples . use Pin ned Ġ{ čĊĉĉ Ġal BufferData ( buf . value , ĠAL _ FORMAT _ MON O 1 6 , Ġit . address Of ( 0 ), Ġ( sr Ġ* Ġsize Of < Short Var > ()). toInt (), Ġsr . toInt ()) čĊĉĠ Ġ} čĊĉĠĠ čĊĉĠ Ġvar Ġsrc Ġ= Ġalloc < AL uint Var >() čĊĉĠ Ġal Gen Sources ( 1 . toInt (), Ġsrc . ptr ) čĊĉĠ Ġal Source i ( src . value , ĠAL _ BUFFER , Ġbuf . value . toInt ()) čĊĉĠ Ġal Source Play ( src . value ) čĊĉĠĠ čĊĉĠ Ġsleep ( d . to UInt ()) čĊĉĠĠ čĊĉĠ Ġal Source i ( src . value , ĠAL _ BUFFER , Ġ 0 ) čĊĉĠ Ġal Delete Sources ( 1 , Ġsrc . ptr ) čĊĉĠ Ġal Delete Buffers ( 1 , Ġbuf . ptr ) čĊĉĠĠ čĊĉĠ Ġal c Make Context Current ( null ) čĊĉĠ Ġal c Destroy Context ( ctx ) čĊĉĠ Ġal c Close Device ( dev ) čĊĠĠĠĠĠĠ čĊĠĠ Ġ} Ċ } Ċ