Почему буфер, предоставленный SDL2, для аудиосэмплов недостаточно велик? - PullRequest
0 голосов
/ 20 апреля 2019

Я использую SDL2 для создания звука в формате:

freq = 32 * 1500;
format = AUDIO_F32SYS;
channels = 1;
samples = 1500;

Я ожидаю, что параметр длины в моем обратном вызове будет 6000 (1 * sizeof(float) * 1500), но это 3000.

Я пытался уменьшить количество сэмплов, использовать 2 канала, но всегда при условии, что буфер настолько мал, насколько это необходимо.

Вот как я открываю аудиоустройство:

SDL_AudioSpec want, have;
SDL_zero(want);
want.freq = 32 * 1500;
want.format = AUDIO_F32SYS;
want.channels = 1;
want.samples = 1500;
want.callback = ::PlayDing;
want.userdata = this;
m_Audio = SDL_OpenAudioDevice(nullptr, 0, &want, &have, SDL_AUDIO_ALLOW_ANY_CHANGE);
// want == have here

Все поля want и have равны.

Эта проблема начала возникать после того, как я перешел с Ubuntu на Debian на том же ноутбуке.

1 Ответ

0 голосов
/ 20 апреля 2019

У меня было неверное предположение, что каждый раз, когда вызывается обратный вызов, он должен заполнять samples количество аудиоданных.

Количество выборок, которые должен предоставить обратный вызов, должно быть рассчитано внутри обратного вызова на основе length / sizeof(float).

...