为什么SDL2为音频样本提供的缓冲区不够大?

问题描述 投票:-1回答:1

我使用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

wanthave的所有领域都是平等的。

在我从同一台笔记本电脑上从Ubuntu切换到Debian之后,这个问题就开始发生了。

c++ audio sdl-2
1个回答
0
投票

我有一个错误的假设,即每次调用回调时它应该填充samples音量数据。

回调需要提供的样本数应该基于length / sizeof(float)在回调内计算。

© www.soinside.com 2019 - 2024. All rights reserved.