Linux 在使用 SDL_Mixer 的自动启动过程中无法在系统启动开始时播放声音
Linux Can't play sound at the begining of system start in an auto-start process using SDL_Mixer
我已经使用 SDL2_Mixer 在 Linux Ubuntu 16.04 上播放声音。
这是我的 class 代码。
bool SoundPlayer::init()
{
if (SDL_Init(SDL_INIT_AUDIO) < 0)
{
LOG(ERROR)<<"init failed.\n";
}
LOG(INFO)<<"Speaker SDL init succeeded.";
volume = DEFAULT_VOLUME;
if(Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 4096) == -1)
{
LOG(ERROR)<<"audio not found,"<<Mix_GetError();
is_init = false;
}
else
{
is_init = true;
}
return is_init;
}
启动程序
- 进程 A 静态声明了一个 SoundPlayer class。
- 进程 A 由另一个进程 B 启动。
- 进程 B 由系统进程管理工具
supervisord
在系统启动后立即启动。
问题描述
系统启动后,进程A无法成功播放声音,自带ALSA: Couldn't open audio device: No such file or directory
。
但是,我用teamviewer远程登录系统后,声音很好听。进程 A 从未重新启动,但 SoundPlayer
class 再次启动
另一种情况是,系统启动后,我编译了一个播放声音的测试程序,在终端手动启动,声音也很好
我很困惑,想知道我是在系统启动后遗漏了什么还是其他什么?
没有人回应,但我得到了解决方案。
之前很迷茫,因为用teamviewer登录ubuntu不知道系统做了什么。现在我知道了,我只是用一个用户进入桌面系统。
我使用 SDL_GetAudioDeviceName(0,0)
来显示音频设备。
在我登录之前,它返回 dummy output
。我登录后返回Built-in analog output
。原来如此。
为了解决这个问题,我打开了Auto-login功能,效果很好。
我已经使用 SDL2_Mixer 在 Linux Ubuntu 16.04 上播放声音。 这是我的 class 代码。
bool SoundPlayer::init()
{
if (SDL_Init(SDL_INIT_AUDIO) < 0)
{
LOG(ERROR)<<"init failed.\n";
}
LOG(INFO)<<"Speaker SDL init succeeded.";
volume = DEFAULT_VOLUME;
if(Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 4096) == -1)
{
LOG(ERROR)<<"audio not found,"<<Mix_GetError();
is_init = false;
}
else
{
is_init = true;
}
return is_init;
}
启动程序
- 进程 A 静态声明了一个 SoundPlayer class。
- 进程 A 由另一个进程 B 启动。
- 进程 B 由系统进程管理工具
supervisord
在系统启动后立即启动。
问题描述
系统启动后,进程A无法成功播放声音,自带
ALSA: Couldn't open audio device: No such file or directory
。但是,我用teamviewer远程登录系统后,声音很好听。进程 A 从未重新启动,但
SoundPlayer
class 再次启动另一种情况是,系统启动后,我编译了一个播放声音的测试程序,在终端手动启动,声音也很好
我很困惑,想知道我是在系统启动后遗漏了什么还是其他什么?
没有人回应,但我得到了解决方案。 之前很迷茫,因为用teamviewer登录ubuntu不知道系统做了什么。现在我知道了,我只是用一个用户进入桌面系统。
我使用 SDL_GetAudioDeviceName(0,0)
来显示音频设备。
在我登录之前,它返回 dummy output
。我登录后返回Built-in analog output
。原来如此。
为了解决这个问题,我打开了Auto-login功能,效果很好。