从 WaveStream 将 2 通道样本读入数组的最简单方法

Posted

技术标签:

【中文标题】从 WaveStream 将 2 通道样本读入数组的最简单方法【英文标题】:Easiest way to read 2-channel samples into array from WaveStream 【发布时间】:2012-05-02 20:59:27 【问题描述】:

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

我有一个 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);
    

对此的任何帮助将不胜感激。

【问题讨论】:

你看到了吗:mark-dot-net.blogspot.com.au/2012/01/… 【参考方案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;
    

【讨论】:

以上是关于从 WaveStream 将 2 通道样本读入数组的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章

NAudio中的WaveStream到字节数组?

python中的wave库:2个通道和2个样本宽度

Keras - 将 3 通道图像输入 LSTM

如何将 NAudio WaveStream 写入内存流?

JAVA NIO系列 Buffer 解读

将两列文本文件中的浮点数读入Python中的数组时出错