【问题标题】:PyDub play audio from variablePyDub 从变量播放音频
【发布时间】:2023-04-04 05:03:01
【问题描述】:

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

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

【问题讨论】:

    标签: python pydub


    【解决方案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 生成器的问题,我想我宁愿不这样做。我想让它尽可能独立,同时理解声音背后的数学原理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多