我确实明白我的音频将有两个通道,因此样本将以[left] [right] [left] [right]格式存储... 我不理解的是这意味着什么。我还读到每个样本以[left MSB] [left LSB] [right MSB] [right LSB]格式存储。这是否意味着每个16位整数实际上编码了两个8位帧,还是每个16位整数都是自己的帧,用于左或右通道?
谢谢大家。感激任何帮助。
编辑:如果您选择给出示例,请参考以下内容。
方法背景
具体而言,我需要将一个交错的short[]转换为两个float[],每个数组分别代表左或右通道。我将在Java中实现此功能。
public static float[][] deinterleaveAudioData(short[] interleavedData) {
//initialize the channel arrays
float[] left = new float[interleavedData.length / 2];
float[] right = new float[interleavedData.length / 2];
//iterate through the buffer
for (int i = 0; i < interleavedData.length; i++) {
//THIS IS WHERE I DON'T KNOW WHAT TO DO
}
//return the separated left and right channels
return new float[][]{left, right};
}
我的现有实现
我尝试了播放由此产生的音频。它非常接近,足以让你听懂歌曲的歌词,但显然仍不是正确的方法。
public static float[][] deinterleaveAudioData(short[] interleavedData) {
//initialize the channel arrays
float[] left = new float[interleavedData.length / 2];
float[] right = new float[interleavedData.length / 2];
//iterate through the buffer
for (int i = 0; i < left.length; i++) {
left[i] = (float) interleavedData[2 * i];
right[i] = (float) interleavedData[2 * i + 1];
}
//return the separated left and right channels
return new float[][]{left, right};
}
格式
如果有人想了解音频格式的更多信息,以下是我所了解到的全部内容。
- 格式为PCM 2通道交错大端线性int16
- 采样率为44100
- 每个short[]缓冲区的short数为2048
- 每个short[]缓冲区的帧数为1024
- 每个数据包的帧数为1
short[]
数组的?如果样本已经是两个字节的整数,那么字节序不应该有影响。源是有符号还是无符号的?输出期望在什么范围内? - Piotr Praszmo