【问题标题】:Continuous sound while changing frequency with pyaudio使用pyaudio改变频率时连续声音
【发布时间】:2017-04-25 11:24:44
【问题描述】:

我的问题与本文中提出的问题类似:How to change continuously the frequency of a sinusoidal sound? 但我发现解决方案有点令人困惑。我想连接多个音调(频率不同),以便音调是连续的。我试图弄清楚整个相移的事情,但我迷路了。我目前正在使用这里的代码:http://milkandtang.com/blog/2013/02/16/making-noise-in-python/ 来生成音调。 太感谢了!任何见解表示赞赏

【问题讨论】:

    标签: python audio pyaudio


    【解决方案1】:

    您正在使用pyaudio,但是,如果您对不同的库开放,使用pydub 有一个更简单的解决方案。

    您的问题有两个方面。

    • 如何生成音频?
    • 如何连接多个音调?

    pydub 提供简单易用的高级界面来处理音频文件。您可以找到更多详细信息/示例here

    您可以使用
    pip install pydub 安装pydub

    所以对于第一部分,pydub 提供了一个正弦波发生器,在下面的示例示例中使用它来生成持续时间为 3 秒的 1k、2k、3k 的正弦波。

    然后我们将它们转换为audio_segments。之后,我们通过简单地将每个段附加到其他段来连接它们。

    crossfade 以 2.5 秒的间隔使用,以防止在合并点发出噼啪声。

    这是工作代码:

    from pydub import AudioSegment
    from pydub.generators import Sine
    from pydub.playback import play
    
    
    #Generate 1k,2k,3k tones of 3 sec duration
    tone1 = Sine(1000).to_audio_segment(duration=3000)
    tone2 = Sine(2000).to_audio_segment(duration=3000)
    tone3 = Sine(3000).to_audio_segment(duration=3000)
    
    #Append each tone onto other with crossfade
    multitone = tone1.append(tone2, crossfade=2500).append(tone3, crossfade=2500)
    
    
    # Play final tone
    play(multitone)
    

    【讨论】:

    • 如果我想实时生成声音,pydub 会起作用吗?我正在使用 kinect 来跟踪手的位置,并且根据该位置,我希望声音的频率发生变化。谢谢!
    • pydub 适用于现有的 audiframes。对于录制,您可以将 pyaudio 数据转换为 pydub 帧。但从您的应用程序来看,您可以提前或即时使用pydub 生成预定的音频组,然后混合并匹配到 kinect 坐标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2021-10-26
    • 2015-05-23
    • 2021-06-27
    相关资源
    最近更新 更多