首页 文章

用 Python 播放声音[1]

提问于
修改于
浏览 407061
98

这个问题在这里已有答案:

在 Python 中播放声音文件(.wav)的最简单方法是什么?最简单的我指的是大多数平台独立且需要最少的依赖关系。 pygame 当然是一个选择,但它似乎只是声音矫枉过正。

10 回答

  • 102

    对于 Windows,您可以使用 winsound。它是内置

    import winsound
    
    winsound.PlaySound('sound.wav', winsound.SND_FILENAME)
    

    你应该可以使用 ossaudiodev for linux:

    from wave import open as waveOpen
    from ossaudiodev import open as ossOpen
    s = waveOpen('tada.wav','rb')
    (nc,sw,fr,nf,comptype, compname) = s.getparams( )
    dsp = ossOpen('/dev/dsp','w')
    try:
      from ossaudiodev import AFMT_S16_NE
    except ImportError:
      from sys import byteorder
      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 = s.readframes(nf)
    s.close()
    dsp.write(data)
    dsp.close()
    

    (ossaudiodev 的信用:Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html)

  • 30

    Snack Sound Toolkit可以播放 wav,au 和 mp3 文件。

    s = Sound() 
    s.read('sound.wav') 
    s.play()
    
  • 28

    这看起来很荒谬,但你可以随时使用 Windows(或任何你喜欢的操作系统)为你管理声音!

    import os
    os.system("start C:/thepathyouwant/file")
    

    简单,没有扩展,有点慢和垃圾,但工作。

  • 16

    绝对使用Pyglet。这是一个大包,但它是纯 python 没有扩展模块。这肯定是最容易部署的。它还具有出色的格式和编解码器支持。

    import pyglet
    
    music = pyglet.resource.media('music.mp3')
    music.play()
    
    pyglet.app.run()
    
  • 7

    在 play()命令后添加 10 秒左右的延迟,它会起作用

    import pygame
    
    import time
    
    pygame.init()
    
    pygame.mixer.music.load("test.wav")
    
    pygame.mixer.music.play()
    
    time.sleep(10)
    

    这也会播放.mp3 文件。

  • 4

    pyMedia 的声音示例确实只是。这应该是你所需要的。

    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 )
    
  • 2

    wxPython 支持在 Windows 和 Unix 上播放 wav 文件 - 我不确定这是否包含 Mac。但是据我所知它只支持 wav 文件 - 它不支持其他常见格式,如 mp3 或 ogg。

  • 2

    我喜欢 pygame,下面的命令应该有效:

    pygame.init()
    pygame.mixer.Sound('sound.wav').play()
    

    但它不在我的任何一台计算机上,并且在那里的主题上的帮助有限。编辑:我弄清楚为什么 pygame 声音不适合我,它没有正确加载大多数声音,'length'属性是~0.0002 当我加载它们。也许用 mygame 以外的东西加载它们会更普遍地使用它。

    与 pyglet 我得到一个资源未找到错误使用上面的例子,wigh 文件的相对和完整路径。

    使用pyglet.media.load()而不是pyglet.resource.media()让我加载文件。

    sound.play()只播放文件的第一部分,除非我运行pyglet.app.run()阻止其他一切......

  • 2

    我刚刚发布了一个围绕 sox 的简单 python 包装器,它将用 Python 发出声音。它非常容易安装,因为你需要 Python 2.6 或更高版本,sox(很容易获得大多数架构的二进制文件)和包装器(https://github.com/standarddeviant/sound4python)。如果你没有 sox,请到这里:http://sourceforge.net/projects/sox/files/sox/

    您可以通过以下方式播放音频:

    from sound4python import sound
    import random
    a = []
    for idx in xrange(1*16000):
        a.append(random.randint(-16384,16384))
    sound(a)
    

    请记住,播放音频实际涉及的唯一部分就是:

    from sound4python import sound
    ...
    sound(a)
    
  • 1

    对于 Linux 用户,如果需要低级别 pcm 数据操作,请尝试alsaaudio module。包内也有一个 playwav.py 示例。

相关问题