我一直在努力解决这个问题很长一段时间,我找不到一个有效的解决方案.
我有一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
任何有关这方面的帮助将非常感激.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5221 次 |
| 最近记录: |