2012-02-10 11 views
2

さまざまな入力音を歪めるために、ある種類のペダル[¹]を作成しようとしています。Pythonのさまざまな入力からのリアルタイムサウンドシンセサイザ

私は地面から始めているので、私は、連続音を生成し、この音の周波数をスクロールバー(または同様のウィジェット)をスライドさせるように変えようとしています。

私はtkSnackのpythonライブラリをサウンドの生成に使用しようとしましたが、生成されたトーンの間に一時停止します。この振る舞いの代わりに、私のスクリプトは、たとえそれが変化していてもサウンドを連続的に演奏したい。

シンプルな機能音()[²]のおかげで、私はarduinoで良い結果を得ました。おそらくレイテンシータイムが非常に遅く、音が連続しているようです。 Linux上でPythonライブラリを使用しているコンピュータでも同様のことが可能ですか?

誰がお手伝いしますか? :)

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

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

答えて

0

PyAudioはportaudio用のPythonバインディングを提供します。 Pythonは数値の高性能言語ではありませんが、それを使ってリアルタイムのオーディオ処理を行うことができます。

2

こんにちはペダル等

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

X =入力信号

D =歪み試験0.1、0.5、0.9のようないくつかの値を、構築し、結果を確認するために、昨年、この式を使用します。

このリアルタイムinputline +のpython + pyaudioで使用することができ、音が1つのオーバードライブのように見える...

更新:

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

こんにちは、ありがとう! 私はパイオディオで微妙に変化していましたが、目的を達成できません。特定の周波数のサウンドを生成して変更することはできません。 私は前にサウンド処理に直面したことはありません。どこから始めるべきかわからないのですか? – Franc

+0

私の更新ポストを参照してください – ederwander

+0

この例ではKとは何ですか? "(1 + M)*(データ)/(1 + K * abs(データ))"はちょうど "(1 + M)*(データ)"と書き直すことができます。 – btubbs

関連する問題