2012-02-10 74 views
2

我試圖建立一種踏板[¹]以扭曲變化的輸入聲音。從Python中變化的輸入實時聲音合成器

當我從地面開始時,我試圖用python生成連續的聲音,並在滑動滾動條(或類似的小部件)時改變此聲音的頻率。

我試過使用tkSnack python庫生成聲音,但它在生成的聲調之間暫停。而不是這種行爲,即使它正在改變,我也希望腳本持續播放聲音。

由於簡單的功能音色()[²],我用arduino獲得了很好的效果。延遲時間可能很短,聲音似乎是連續的。在我的電腦上用Linux上的python庫可以做類似的事情嗎?

感謝誰會幫我! :)

[¹] http://en.wikipedia.org/wiki/Effects_pedal

[²] http://arduino.cc/en/Reference/Tone

回答

0

PyAudio提供Python綁定portaudio。您可以使用它進行實時音頻處理,儘管Python不是數字的高性能語言。

2

你好我去年用這個公式建立一個踏板

M = 2*D/(1-D); 
x = (1+M)*(x)./(1+k*abs(x)); 

X =輸入信號

d =失真測試一些值像0.1,0.5,0.9等,並查看結果。

這可以實時inputline +蟒蛇+ pyaudio使用,聲音看起來像一個超速......

更新:

實時在Python

#ederwander 
import pyaudio 
import numpy as np 
import wave 

chunk = 1024 
FORMAT = pyaudio.paInt16 
CHANNELS = 1 
RATE = 8800 
K=0 
DISTORTION = 0.61 

p = pyaudio.PyAudio() 

stream = p.open(format = FORMAT, 
       channels = CHANNELS, 
       rate = RATE, 
       input = True, 
       output = True, 
       frames_per_buffer = chunk) 


print "Eng Eder de Souza - ederwander" 
print "Primitive Pedal" 


while(True): 

    data = stream.read(chunk) 
    data = np.fromstring(data, dtype=np.int16) 
    M = 2*DISTORTION/(1-DISTORTION); 
    data = (1+M)*(data)/(1+K*abs(data)); 
    data = np.array(data, dtype='int16') 
    signal = wave.struct.pack("%dh"%(len(data)), *list(data)) 
    stream.write(signal) 

stream.stop_stream() 
stream.close() 
p.terminate() 
原始踏板失真寫

更改變量DISTORTION看到不同的結果:

我改變了一下我的來源使播放錄製的樣本,我也做了一些測試,我得到這個聲音: http://www.freesound.org/people/eriatarka/sounds/15753/ ,然後應用於這裏所描述的公式,你可以在這裏聽更改的文件: http://www.freesound.org/people/ederwander/sounds/146277/

+0

您好,謝謝您的回答! 我正在修改pyaudio,但我無法實現我的目標..它不能產生給定頻率的聲音,然後改變它們。 我從來沒有面對聲音處理之前,我真的不知道從哪裏開始..任何提示? – Franc 2012-02-11 10:27:27

+0

看到我的更新文章 – ederwander 2012-02-13 17:34:09

+0

K在這個例子中做了什麼?它看起來總是爲零,所以「(1 + M)*(數據)/(1 + K * abs(數據))」可以重寫爲「(1 + M)*(數據)」。 – btubbs 2017-07-11 05:29:47