Python 使用pyaudio更改频率时发出连续声音

Python 使用pyaudio更改频率时发出连续声音,python,audio,pyaudio,Python,Audio,Pyaudio,我的问题与这篇文章中的问题类似: 但我发现解决方案有点混乱。我想连接不同频率的多个音调,以便这些音调是连续的。我正试图弄清楚整个相移的事情,但我只是迷路了。我目前正在使用这里的代码:生成音调。 非常感谢你!如果您正在使用pyaudio,欢迎您提供任何见解,但是,如果您对不同的库开放,则使用pyaudio会有一个更简单的解决方案 你的问题有两个方面 如何生成音频音调? 如何连接多个音调? 为音频文件的操作提供简单易用的高级界面。您可以找到更多详细信息/示例 您可以使用安装pydub pip安装py

我的问题与这篇文章中的问题类似: 但我发现解决方案有点混乱。我想连接不同频率的多个音调,以便这些音调是连续的。我正试图弄清楚整个相移的事情,但我只是迷路了。我目前正在使用这里的代码:生成音调。 非常感谢你!如果您正在使用pyaudio,欢迎您提供任何见解,但是,如果您对不同的库开放,则使用pyaudio会有一个更简单的解决方案

你的问题有两个方面

如何生成音频音调? 如何连接多个音调? 为音频文件的操作提供简单易用的高级界面。您可以找到更多详细信息/示例

您可以使用安装pydub pip安装pydub

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

然后我们将其转换为音频片段。之后,我们通过简单地将每个片段附加到另一个片段来连接它们

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与现有的Audiframe一起工作。对于录制,您可以将pyaudio数据转换为pydub帧。但从应用程序来看,您可以提前或动态使用pydub生成预先确定的音频音调集,只需与kinect坐标混合匹配即可。