在使用SDL_Mixer的自动启动过程中,Linux无法在系统启动开始时播放声音

问题描述

我已经使用SDL2_mixer在Linux Ubuntu 16.04上播放声音。 这是我的课程代码

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;
}

开始过程

  • 处理一个静态声明的Soundplayer类。
  • 进程A由另一个进程B启动。
  • 进程B在系统启动后立即由系统进程管理工具supervisord启动。

问题描述

  • 在系统启动后,ALSA: Couldn't open audio device: No such file or directory附带的进程A不能成功播放声音。

  • 但是,当我使用teamviewer远程登录系统后,声音播放良好。进程A从未重启,但Soundplayer类再次启动了

  • 另一种情况是,系统启动后,当我编译测试程序以播放声音并手动在终端中启动它时,声音也播放良好。

我很困惑,想知道我是否在系统启动后错过了什么?

解决方法

没有人回应,但是我找到了解决方案。 之前我很困惑,因为当我使用teamviewer登录ubuntu时我不知道该怎么做。现在我知道了,我只是和用户一起进入桌面系统。

我使用SDL_GetAudioDeviceName(0,0)来显示音频设备。 在我登录之前,它返回了dummy output。登录后,它返回了Built-in analog output。这就是原因。

为解决此问题,我打开了自动登录功能,并且效果很好。