PyDub 从变量播放音频
Posted
技术标签:
【中文标题】PyDub 从变量播放音频【英文标题】:PyDub play audio from variable 【发布时间】:2018-12-13 11:39:04 【问题描述】:我有一个函数可以将 WAV 音频帧生成到列表中。有什么方法可以播放该列表中的音频,而无需使用中间文件生成Audiosegment
对象?
编辑:作为参考,this 是我的代码。
【问题讨论】:
【参考方案1】:我设法通过使用BytesIO 对象解决了这个问题。由于我的库使用wave.open
,我可以只输入一个类似 IO 的对象来保存和读取。我不确定这是最pythonic的答案,但这就是我使用的。
【讨论】:
这就是 IO 对象的用途,所以 unleass pydub 已经提供了一个文档化的方法来解决您的问题,这可能确实是 pythonic 解决方案。【参考方案2】:我建议像这样直接实例化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
)
附录:我看到您在链接代码 sn-p 中生成声音。你可能对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
【讨论】:
感谢有关使用自己的数据实例化 AudioSegment 的建议,不知道我能做到这一点。关于在我的库中使用 PyDub 生成器的问题,我想我宁愿不这样做。我想让它尽可能独立,同时理解声音背后的数学原理。以上是关于PyDub 从变量播放音频的主要内容,如果未能解决你的问题,请参考以下文章