Для выполнения курсовой работы мне нужно создать синусоидальный генератор, с помощью которого можно изменить время задержки при воспроизведении эха звука (фленджер). Этот генератор должен иметь регулируемую частоту.
Значение, возвращаемое функцией, должно быть между 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);
}
}
Правильно ли это выглядит?