C# Read方法返回实际存在样本数的两倍

C# Read方法返回实际存在样本数的两倍,c#,audio,naudio,sampling,C#,Audio,Naudio,Sampling,我有以下代码将音频文件的样本读入字节数组 int signal_read = signal.Read(signal_sample, 0, signal_length); MessageBox.Show(signal_read + ""); 其中,signal是waveilereader类的对象 MessageBox.Show始终显示从软件获得的实际样本数的两倍 read方法是否不返回从音频读取的样本数?否,它返回读取的字节数 因此,对于16位PCM wav,它将提供两倍的采样量。如果是16位立

我有以下代码将音频文件的样本读入字节数组

int signal_read = signal.Read(signal_sample, 0, signal_length);
MessageBox.Show(signal_read + "");
其中,
signal
waveilereader
类的对象

MessageBox.Show始终显示从软件获得的实际样本数的两倍


read
方法是否不返回从音频读取的样本数?

否,它返回读取的字节数

因此,对于16位PCM wav,它将提供两倍的采样量。如果是16位立体声,你会得到四倍的效果

您可能希望使用填充
float[][]
数组的重载,而不是读取字节。例如,对于单声道音频:

var array = new float[][] { new float[sampleCount] };

var actualSamples = signal.Read(array, sampleCount);

字节数与样本数?一个通道还是两个通道?这里的信号是什么?WaveileReader信号=新的WaveileReader(@“E:\signal.wav”)是的!我的音频是16位1声道!非常感谢你!所以,如果我要找到均方根,我要把分子除以((signal_length/2))?@bboyetricks不完全一样。您还需要确保您没有单独计算每个字节-它们成对出现,一起形成一个
值。尝试使用
float[][]
重载,正如我现在在回答中所概述的那样。哦,请注意,它只适用于16位WAV,但这对您来说应该没问题:)如果我一次添加存储在字节数组中的相邻两个样本值,并将它们存储在短数组中,这会是相同的吗?@bboyetricks如果您正确添加它们,是的(例如,使用
BitConverter.ToInt16
)。不过别忘了除以32768f。你的意思是:samples\u short[0]=(samples\u byte[0]+samples\u byte[1])/32768?