2012-02-26 7 views
0

コースワークの練習では、サウンドのエコー(フランジャー)を再生する際の遅延時間を変更するためのサインオシレータを作成する必要があります。このオシレータは、調整可能な周波数を持つ必要があります。私はこの機能を達成フランジャーエフェクト用のJava Sine Oscillator

関数によって返される値は、1と-1の間であるべきである

public void oscillateNumber(){ 
    for (int i = 0; i < 200; i++){ 
      oscResult = Math.sin((Number1* Math.PI)/180.0); 
     updateNumber(); 
    } 
} 

-180と180の間で変化番号1を有することにより(:How to use a Sine/Cosine wave to return an oscillating numberここで、この解決策を見つけました)

このオシレータにどのように周波数を組み込むことができますか?周波数は、私は完全にこの仕組みを把握しておりませんので、私はこの材料には完全に新しいです

... 0〜5Hzの調整可能である必要があり、私が見つけたもう一つの機能は

public void oscillateNumber3(){ 
    for (int i = 0; i < 400; i++){ 
     oscResult = (float)Math.sin(angle); 
     angle += (float)(2*Math.PI) * frequency/44100f; 
     java.lang.System.out.println(oscResult); 
    } 
} 

Iの場合でありますこの値を遅延に加えると、効果に少し似ていますが、実際には正しいかどうかわかりません...

これへのポインタは本当に感謝しています。

UPDATE

[OK]をので、私は継続的に、発振器によって生成数と遅延を調節するために、この機能を思い付いたのOliのポインタ以下、私はしかしループについてかなりよく分からない:

public void oscillatorNumber(int frequency, int sampleRate){ 
    for (int t = 0; t < (sampleRate * frequency); t++){ 
     oscResult = (float)Math.sin(angle); 
     angle += (float)(2*Math.PI) * 2 * (t/44100); // sin(2*pi* f *(t/Fs)) 
     java.lang.System.out.println(oscResult); 
    } 
} 

これは正しいですか?

答えて

1

正弦波オシレータのための一般的な式である:

y(t) = sin(2*pi*f*t) 

fはHz単位の周波数であり、そしてtは秒単位の時間です。

+1

['Note'](http://stackoverflow.com/a/2065693/230513)がその例です。 – trashgod

+0

そのOliのおかげで、私がアップデートに投稿した機能を見ていただけますか?他のエフェクトを適用すると、オシレーターの値が連続的に出るようなものが必要ですが、私はそうはしません...それぞれの更新時に 't'を得るための経過時間をチェックしますか? – Alex