【问题标题】:How to play an audio file from python terminal如何从 python 终端播放​​音频文件
【发布时间】:2020-04-28 07:49:45
【问题描述】:

我正在使用librosa 库对.wav 格式的音频文件进行数据分析。但似乎librosa 除了特征提取之外,只能以数组的形式读取或写入音频文件。我还想用我的分析代码播放音频文件。

在Ipython notebook中,我可以使用Ipython.display.audio直接在Ipython ntoebook中播放音频,但是当我将代码转换为.py时,我不起作用,所以我需要可以用于相同目的的东西。

【问题讨论】:

  • 这能回答你的问题吗? how to play wav file in python?
  • 它对我不起作用,因为我不知道流式传输的块大小,我也不想增加任何这样的开销。我想看看是否有任何像 Ipython.display.audio 这样的库可以以更少的开销完成相同的任务。
  • @Xaser 提供的答案实际上比 IPython 解决方案的“开销”更少。另外,chunk_size 你定义了自己,你不需要提前知道。它只是一次性读取的字节数。如果“开销”是指“我不想输入那么多”,请考虑例如pypi.org/project/playsound

标签: python audio


【解决方案1】:

您可以使用pydub 加载音频文件(mp3、wav、ogg、raw)并使用simpleaudio 进行播放。做吧

sound = pydub.AudioSegment.from_wav('audiofile.wav')
playback = simpleaudio.play_buffer(
    sound.raw_data, 
    num_channels=sound.channels, 
    bytes_per_sample=sound.sample_width, 
    sample_rate=sound.frame_rate
    )

瞧!你终于开始了你的节奏。要停止,只需致电playback.stop()

【讨论】:

  • 这可行,但是它的异步意味着实际渲染音频的代码发生在一个新线程中(在幕后),并且程序继续执行如果上面的代码在游戏或服务器中但是在一个终端程序,您只会听到一小段音频,因为该程序可能在需要收听音频文件的时间之前完成......想知道是否可以告诉它播放同步......否则它会在这个用例下工作之后放一个睡眠步骤
【解决方案2】:

如果您想使用黑屏模式,执行将等到流式传输完成,您可以使用pyaudio blocking mode full documentation

示例:

"""PyAudio Example: Play a wave file."""

import pyaudio
import wave
import sys

CHUNK = 1024

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

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

# instantiate PyAudio (1)
p = pyaudio.PyAudio()

# open stream (2)
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 (3)
while len(data) > 0:
    stream.write(data)
    data = wf.readframes(CHUNK)

# stop stream (4)
stream.stop_stream()
stream.close()

# close PyAudio (5)
p.terminate()

【讨论】:

    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2020-09-17
    相关资源
    最近更新 更多