Задача научиться генерировать сигналы для вывода на наушник или динамик (под Андроид).
Синусоида, пила. прямоугольник, но с изменением во времени.
Например синусоида у которой частота меняется от 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();
}
}
Комментариев нет:
Отправить комментарий