如何在Python中播放声音而不中断音乐/其他声音的播放

2024-01-05

我正在用 python 开发一个计时器,当等待时间结束时,它会发出铃声。我使用以下代码:

from wave import open as wave_open
from ossaudiodev import open as oss_open

def _play_chime():
    """
    Play a sound file once.

    """
    sound_file = wave_open('chime.wav','rb')
    (nc,sw,fr,nf,comptype, compname) = sound_file.getparams( )
    dsp = oss_open('/dev/dsp','w')
    try:
      from ossaudiodev import AFMT_S16_NE
    except ImportError:
      if byteorder == "little":
        AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
      else:
        AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
    dsp.setparameters(AFMT_S16_NE, nc, fr)
    data = sound_file.readframes(nf)
    sound_file.close()
    dsp.write(data)
    dsp.close()

它工作得很好,除非任何其他设备已经输出声音。

我怎样才能做基本相同的事情(在linux下)而不需要不播放声音的先决条件?

如果您认为该过程需要 API 来确保软件混合,请建议一种方法:)

谢谢支持:)


简单的答案是“从 OSS 切换到 PulseAudio”。 (或者设置 ALSA 使用 dmix,或者获取具有更好 Linux 驱动程序的声卡...)

更复杂的答案是,您的代码已经按照您希望的方式工作......在某些声卡上。 OSS 驱动程序可以公开硬件混音器,以便您可以同时播放多个音频流,或者它们可以公开单个流,从而导致您在系统上看到阻塞音频。这里唯一正确的解决方案是使用确保软件混合的 API。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中播放声音而不中断音乐/其他声音的播放 的相关文章

随机推荐