我有一个 C++ 程序,我使用 SDL2_Mixer 模块(我认为它基于 Pulsesink)来输出音频。我想在启动时运行它,但它不想运行得很好。我在启动时自动设置默认音频输出设备、音量等,并尝试了不同的方法来运行二进制文件。
首先,我将其包含在 Linux 启动应用程序中。然后,我在 /etc/init.d 中创建了一个脚本,该脚本应该运行二进制文件并授予执行权限。在这两种方式中,我都没有听到任何声音,即使在我进行了延迟编程之后也是如此,因此可以确保在二进制文件运行时加载并设置所有内容。
这是我的代码:
#include <SDL2/SDL_mixer.h>
#include <SDL.h>
#include <string>
#include <thread>
#include <chrono>
const char waveFileName[40] = "audio/startup_sound.wav";
Mix_Chunk* sample;
int main() {
if (Mix_Init(MIX_INIT_FLAC | MIX_INIT_MP3 | MIX_INIT_OGG) < 0) {
exit(-1);
}
memset(sample, 0, sizeof(Mix_Chunk*) * 2);
if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024) < 0) {
exit(-1);
}
Mix_AllocateChannels(2);
sample = Mix_LoadWAV(waveFileName);
if (sample == NULL) {
exit(-1);
}
Mix_Volume(0, MIX_MAX_VOLUME);
Mix_PlayChannel(0, sample, 0);
std::this_thread::sleep_for(std::chrono::seconds(13));
Mix_FreeChunk(sample);
Mix_CloseAudio();
Mix_Quit();
return 0;
}
我想指出的是,当我从终端手动运行该程序时,它运行得很好。有没有办法在启动时自动执行它以便音频输出工作?谢谢!