2012-02-10 21 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