2017-04-25 82 views
0

改变频率我的问题是一个类似于在这个岗位要求:How to change continuously the frequency of a sinusoidal sound? 但我找到了解决办法是有点混乱。我想连接多个音调(频率不同),以便音调连续。我试图弄清楚整个阶段转变的事情,但我只是迷失了。我目前正在使用这里的代码:http://milkandtang.com/blog/2013/02/16/making-noise-in-python/来生成音调。 非常感谢!任何洞察力赞赏连续的声音,同时用pyaudio

回答

0

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

你的问题是双重的。

  • 如何产生的音频铃声?
  • 如何连接多个音调?

pydub为音频文件的操纵提供简单和容易的高级接口。你可以找到更多信息/例子here

您可以安装pydub使用
pip install pydub

所以对于第一部分,pydub提供一下以下用于样品例如产生的1K,2K正弦波的正弦波发生器, 3秒持续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) 
+0

会pydub工作,如果我试图产生声音的实时?我正在使用一个kinect来跟踪手的位置,并且根据这个位置,我想要改变声音的频率。谢谢! –

+0

'pydub'与现有的audiframes协同工作。对于录制,您可以将pyaudio数据转换为pydub框架。但从您的应用程序判断,您可以提前或动态地使用'pydub'生成预定义的音频音调,并且只需将它们混合并匹配到kinect坐标。 –