【发布时间】:2016-06-07 07:49:17
【问题描述】:
我正在从事一个涉及音频处理的项目。
我正在从文件中提取一段音频,然后想对其进行一些处理。问题是我将音频数据作为字节数组获取,而我的处理是在双数组上(后来也在复杂数组上......)。
我的问题是如何正确地将收到的字节数组转换为双数组继续?
这是我的输入代码:
AudioFormat format = new AudioFormat(8000, 16, 1, true, true);
AudioInputStream in = AudioSystem.getAudioInputStream(WAVfile);
AudioInputStream din = null;
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
8000,
16,
1,
2,
8000,
true);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
TargetDataLine fileLine = AudioSystem.getTargetDataLine(decodedFormat);
fileLine .open(format);
fileLine .start();
int numBytesRead;
byte[] targetData = new byte[256]; // (samplingRate / 1000) * 32ms
while (true) {
numBytesRead = din.read(targetData, 0, targetData.length);
if (numBytesRead == -1) {
break;
}
double[] convertedData;
// Conversion code goes here...
processAudio(convertedData);
}
到目前为止,我已经研究了围绕本网站和其他网站的不同问题的不同答案。我尝试使用 ByteBuffer 和位转换,但它们都没有给我看起来正确的结果(我的另一个成员在 Python 中的同一个文件上做了同样的事情,所以我有一个参考结果应该是什么大概是……
我错过了什么?如何正确地将字节转换为双精度值?如果我只想在 targetData 中捕获 32ms 的文件,那么 targerData 的长度应该是多少?那么convertedData的长度是多少呢?
提前致谢。
【问题讨论】:
标签: java audio bytearray bytebuffer