【问题标题】:Simple Java-library for writing wav file from binary用于从二进制写入 wav 文件的简单 Java 库
【发布时间】:2013-04-04 16:47:44
【问题描述】:

我应该在 java 中实现一个 sinus-generator。作为输入,你给出频率、幅度和相位,作为输出,应该生成一个 .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 时遇到了很大的问题。我尝试了一些库,但尤其是标题让我很头疼。

关于如何轻松实现这一点的任何想法?

【问题讨论】:

    标签: java wav wave trigonometry riff


    【解决方案1】:

    “手动”写入文件很简单。 WAV header 并不复杂。您知道必要的信息(采样率、持续时间等),然后只需使用 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) {
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      相关资源
      最近更新 更多