Sine Wave Sound Generator in Java

Какой самый простой способ генерировать синусоидальный звук любой частоты в Java? Размер образца более 2 байт помог бы, но это не имеет значения.

Thanks

13
задан Andrew Thompson 25 December 2011 в 23:32
поделиться

1 ответ

createSinWaveBuffer () метод в этих ответах не производит хорошие данные формы сигнала для игры непрерывно. Потребность иметь последний байт быть близким нулем, чтобы иметь полную форму сигнала. Лучший пример -

protected static final float SAMPLE_RATE = 16 * 1024;

public static byte[] createSinWaveBuffer(double freq) {
   double waveLen = 1.0/freq;
   int samples = (int) Math.round(waveLen * 5 * SAMPLE_RATE);
   byte[] output = new byte[samples];
   double period = SAMPLE_RATE / freq;
   for (int i = 0; i < output.length; i++) {
       double angle = 2.0 * Math.PI * i / period;
       output[i] = (byte)(Math.sin(angle) * 127f);  }

   return output;
}
1
ответ дан 1 December 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: