gpt4 book ai didi

c# - 从 WaveStream 将 2 channel 样本读入数组的最简单方法

转载 作者:太空狗 更新时间:2023-10-29 19:43:00 25 4
gpt4 key购买 nike

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

我有一个 wav 文件(16 位 PCM:44kHz 2 channel ),我想为两个 channel 中的每一个将样本提取到两个数组中。据我所知,直接方法在 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;
}
}

关于c# - 从 WaveStream 将 2 channel 样本读入数组的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10421636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com