为什么 SDL2 为音频样本提供的缓冲区不够大
Why the buffer provided by SDL2, for audio samples, is not big enough?
我使用 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 之后。
我有一个错误的假设,即每次调用回调时,它都应该填充samples
数量的音频数据。
需要提供的样本数应根据length / sizeof(float)
在回调内计算。
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- 套接字读取后,我在缓冲区中看到意外输入
- std::带有自定义缓冲区的 iostream 不允许我写入
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- OpenGL 16 位模板缓冲区?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 在 openGL 中多次绑定缓冲区
- 为什么 SDL2 为音频样本提供的缓冲区不够大
- Pthread_create缓冲区大小.不够的