История изменений
Исправление waker, (текущая версия) :
1) В какой момент времени выполняется callback? Документация гласит, что «как только аудио API понадобились новые данные». Когда этот момент наступает? Когда все данные (читай - сэмплы) уже проиграны, и брать новые неоткуда? Но ведь в таком случае времени на «предоставление» этих данных и/или генерацию новых в callback-функции крайне мало, и каждая миллисекунда грозит «разрыву» в проигрывавнии.
типично, есть несколько (2+) буферов, которые играют по очереди. callback вызывается как только в очереди есть пустой (свободный / уже проигранный) буфер.
2) Что случается, если времени будет недостаточно? Например, из-за объемности выполняемого кода (сложности алгоримта?), недостаточному кол-ву процессорного времени (CPU жрут другие процессы, после вызова callback-а тело функции не выполняется, а время отдаётся другим процессам), отсутствию/недостаче данных для выдачи (read() из файла не вернул достаточно байт или вообще не вернул управление и/или аналогичная ситуация с сокетами)? Можно ли просто «дропнуть» недостающую часть пустотой?
да, заполнять нулями лучше всего (IMO).
3) callback вызывается в отдельном треде?
отдельном относительно чего? главного? да. однозначно отдельном.
Исходная версия waker, :
1) В какой момент времени выполняется callback? Документация гласит, что «как только аудио API понадобились новые данные». Когда этот момент наступает? Когда все данные (читай - сэмплы) уже проиграны, и брать новые неоткуда? Но ведь в таком случае времени на «предоставление» этих данных и/или генерацию новых в callback-функции крайне мало, и каждая миллисекунда грозит «разрыву» в проигрывавнии.
типично, есть несколько (2+) буферов, которые играют по очереди. callback вызывается как только в очереди есть пустой буфер.
2) Что случается, если времени будет недостаточно? Например, из-за объемности выполняемого кода (сложности алгоримта?), недостаточному кол-ву процессорного времени (CPU жрут другие процессы, после вызова callback-а тело функции не выполняется, а время отдаётся другим процессам), отсутствию/недостаче данных для выдачи (read() из файла не вернул достаточно байт или вообще не вернул управление и/или аналогичная ситуация с сокетами)? Можно ли просто «дропнуть» недостающую часть пустотой?
да, заполнять нулями лучше всего (IMO).
3) callback вызывается в отдельном треде?
отдельном относительно чего? главного? да. однозначно отдельном.