【问题标题】:What's a cross platform way to play a sound file in python?在 python 中播放声音文件的跨平台方式是什么?
【发布时间】:2010-09-21 12:49:24
【问题描述】:

我尝试使用 pyaudio 播放 .wav 文件。它在 Windows 上运行良好,但在其他设备使用声音时无法在 Ubuntu 中运行。

错误是“IOError: [Errorno 无效的输出设备(无默认值 输出设备)] -9996

我可以尝试使用另一个库吗?另一种方法?

【问题讨论】:

    标签: python cross-platform audio


    【解决方案1】:

    你看过 pymedia 吗?播放 WAV 文件看起来就这么简单:

    import time, wave, pymedia.audio.sound as sound
    f= wave.open('YOUR FILE NAME', 'rb')
    sampleRate= f.getframerate()
    channels= f.getnchannels()
    format= sound.AFMT_S16_LE
    snd= sound.Output(sampleRate, channels, format)
    s= f.readframes(300000)
    snd.play(s)
    while snd.isPlaying(): time.sleep(0.05)
    

    参考:http://pymedia.org/tut/play_wav.html

    当然,您可以查看 Python wiki 下的音频 (http://wiki.python.org/moin/Audio/) 以了解其他库,例如 https://docs.python.org/library/wave.html 或再次查看 Python 的 wiki 下的 Game Libraries (http://wiki.python.org/moin/PythonGameLibraries),它们将指向绑定到具有声音模块的 OpenAL 或 Pygame。

    最后,虽然我不知道 pyaudio 的局限性,但您的错误消息听起来更像是库无法找到默认输出设备,而不是另一个进程正在使用该设备。也许看看 pyaudio 的 get_default_output_device_info 返回的输出设备,并将其与您在 Ubuntu 中的默认设置进行比较。

    【讨论】:

      【解决方案2】:

      您可以使用wxPython

      sound = wx.Sound('sound.wav')
      sound.Play(wx.SOUND_SYNC)
      

      sound.Play(wx.SOUND_ASYNC)
      

      Here 是 wxPython 演示中的一个示例。

      【讨论】:

        【解决方案3】:

        我不确定这是否满足您的要求,但我立即想到 PyGame

        http://www.pygame.org/docs/ref/mixer.html#pygame.mixer.Sound

        from pygame import mixer
        
        mixer.init()
        s = mixer.Sound('sound.wav')
        s.play()
        

        【讨论】:

          【解决方案4】:

          你可以试试Simpleaudio:

          > pip install simpleaudio
          

          然后:

          import simpleaudio as sa
          
          wave_obj = sa.WaveObject.from_wave_file("path/to/file.wav")
          play_obj = wave_obj.play()
          play_obj.wait_done()
          

          【讨论】:

            【解决方案5】:

            我发现playsound 是最简单的。

            from playsound import playsound
            
            is_synchronus = False
            playsound(r"C:\Windows\Media\chimes.wav", is_synchronus)
            

            【讨论】:

              猜你喜欢
              • 2011-03-11
              • 2011-02-15
              • 2010-09-16
              • 2010-09-27
              • 1970-01-01
              • 2020-08-12
              • 2015-07-02
              相关资源
              最近更新 更多