我如何在PyAudio上播放一首歌?

时间:2012-02-08 13:10:09

标签: python audio wave pyaudio

我看了这个问题:pyaudio help play a file

虽然这个问题确实得到了回答,但我从来没有明确回答过将歌曲文件放在哪里。


这是播放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)没有播放任何内容。

3 个答案:

答案 0 :(得分:1)

我对pyaudio一无所知,但很明显,歌曲文件是执行时传递给程序的第一个参数。请看这一行:wf = wave.open(sys.argv[1], 'rb')只需更改为sys.arg[1]'c:/filename.wav'或其他内容。

如果你没有传递任何参数,程序将不会像现在一样运行。由于if len(sys.argv) < 2

答案 1 :(得分:1)

神奇的界限是:

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

这似乎表明脚本的第一个参数(sys.argv[1])被用作wave的输入。

答案 2 :(得分:0)

这是一个解决方案: 注释If Statment并直接添加要播放的文件名

import pyaudio
import wave
import sys

CHUNK = 1024

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

wf = wave.open("output.wav", 'rb')

p = pyaudio.PyAudio()

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

data = wf.readframes(CHUNK)

while data != '':
    stream.write(data)
    data = wf.readframes(CHUNK)

stream.stop_stream()
stream.close()

p.terminate()