我如何在 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) &lt; 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 上播放歌曲?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MPMusicplayerController 上播放歌曲 URL?

如何在 iOS 上播放列表中的歌曲(仅限歌曲)?

如何在 python 上同时播放两个不同的歌曲文件?

如何在 spotify api 上播放完整的歌曲?

如何在 Spotify APi 上获取播放列表的歌曲推荐

pyaudio录音报错问题