我有一个 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;
}
我想指出的是,当我从终端手动运行该程序时,它运行完美。有没有办法在启动时自动执行它,以便音频输出正常?谢谢!