我使用SDL2创建以下格式的声音:
freq = 32 * 1500;
format = AUDIO_F32SYS;
channels = 1;
samples = 1500;
我希望回调中的length参数为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之后,此问题开始发生。
答案 0 :(得分:0)
我有一个错误的假设,即每次调用回调时,它都应填充samples
数量的音频数据。
回调应提供的样本数量应基于length / sizeof(float)
在回调内部进行计算。