java .au文件逐字节分析头

时间:2014-03-15 03:00:26

标签: java file audio byte inputstream

我正在尝试编写一个接受.au音频文件的程序,并显示标题大小,数据大小,编码,采样率和通道数。 (加上.au文件中的任何其他内容。)我认为我已经完成了大部分工作,但它没有返回正确的采样率。我在下面写的代码输出如下:

Header Size: 24
Data Size: 105
Encoding: 3
Sample Rate: -197
# of Channels: 2

采样率实际上是48000,而不是-197。我不确定我做错了什么。 (而且我对数据大小的代表也有点困惑。)如果知道的话,我也想知道.au音频文件的逐字节布局。我想我没事,但我想确定。

以下是.au音频格式文件说明的链接:http://en.wikipedia.org/wiki/Au_file_formathttp://docs.python.org/2/library/sunau.html

我不能在这个项目中使用java库。我需要逐字节地分析文件。代码写在下面,非常感谢所有帮助。谢谢。

try {
    File originalFile = new File("inputSample.au");
    File newFile = new File("outputSample.au");
    FileInputStream inputFile = new FileInputStream(originalFile);
    FileOutputStream outputFile = new FileOutputStream(newFile);

    byte[] buffer = new byte[1024];
    byte[] newBuffer = new byte[1024];
    int length;
    int a = 0;
    while ((length = inputFile.read(buffer)) > 0) { //input file gets read into buffer (1024 bytes per loop)
        if (a == 0)
            for (int i = 0; i < buffer.length; i++)
                newBuffer[i] = buffer[i];
        a++;
    }
    inputFile.close();
    outputFile.close();
    int headerSize = newBuffer[4] + newBuffer[5] + newBuffer[6] + newBuffer[7];
    int dataSize = newBuffer[8] + newBuffer[9] + newBuffer[10] + newBuffer[11];
    int encoding = newBuffer[12] + newBuffer[13] + newBuffer[14] + newBuffer[15];
    int sampleRate = newBuffer[16] + newBuffer[17] + newBuffer[18] + newBuffer[19];
    int channels = newBuffer[20] + newBuffer[21] + newBuffer[22] + newBuffer[23];
    System.out.println("Header Size: " + headerSize);
    System.out.println("Data Size: " + dataSize);
    System.out.println("Encoding: " + encoding);
    System.out.println("Sample Rate: " + sampleRate);
    System.out.println("# of Channels: " + channels);
}
catch (Exception exception) {System.out.println("Exception: " + exception.toString());}

0 个答案:

没有答案