Страницы

Поиск по вопросам

четверг, 18 октября 2018 г.

Как сгенерировать звуковой сигнал синусоиду с изменяющейся частотой?

Задача научиться генерировать сигналы для вывода на наушник или динамик (под Андроид). Синусоида, пила. прямоугольник, но с изменением во времени.
Например синусоида у которой частота меняется от 500Гц до 1000Гц в течении 60 секунд. Где об этом можно почитать или кто поделится личным опытом работы с этим.


Ответ

Генерируем синусоиду с переменной частотой:
private static byte[] generateSineWavefreq(int startFreq, int endFreq, int seconds) { int sampleRate=44100; //частота дискретизации - можно взять даже 8000 double freq, angle; byte[] sin = new byte[seconds * sampleRate]; for (int i = 0; i < sin.length; i++) { freq=startFreq+(endFreq-startFreq)*1.0/sin.length*i; angle = (2.0 * Math.PI * i)*freq/sampleRate; sin[i] = (byte) (Math.sin(angle) * 127); } return sin;
}
Проигрываем полученную волну:
final AudioFormat af = new AudioFormat(sampleRate, 16, 1, true, true); try { SourceDataLine line = AudioSystem.getSourceDataLine(af); line.open(af); line.start(); play(line, generateSineWavefreq(5000, 1000, 1)); line.drain(); line.close(); } catch (Exception e) { e.printStackTrace(); } }

Комментариев нет:

Отправить комментарий