PyDub从变量播放音频

时间:2018-12-13 11:39:04

标签: python pydub

我有一个可以将WAV音频帧生成列表的功能。有什么方法可以播放列表中的音频而无需使用中间文件来生成AudioSegment对象?

编辑:供参考,this是我的代码。

2 个答案:

答案 0 :(得分:0)

我设法通过使用BytesIO对象来解决此问题。由于我的库使用wave.open,因此我只需输入一个类似IO的对象即可保存和读取。我不确定这是否是最pythonic的答案,但这就是我所使用的。

答案 1 :(得分:0)

我建议像这样直接实例化AudioSegment()对象:

from pydub import AudioSegment

sound = AudioSegment(
    # raw audio data (bytes)
    data=b'…',

    # 2 byte (16 bit) samples
    sample_width=2,

    # 44.1 kHz frame rate
    frame_rate=44100,

    # stereo
    channels=2
)

附录:我看到您在链接的代码片段中正在生成声音。您可能对pydub's audio generators

感兴趣
from pydub.generators import Sine
from pydub import AudioSegment

sine_generator = Sine(300)

# 0.1 sec silence
silence = AudioSegment.silent(duration=100)
dot = sine_generator.to_audio_segment(duration=150)
dash = sine_generator.to_audio_segment(duration=300)

signal = [dot, dot, dot, dash, dash, dash, dot, dot, dot]

output = AudioSegment.empty()
for piece in signal:
    output += piece + silence

和最后一条注释:像这样反复扩展AudioSegment可能会变慢。您可能想要做类似this Mixer example

的操作