如何在C#中使用Naudio从立体声通道mp3获取PCM数据

时间:2016-10-19 07:19:38

标签: c# naudio

我是Naudio的新手并使用它来从Mp3文件中获取PCM数据,这是我从单声道文件中获取PCM的代码,但不知道如何使用立体声声道文件

代码:

Mp3FileReader file = new Mp3FileReader(op.FileName);
int _Bytes = (int)file.Length;
byte[] Buffer = new byte[_Bytes];
file.Read(Buffer, 0, (int)_Bytes);
for (int i = 0; i < Buffer.Length - 2; i += 2)
{
  byte[] Sample_Byte = new byte[2];
  Sample_Byte[0] = Buffer[i + 1];
  Sample_Byte[1] = Buffer[i + 2];
  Int16 _ConvertedSample = BitConverter.ToInt16(Sample_Byte, 0);
}

如何从立体声通道Mp3文件中获取PCM?

1 个答案:

答案 0 :(得分:1)

在立体声文件中,样本是交错的:一个是左声道样本,后面是一个右声道等。所以在循环中你可以一次读取四个字节来读出样本。

您的代码中也存在一些错误。您应该使用Read的返回值,而不是缓冲区的大小,并且您在代码中有一个错误来访问示例。此外,无需复制到临时缓冲区。

这样的事情对你有用:

var file = new Mp3FileReader(fileName);
int _Bytes = (int)file.Length;
byte[] Buffer = new byte[_Bytes];

int read = file.Read(Buffer, 0, (int)_Bytes);
for (int i = 0; i < read; i += 4)
{
    Int16 leftSample = BitConverter.ToInt16(Buffer, i);
    Int16 rightSample = BitConverter.ToInt16(Buffer, i + 2);
}