2012-02-08 73 views
1

我看着這個問題:pyaudio help play a file我如何真的在PyAudio上播放歌曲?

雖然這個問題沒有得到答案,但我從來沒有得到明確的答案,實際上把歌曲文件放在哪裏。


這是用於播放WAVE文件的代碼:

""" Play a WAVE file. """ 

import pyaudio 
import wave 
import sys 

chunk = 1024 

if len(sys.argv) < 2: 
    print "Plays a wave file.\n\n" +\ 
      "Usage: %s filename.wav" % sys.argv[0] 
    sys.exit(-1) 

wf = wave.open(sys.argv[1], 'rb') 

p = pyaudio.PyAudio() 

# open stream 
stream = p.open(format = 
       p.get_format_from_width(wf.getsampwidth()), 
       channels = wf.getnchannels(), 
       rate = wf.getframerate(), 
       output = True) 

# read data 
data = wf.readframes(chunk) 

# play stream 
while data != '': 
    stream.write(data) 
    data = wf.readframes(chunk) 

stream.close() 
p.terminate() 

我通過代碼看,但我不能在代碼中查找什麼,我居然將音樂文件本身。當我按下我的程序中的「播放」按鈕時(我在這個程序中使用wxform)沒有播放任何東西。

回答

1

我不知道pyaudio的任何內容,但它似乎很清楚,歌曲文件是執行它時傳遞​​給程序的第一個參數。看看這條線:wf = wave.open(sys.argv[1], 'rb')只需更改爲sys.arg[1]'c:/filename.wav'什麼的。

如果你沒有傳遞任何參數,程序將不會像現在這樣寫。由於if len(sys.argv) < 2

+0

而且還因爲'sys.argv [1]'會引發異常。 – 2012-02-08 13:27:25

+0

是的。但是這種反思是基於他改變了'wf ='行然後仍然沒有音頻播放的想法......但是當然,這將在輸出中顯示出來。 – 2012-02-08 13:28:48

+0

啊,是的,沒有考慮到這一點。我想我只是覺得他很聰明,可以刪除那個'if'聲明,但我不太確定...... – 2012-02-08 21:37:35

1

神奇的線是:

wf = wave.open(sys.argv[1], 'rb') 

這似乎是說,第一個參數的腳本(sys.argv[1])作爲輸入波。

相關問題