我正在尝试编写一个接受.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_format,http://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());}