Java Sine Oscillator для эффекта Фленжера - PullRequest
0 голосов
/ 26 февраля 2012

Для выполнения курсовой работы мне нужно создать синусоидальный генератор, с помощью которого можно изменить время задержки при воспроизведении эха звука (фленджер). Этот генератор должен иметь регулируемую частоту.

Значение, возвращаемое функцией, должно быть между 1 и -1, чего я достиг с помощью этой функции:

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

И с числом 1 от -180 до 180 (здесь можно найти это решение: Как использовать синусоидальную / косинусную волну для возврата колеблющегося числа )

Как я могу включить частоту в этот генератор? Частота должна быть от 0 до 5 Гц ...

Я совершенно новичок в этом материале, поэтому я не совсем понимаю механику этого, еще одна функция, которую я нашел, это

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);
    }
}

Где, если я добавлю это значение к задержке, это даст мне немного больше сходства с эффектом, но я не уверен, что это действительно правильно ...

Любой указатель на это будет очень признателен.

UPDATE

Хорошо, поэтому, следуя указателю Оли, я предложил эту функцию для непрерывной модуляции задержки с помощью числа, генерируемого осциллятором, хотя я не совсем уверен в цикле:

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 Ответ

1 голос
/ 26 февраля 2012

Общее выражение для синусоидального генератора:

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

, где f - частота в Гц, а t - время в секундах.

...