使用pyaudio改变频率时连续发声

时间:2017-04-25 02:05:02

标签: python audio pyaudio

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

1 个答案:

答案 0 :(得分:0)

您正在使用pyaudio,但是,如果您对不同的库开放,则使用pydub可以提供更简单的解决方案。

你的问题是双重的。

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

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

您可以使用
安装pydub pip install pydub

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

然后我们将这些转换为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)