2012-02-08 74 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])作为输入波。

相关问题