我一直在苦苦挣扎与此相当长的一段时间,我无法找到一个可行的解决方案。
我有一个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);
}
}
任何帮助将非常感激。
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;
}
}