c - 使用 SDL2 进行音频编程 - 设置音频设备
问题描述
我正在用 C 和 SDL2 编写一个老式的游戏引擎。我现在正在设计音频部分。我不想为声音播放 .wav 样本等,我想实现一个声音发生器,有点像软件中的 SID 芯片(如果你熟悉 Commodore 64)。
这是我设置声音设备的初始化代码:
void initialize_audio(void) {
SDL_AudioSpec want, have;
SDL_memset(&want, 0, sizeof(want)); //initializes the 'want' struct
want.freq = 44100;
want.format = AUDIO_U8; // 8-bit sound
want.channels = 1; // 1 = mono, 2 = stereo
want.samples = 2048; // how to decide on this? must be power of 2
want.callback = my_callback_function;
// capture global audio_device_id here
audio_device_id = SDL_OpenAudioDevice(
NULL, // choose best device based on 'want' struct
0, // want a playback device, not a recording device
&want,
&have,
SDL_AUDIO_ALLOW_FORMAT_CHANGE);
}
我的问题是(或者我需要什么帮助):我不确定在音频设备中的缓冲区大小('samples'参数)方面要求什么。我知道这会影响 SDL 调用我的回调函数以将更多音频数据输入声音设备缓冲区的频率。
我的猜测是在我能承受的范围内保持尽可能小。这里的数字越小,回调函数被调用的频率就越高,但我不确定这会给我带来什么好处。
解决方案
推荐阅读
- python - 如何在 numpy 中创建更高效的结构化/rec 数组
- laravel - Laravel - 如何计算两天之间的假期数
- html - 如何创建边框底部?
- excel - 运行循环宏时 Excel 崩溃
- python - 将英国邮政编码映射到地理边界以进行绘图
- selenium - Selenium webdriver中的隐式等待如何工作
- jquery - 通过 jQuery AJAX 发送时,“&”之后的所有内容都会丢失
- performance - Unity Profiler:Update.Preloading cpu 峰值
- elasticsearch - Elasticsearch:NEST 中具有基数的复合聚合
- python - 在 Python 中计算和使用欧几里得距离