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

Ubuntu下PyAudio播放音频遇设备占用报错的解决方法咨询

解决Ubuntu下PyAudio音频被占用时无法播放的问题

方法1:指定具体的音频输出设备

当系统默认设备被占用时,直接指定一个可用的输出设备即可:

  1. 先运行以下代码列出所有可用音频设备:
import pyaudio
p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
    info = p.get_device_info_by_index(i)
    print(f"设备索引: {i}, 名称: {info['name']}, 输出通道数: {info['maxOutputChannels']}")
p.terminate()
  1. 找到其中支持输出的设备索引,在播放代码中添加device_index参数:
import pyaudio
import wave

wf = wave.open("a.wav", 'rb')
p = pyaudio.PyAudio()

# 替换成你找到的可用设备索引
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True,
                device_index=1)

data = wf.readframes(1024)
while data != b'':
    stream.write(data)
    data = wf.readframes(1024)

stream.stop_stream()
stream.close()
p.terminate()
wf.close()

方法2:强制PortAudio使用共享模式

Ubuntu中PyAudio依赖PortAudio,通过设置环境变量禁用独占模式,允许音频设备共享:

import os
# 强制使用ALSA后端并禁用独占模式
os.environ['PA_ALSA_PLAYBACK_DEVICE'] = 'default'
os.environ['PA_ALSA_EXCLUSIVE'] = '0'

import pyaudio
import wave

wf = wave.open("a.wav", 'rb')
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

data = wf.readframes(1024)
while data != b'':
    stream.write(data)
    data = wf.readframes(1024)

stream.stop_stream()
stream.close()
p.terminate()
wf.close()

方法3:替换为更适配Linux的音频库

如果PyAudio的问题始终无法解决,换用以下轻量库:

  • simpleaudio:安装命令pip install simpleaudio,示例代码:
import simpleaudio as sa
wave_obj = sa.WaveObject.from_wave_file("a.wav")
play_obj = wave_obj.play()
play_obj.wait_done()  # 等待播放完成
  • soundfile + sounddevice:安装命令pip install soundfile sounddevice,示例代码:
import soundfile as sf
import sounddevice as sd
data, sample_rate = sf.read("a.wav")
sd.play(data, sample_rate)
sd.wait()

方法4:调整系统音频设置

检查系统是否限制了设备独占:

  1. 打开Ubuntu系统设置 → 声音
  2. 点击当前输出设备右侧的齿轮图标进入详情
  3. 取消勾选“独占模式”选项,允许多个应用同时使用该设备

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:29:53