<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 20 March 2016 at 11:46, Spencer Russell <span dir="ltr">&lt;<a href="mailto:sfr@media.mit.edu" target="_blank">sfr@media.mit.edu</a>&gt;</span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The issue here is that I’d want the portaudio buffer to be large to cover pauses (several seconds), but then when my user calls `write(sink, audiobuffer)`, they’re going to experience the buffer-length of delay before they hear the audio.<br></blockquote><div><br></div><div>Yeah, its hard for a language binding to decide what the buffer-length should be. I don&#39;t think this aspect of audio can be abstracted away; ultimately the programmer needs to understand the pros and cons of low vs. high latency and decide for themselves.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So I guess the question probably comes down to:<br>
When PortAudio experiences an underflow, does it feed zeros to the underlying Host API, or does the Host API “know” about the underflow? Based on my experience lurking on this list I’m guessing the answer is “it depends on the host API”.<br>
<br>
If the underflow is passed to the Host API, in practice are there APIs in the wild that react poorly, or is it OK?<br></blockquote><div><br></div><div>JACK on linux comes to mind; it is likely to kick clients out of the audio graph if their callback doesn&#39;t provide samples quickly enough (ie. the stream is automatically stopped). But this shouldn&#39;t happen for a portaudio stream in blocking mode, since portaudio&#39;s JACK host API implementation feeds zeros to JACK if the ring buffer doesn&#39;t contain enough data.</div><div><br></div><div>I haven&#39;t checked other host APIs, but ultimately if julia leaves you with unpredictable unbounded delays then there doesn&#39;t seem much choice but to rely on portaudio&#39;s blocking API. As you said, having a ring-buffer/callback on the julia side doesn&#39;t do much to guarantee portaudio&#39;s buffer will remain full...</div><div><br></div><div>-sqweek</div></div></div></div>