<span style="font-family: arial,sans-serif;">I tried OpenAL binding (the one which is on the Hackage), but with no luck.<br><br>I can not hear anything from speakers and also according to generated output on console it seems that &quot;AL.play&quot; never completes playback of a buffer as buffer remains registered as &quot;unprocessed&quot; in OpenAL context.<br>

Here is the piece of code. I am not getting any error messages from OpenAL library functions.</span><br style="font-family: courier new,monospace;" clear="all"><br>playOpenAL :: Int -&gt; IO ()<br>playOpenAL sr&nbsp; = do<br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; mDevice &lt;- AL.openDevice Nothing</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; when (isNothing mDevice) $ error &quot;opening OpenAL device&quot;</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; let device = fromJust mDevice</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; mContext &lt;- AL.createContext device [</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AL.Frequency (fromIntegral sr)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; , AL.Refresh (fromIntegral sr)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; ]</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; when (isNothing mContext) $ error &quot;creating OpenAL context&quot;</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; let context = fromJust mContext</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; AL.currentContext AL.$= (Just context)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; let sampleNumber = 256</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bufSize = sampleNumber * (sizeOf (undefined :: CShort))</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;">&nbsp; buf2 &lt;- mallocBytes bufSize</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; <br>-- here I am filling buf2 with noise ....<br style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;"></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; [source] &lt;- AL.genObjectNames 1</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; [buffer] &lt;- AL.genObjectNames 1&nbsp; </span><br style="font-family: courier new,monospace;">

<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; let region = AL.MemoryRegion buf2 (fromIntegral bufSize)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; AL.bufferData buffer AL.$= (AL.BufferData region AL.Mono16 (fromIntegral sr))</span><br style="font-family: courier new,monospace;">

<br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; AL.queueBuffers source [buffer]</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; AL.loopingMode source AL.$= AL.OneShot </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;"><br>

&nbsp; let waitForSource = do</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn &quot;waiting&quot;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s &lt;- AL.get (AL.buffersProcessed source)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn $ show s</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s &lt;- AL.get (AL.buffersQueued source)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn $ show s</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state &lt;- AL.get (AL.sourceState source)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case state of</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AL.Playing -&gt; do</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; threadDelay 1024</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; waitForSource</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _ -&gt; return ()</span><br style="font-family: courier new,monospace;">

<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; putStrLn &quot;Start Playing ... &quot;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; AL.play [source]</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; waitForSource</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;"></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; AL.currentContext AL.$= Nothing</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; AL.destroyContext context</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; b &lt;- AL.closeDevice device</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&nbsp; when (not b) $ error &quot;closing device&quot;</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><br>Is this library still maintained?<br style="font-family: courier new,monospace;">

<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"><span style="font-family: arial,sans-serif;">Best, George</span><br></span>