用Python播放声音

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

小吃声音工具包可以播放wav,au和mp3文件。

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

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

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

你应该可以使用linux的ossaudiodev:

 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() 

(Credit for ossaudiodev:Bill Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html

这看起来很荒谬而且牵强,但是你可以使用Windows(或者你喜欢的任何操作系统)为你pipe理声音!

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

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

绝对使用Pyglet 。 这是一个很大的包,但它是纯粹的Python没有扩展模块。 这绝对是最容易部署的。 它也有很好的格式和编解码器的支持。

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

play()命令添加了10秒左右的延迟后,它将工作

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

这也播放.mp3文件。

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 ) 

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

我喜欢pygame,下面的命令应该工作:

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

但它并不在我的任何一台电脑上,而且在这方面的帮助也很有限。 编辑:我想出了为什么pygame声音不适合我,它不是正确加载大多数声音,当我加载它们时,'length'属性是〜0.0002。 也许用mygame以外的东西来加载它们会更普遍地使用它。

与pyglet我得到一个资源没有find错误使用上面的例子,wigh文件的相对path和完整path。

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

但是sound.play()只能播放第一个文件的第一部分,除非我运行pyglet.app.run()来阻止其他所有内容。

我刚刚发布了一个围绕sox的简单python包装器,它将用Python来播放声音。 安装非常简单,因为您需要Python 2.6或更高版本,sox(易于获取大多数体系结构的二进制文件)以及封装( https://github.com/standarddeviant/sound4python )。 如果你没有sox,去这里: http : //sourceforge.net/projects/sox/files/sox/

您将通过以下方式播放audio:

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

请记住,实际参与播放audio的唯一部分就是这些:

 from sound4python import sound ... sound(a) 

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