On Fri, Sep 4, 2015 at 10:58 AM, Andrew Kelley <superjo...@gmail.com> wrote:
> On Fri, Sep 4, 2015 at 10:43 AM Ian Esten <i...@ianesten.com> wrote:
>>
>> Thanks for sharing. Looks nice!
>>
>> A question: I see that the write callback supplies a minimum and maximum
>> number of frames that the callback is allowed to produce. I would prefer a
>> callback that instructed me to produce a given number of samples. It is
>> simpler and more consistent with existing APIs. Is there a reason for the
>> minimum and maximum arguments?
>
>
> Good question. This is actually just exposing more power. You can safely
> ignore `frame_count_min` and `frame_count_max` is exactly this simpler
> number that you want.
>
> The reason the `frame_count_min` exists is that some backends support direct
> control over the buffer, and for these backends, you might choose to not
> write all the frames you could because maybe your input buffer is not quite
> ready. Instead of writing silence and having an underrun happen you could
> just wait some time for the input buffer to fill and then continue on.
>
> I'll update the docs to clarify this.
>

Thanks! But I would say that if your input buffer is not ready, then
that is an application error.

>>
>> And an observation: libsoundio has a read and a write callback. If I was
>> writing an audio program that produced output based on the input (such as a
>> reverb, for example), do I have any guarantee that a write callback will
>> only come after a read callback, and that for every write callback there is
>> a read callback?
>
>
> I don't think that every sound driver guarantees this. I see that PortAudio
> supports this API but I think they have to do additional buffering to
> accomplish it in a cross platform manner.
>
> If you're writing something that is reading from an input device and writing
> to an output device, I think your best bet is to use a ring buffer to store
> the input.
>
> But, if you're creating an effect such as reverb, why bother with sound
> devices at all? Sounds like a good use case for JACK or LV2.
>

A ringbuffer introduces a buffer's worth of delay. Not good for
applications that require low latency. A DAW would be a better example
than a reverb. No low-latency monitoring with this arrangement.
_______________________________________________
dupswapdrop: music-dsp mailing list
music-dsp@music.columbia.edu
https://lists.columbia.edu/mailman/listinfo/music-dsp

Reply via email to