C# 从WaveStream向阵列读取2通道样本的最简单方法

C# 从WaveStream向阵列读取2通道样本的最简单方法,c#,naudio,C#,Naudio,我已经为此挣扎了很长一段时间,但我找不到有效的解决方案 我有一个wav文件(16位PCM:44kHz 2通道),我想将两个通道的样本提取到两个阵列中。据我所知,NAudio库中不存在用于此操作的直接方法,因此我尝试运行以下代码来读取一些交错采样,但缓冲区数组保持为空(只有一堆零): 在此方面的任何帮助都将不胜感激。BlockAlignReductionStream是不必要的。这里有一种简单的方法可以读取缓冲区中的数据,并将其读入单独的16位左右样本缓冲区 using (WaveFileReade

我已经为此挣扎了很长一段时间,但我找不到有效的解决方案

我有一个wav文件(16位PCM:44kHz 2通道),我想将两个通道的样本提取到两个阵列中。据我所知,NAudio库中不存在用于此操作的直接方法,因此我尝试运行以下代码来读取一些交错采样,但缓冲区数组保持为空(只有一堆零):


在此方面的任何帮助都将不胜感激。

BlockAlignReductionStream
是不必要的。这里有一种简单的方法可以读取缓冲区中的数据,并将其读入单独的16位左右样本缓冲区

using (WaveFileReader pcm = new WaveFileReader(@"file.wav"))
{
    int samplesDesired = 5000;
    byte[] buffer = new byte[samplesDesired * 4];
    short[] left = new short[samplesDesired];
    short[] right = new short[samplesDesired];
    int bytesRead = pcm.Read(buffer, 0, 10000);
    int index = 0;
    for(int sample = 0; sample < bytesRead/4; sample++)
    { 
        left[sample] = BitConverter.ToInt16(buffer, index);
        index += 2;
        right[sample] = BitConverter.ToInt16(buffer, index);
        index += 2;
    }
}
使用(WaveFileReader pcm=新的WaveFileReader(@“file.wav”))
{
int-sampleseeded=5000;
字节[]缓冲区=新字节[samplesDesired*4];
short[]left=新的short[所需样本];
short[]right=新的short[所需样本];
int bytesRead=pcm.Read(缓冲区,0,10000);
int指数=0;
for(int sample=0;sample
您是否看到过以下内容:
using (WaveFileReader pcm = new WaveFileReader(@"file.wav"))
{
    int samplesDesired = 5000;
    byte[] buffer = new byte[samplesDesired * 4];
    short[] left = new short[samplesDesired];
    short[] right = new short[samplesDesired];
    int bytesRead = pcm.Read(buffer, 0, 10000);
    int index = 0;
    for(int sample = 0; sample < bytesRead/4; sample++)
    { 
        left[sample] = BitConverter.ToInt16(buffer, index);
        index += 2;
        right[sample] = BitConverter.ToInt16(buffer, index);
        index += 2;
    }
}