2017-04-25 81 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座標。 –