首页 > 解决方案 > 使用 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 调用我的回调函数以将更多音频数据输入声音设备缓冲区的频率。

我的猜测是在我能承受的范围内保持尽可能小。这里的数字越小,回调函数被调用的频率就越高,但我不确定这会给我带来什么好处。

标签: csdl-2

解决方案


推荐阅读