Для курсовой работы мне нужно создать синусоидальный осциллятор, с помощью которого можно изменить время задержки при воспроизведении эха звука (фленджер). Этот генератор должен иметь регулируемую частоту.
Значение, возвращаемое функцией, должно быть в диапазоне от 1 до -1, чего я достиг с помощью этой функции:
public void oscillateNumber(){
for (int i = 0; i < 200; i++){
oscResult = Math.sin((Number1* Math.PI)/180.0);
updateNumber();
}
}
И имея Number1, варьирующийся от -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);
}
}
Где, если я добавлю это значение к задержке, это даст мне немного больше сходства с эффектом, но я не уверен, что это действительно правильно...
Любой указатель на это будет действительно оценен.
ОБНОВИТЬ
Итак, следуя указателю Оли, я придумал эту функцию для непрерывной модуляции задержки с помощью числа, создаваемого генератором, хотя я не совсем уверен в цикле:
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);
}
}
Это выглядит правильно?