Страницы

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

пятница, 13 декабря 2019 г.

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

#java #android


Задача научиться генерировать сигналы для вывода на наушник или динамик (под Андроид). 
Синусоида, пила. прямоугольник, но с изменением во времени. 

Например синусоида у которой частота меняется от 500Гц до 1000Гц в течении 60 секунд.
Где об этом можно почитать или кто поделится личным опытом работы с этим.
    


Ответы

Ответ 1



Генерируем синусоиду с переменной частотой: 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(); } }

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

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