You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04使用OpenAL-Soft无法打开音频设备问题求助

问题背景
  • 运行环境:Ubuntu 20.04,音频编程入门场景,选用OpenAL-Soft作为音频开发库
  • 测试代码核心逻辑为打开默认音频设备,代码如下:
ALCdevice* p_ALCDevice = alcOpenDevice( nullptr ); //nullptr = gets default device
    if( !p_ALCDevice )
        throw( "failed to get sound device" );
  • 运行代码直接触发异常,错误输出如下:
[ALSOFT] (WW) Failed to open playback device: Could not open /dev/dsp: No 
such file or directory
[ALSOFT] (WW) Error generated on device (nil), code 0xa004
terminate called after throwing an instance of 'char const*'
Aborted (core dumped)
  • 初步排查:调用设备枚举接口打印可用设备列表,代码如下:
const ALCchar * devices = alcGetString( NULL, ALC_DEVICE_SPECIFIER );
printf( "%s", devices );

打印结果仅输出OpenAL Soft,无法识别到系统真实音频设备。

  • 后续尝试自行通过cmake编译安装OpenAL-Soft,配置阶段日志显示存在大量依赖缺失,编译安装完成后故障依旧,cmake配置日志核心片段如下:
- Checking for module 'dbus-1'
--   No package 'dbus-1' found
-- Could NOT find DBus1 (missing: DBus1_INCLUDE_DIRS DBus1_LIBRARIES)
-- Checking for module 'libpipewire-0.3>=0.3.23'
--   No package 'libpipewire-0.3' found
-- Could NOT find AudioIO (missing: AUDIOIO_INCLUDE_DIR) 
-- Could NOT find OpenSL (missing: OPENSL_LIBRARY OPENSL_INCLUDE_DIR OPENSL_ANDROID_INCLUDE_DIR) 
-- Could NOT find SDL2 (missing: SDL2_LIBRARY SDL2_INCLUDE_DIR) 
-- Could NOT find MySOFA (missing: MYSOFA_LIBRARY MYSOFA_INCLUDE_DIR) 
-- Could NOT find Qt5Widgets
-- Could NOT find SndFile (missing: SNDFILE_LIBRARY SNDFILE_INCLUDE_DIR) 
-- Could NOT find SDL2 (missing: SDL2_LIBRARY SDL2_INCLUDE_DIR) 
-- 
-- Building OpenAL with support for the following backends:
--     ALSA, OSS, SndIO (linked), PortAudio, PulseAudio, JACK, WaveFile, Null
-- 
-- Building with support for CPU extensions:
--     Default, SSE, SSE2, SSE3, SSE4.1
-- 
-- Embedding HRTF datasets
-- 
-- Installing library and headers
-- Installing sample configuration
-- Installing HRTF data files
-- Installing AmbDec presets
-- 
-- Building utility programs
-- 
-- Building example programs
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/brian/openal-soft/build
故障根因
  1. 报错里提到的/dev/dsp是老旧OSS音频框架的设备节点,Ubuntu 20.04默认已不再启用OSS框架,该节点默认不存在。自行编译的OpenAL-Soft默认后端优先级配置把OSS排在靠前位置,探测时尝试打开该节点失败直接抛出错误。
  2. 编译时大量音频后端依赖缺失,虽然配置日志显示标记了支持ALSA、PulseAudio等适配Ubuntu 20.04的音频后端,但实际运行时无法正常加载对应后端模块,无法识别到系统真实音频设备,枚举设备时仅能返回内置的虚拟后端标识OpenAL Soft。
可行解决方案

按优先级从高到低尝试:

  • 优先使用Ubuntu官方源预编译的OpenAL-Soft包,无需自行编译。执行以下命令安装适配当前系统版本的库文件:
    sudo apt update
    sudo apt install libopenal1 libopenal-dev
    
    官方源的包已经提前适配Ubuntu 20.04的PulseAudio音频栈,后端优先级配置正确,不会优先探测OSS设备。
  • 如果必须保留自行编译的版本,先装全所有音频后端的开发依赖,再重新编译:
    sudo apt install libasound2-dev libpulse-dev libdbus-1-dev libsndfile1-dev
    
    装完依赖后重新执行cmake,确认ALSA、PulseAudio后端的依赖探测无缺失,再完成编译安装流程。
  • 临时绕过问题可在运行程序前指定OpenAL加载的音频后端,跳过OSS探测:
    export ALSOFT_DRIVERS=pulse,alsa
    ./your_test_program
    
    该环境变量会强制OpenAL优先加载PulseAudio、ALSA后端,不会尝试访问/dev/dsp节点。
  • 排查系统音频服务状态,执行pactl info确认PulseAudio服务正常运行,如果返回错误,执行以下命令重启用户级音频服务:
    systemctl --user restart pulseaudio
    
    确保当前用户有权限访问音频设备节点。

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:33:20