最容易阅读的2声道样本插入到从的WaveStream阵列方式(Easiest way to read

2019-07-29 05:52发布

我一直在苦苦挣扎与此相当长的一段时间,我无法找到一个可行的解决方案。

我有一个wav文件(16位PCM:44kHz的2个信道),我要提取的样品成两个阵列用于两个信道。 据我知道这样做的直接方法不n音讯库中存在,所以我试图运行下面的代码来读几隔行扫描样本,但在缓冲区数组保持为空(只是一堆零):

using (WaveFileReader pcm = new WaveFileReader(@"file.wav"))
{
    byte[] buffer = new byte[10000];
    using (WaveStream aligned = new BlockAlignReductionStream(pcm))
    {
        aligned.Read(buffer, 0, 10000);
    }
}

任何帮助将非常感激。

Answer 1:

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;
    }
}


文章来源: Easiest way to read 2-channel samples into array from WaveStream
标签: c# naudio