1

我看了这个问题: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)没有播放任何内容。

4

3 回答 3

1

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

如果你不向它传递任何参数,程序就不会像现在写的那样运行。因为if len(sys.argv) < 2

于 2012-02-08T13:15:39.873 回答
1

神奇的线是:

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

这似乎是说脚本 ( sys.argv[1]) 的第一个参数用作波的输入。

于 2012-02-08T13:15:39.737 回答
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()
于 2019-08-22T12:39:25.907 回答