【问题标题】:Linux Can't play sound at the begining of system start in an auto-start process using SDL_MixerLinux 在使用 SDL_Mixer 的自动启动过程中无法在系统启动开始时播放声音
【发布时间】:2020-10-21 02:32:12
【问题描述】:

我使用 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;
}

启动程序

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

问题描述

  • 系统启动后,进程A无法成功播放声音,出现ALSA: Couldn't open audio device: No such file or directory

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

  • 另外一种情况是,系统启动后,我编译了一个播放声音的测试程序,在终端手动启动,声音也很好。

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

【问题讨论】:

    标签: c++ linux audio ubuntu-16.04 sdl-2


    【解决方案1】:

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

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

    为了解决这个问题,我开启了自动登录功能,效果很好。

    【讨论】:

    • 有人可以帮我解释一下吗?特权问题?非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多