2008-11-20 280 views
83

在Python中播放聲音文件(.wav)的最簡單方法是什麼?最簡單的我是指大多數平臺都是獨立的,並且需要最少的依賴關係。 pygame無疑是一種選擇,但它似乎矯枉過正。用Python播放聲音

+0

非常類似的問題http://stackoverflow.com/questions/260738/play-audio-with-python。 – 2008-11-20 23:43:09

+0

或者這個:http://stackoverflow.com/questions/276266/whats-a-cross-platform-way-to-play-a-sound-file-in-python – lpfavreau 2008-11-21 01:23:56

回答

29

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

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

小吃似乎不適用於某些嵌入式系統環境 – 2014-09-24 12:26:36

+4

它也不可用於Pypi :-( – Danimal 2015-07-30 12:33:10

+14

小吃似乎已經死了(最新更新2005年 - 十年前) – Olli 2016-02-13 10:37:51

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) 
+0

呵呵,這工作正常,但小吃的例子佔用更少的代碼行數!我確信pymedia更靈活 – Claudiu 2008-11-22 20:07:56

14

對此確定使用Pyglet。這是一個很大的包,但它是純粹的Python,沒有擴展模塊。這絕對是最容易部署的。它也有很好的格式和編解碼器支持。

import pyglet 

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

pyglet.app.run() 
+1

這個例子只有一個問題:媒體文件需要在(python-)路徑 – Steen 2009-06-02 10:12:08

+1

這很好 - 只要你不介意pyglet接管python進程。 – Tom 2014-06-20 00:09:45

82

對於Windows,您可以使用winsound。它的建成在

import winsound 

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

您應該能夠使用ossaudiodev對於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:比爾Dandreta http://mail.python.org/pipermail/python-list/2004-October/288905.html

2

我喜歡pygame的,和下面的命令應該工作:

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

但它不在我的計算機上rs,並且這方面的幫助很有限。編輯:我想出了爲什麼pygame的聲音不適合我,它不是正確加載大多數聲音,當我加載它時,'length'屬性是〜0.0002。也許用mygame以外的東西來加載它們會更普遍地使用它。

與pyglet我得到一個資源找不到錯誤使用上面的例子,wigh文件的相對路徑和完整路徑。

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

sound.play()只播放該文件的第二個的第一部分,除非我運行pyglet.app.run()阻斷一切......

2

wxPython中有玩在Windows和Unix WAV文件的支持 - 我不知道這包括Mac電腦。不過,據我所知,它只支持wav文件 - 它不支持其他常用格式,如mp3或ogg。

6

播放()命令後添加延遲的說10秒左右,它會工作

import pygame 

import time 

pygame.init() 

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

pygame.mixer.music.play() 

time.sleep(10) 

這也起到.mp3文件。

2

我剛剛發佈了一個圍繞sox的簡單python包裝,它將用Python播放聲音。由於您需要Python 2.6或更高版本,sox(易於獲取大多數體系結構的二進制文件)以及封裝(https://github.com/standarddeviant/sound4python),因此安裝非常簡單。如果你沒有襪,去這裏: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模塊。包中也有一個playwav.py的例子。

18

這看起來很荒謬而且牽強,但您可以隨時使用Windows(或您喜歡的任何操作系統)來爲您管理聲音!

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

簡單,沒有擴展,有點緩慢和垃圾,但工作。