将通道采样从WaveStream转换为阵列

我一直在努力争取相当一段时间,我找不到一个可行的解决方案。

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

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

任何帮助,将不胜感激。


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;
    }
}
链接地址: http://www.djcxy.com/p/59191.html

上一篇: channel samples into array from WaveStream

下一篇: Is it possible to simplify my architecture?