【问题标题】:How do I actually play a song on PyAudio?我如何在 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)什么都不会播放。

【问题讨论】:

    标签: python audio wave pyaudio


    【解决方案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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-30
        • 2023-04-03
        • 1970-01-01
        • 2012-05-15
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        相关资源
        最近更新 更多