#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(); } }
Комментариев нет:
Отправить комментарий