Простая Java-библиотека для записи wav-файла из двоичного файла

Я должен реализовать генератор синуса в Java. В качестве входных данных вы указываете частоту, амплитуду и фазу, а в качестве выходных данных должен быть сгенерирован WAV-файл.

private static byte[] generateSineWavefreq(int frequencyOfSignal, int seconds) {
    // total samples = (duration in second) * (samples per second)
    byte[] sin = new byte[seconds * sampleRate];
    double samplingInterval = (double) (sampleRate / frequencyOfSignal);
    System.out.println("Sampling Frequency  : "+sampleRate);
    System.out.println("Frequency of Signal : "+frequencyOfSignal);
    System.out.println("Sampling Interval   : "+samplingInterval);
    for (int i = 0; i < sin.length; i++) {
        double angle = (2.0 * Math.PI * i) / samplingInterval;
        sin[i] = (byte) (Math.sin(angle) * 127);
        //System.out.println("" + sin[i]);
    }
    return sin;
}

Я создал синус как этот, но у меня есть огромные проблемы с созданием.wav из этого. Я попробовал некоторые библиотеки, но особенно заголовок вызывает у меня головную боль.

Любые идеи о том, как я могу реализовать это легко?

1 ответ

"Вручную" написать файл просто. WAV заголовок не сложный. Вы знаете необходимую информацию (частоту дискретизации, продолжительность и т. Д.), А затем просто записываете ее в файл, например, с помощью BufferedOutputStream.

BufferedOutputStream output = ...
// initialization
...

byte[] toWrite  = new byte[] {'R','I','F','F'};
output.write(toWrite, toWrite.length, 0);
...

Но помните, что некоторые поля имеют порядок байтов и другие значения. Сделайте несколько методов, таких как:

byte[] getLittleEndian(int number) {

}

byte[] getBigEndian(int number) {

}
Другие вопросы по тегам