从 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 通道样本读入数组的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章