用Python播放声音

时间:2008-11-20 23:40:34

标签: python audio platform-independent

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

10 个答案:

答案 0 :(得分:101)

对于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

答案 1 :(得分:31)

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

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

答案 2 :(得分:28)

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

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

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

答案 3 :(得分:15)

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

import pyglet

music = pyglet.resource.media('music.mp3')
music.play()

pyglet.app.run()

答案 4 :(得分:6)

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

import pygame

import time

pygame.init()

pygame.mixer.music.load("test.wav")

pygame.mixer.music.play()

time.sleep(10)

这也会播放.mp3文件。

答案 5 :(得分:4)

pyMedia的声音示例just that。这应该是你所需要的一切。

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 )

答案 6 :(得分:2)

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

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

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

with pyglet我找不到资源错误使用上面的例子,记录文件的相对路径和完整路径。

使用pyglet.media.load()代替pyglet.resource.media(),我可以加载文件。

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

答案 7 :(得分:2)

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

答案 8 :(得分: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)    

答案 9 :(得分:1)

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