我如何在 PyAudio 上播放歌曲?
Posted
技术标签:
【中文标题】我如何在 PyAudio 上播放歌曲?【英文标题】:How do I actually play a song on PyAudio? 【发布时间】:2012-02-08 13:10:08 【问题描述】:我看了这个问题: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)什么都不会播放。
【问题讨论】:
【参考方案1】:魔法线是:
wf = wave.open(sys.argv[1], 'rb')
这似乎是说脚本的第一个参数 (sys.argv[1]
) 用作 wave 的输入。
【讨论】:
【参考方案2】:我对 pyaudio 一无所知,但很明显,歌曲文件是执行程序时传递给程序的第一个参数。看看这一行:wf = wave.open(sys.argv[1], 'rb')
只需将sys.arg[1]
更改为'c:/filename.wav'
或其他内容。
如果你不给它传递任何参数,程序就不会像现在写的那样运行。因为if len(sys.argv) < 2
块
【讨论】:
还因为sys.argv[1]
会引发异常。
是的。但这种反映是基于这样的想法,即他更改了wf =
行,然后仍然没有播放音频......但当然,这会出现在输出中。
啊,是的,没有考虑到这一点。我想我只是认为他足够聪明,可以删除 if
声明,但我不太确定......【参考方案3】:
这是一个解决方案: 将If语句注释掉,直接添加文件名即可播放
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()
【讨论】:
以上是关于我如何在 PyAudio 上播放歌曲?的主要内容,如果未能解决你的问题,请参考以下文章