如何知道音频是否在Naudio c#中消亡
本文关键字:Naudio 何知道 音频 是否 | 更新日期: 2023-09-27 18:17:03
我想知道这首歌什么时候停了(几秒钟听不清)。我在c#中使用Naudio库。到目前为止,我能够获得PCM数据并绘制音频的幅度。我猜死音频通过这个幅度我正在获得。但是我对音频频道有点困惑。下面是我写的一段代码:
NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName));
int songLength = (int)wave.Length;
byte[] songPCM = new byte[songLength];
int sampleRate = (int)wave.WaveFormat.SampleRate;
int bitsPerSample = (int)wave.WaveFormat.BitsPerSample;
int numChannels = (int)wave.WaveFormat.Channels;
wave.Read(songPCM, 0, songLength);
double[] _waveLeft = new double[songLength / 8];
double[] _waveRight = new double[songLength / 8];
System.IO.StreamWriter fileoutLeft = new System.IO.StreamWriter("E:''LOutputSongPCM.dat", true);
System.IO.StreamWriter fileoutRight = new System.IO.StreamWriter("E:''ROutputSongPCM.dat", true);
int h = 0;
for (int i = 0; i < songLength; i += 8)
{
_waveLeft[h] = (double)BitConverter.ToSingle(songPCM, i);
_waveRight[h] = (double)BitConverter.ToSingle(songPCM, i + 4);
chart1.Series["wave"].Points.Add(_waveLeft[h]);
//chart1.Series["wave"].Points.Add(_waveRight[h]);
fileoutLeft.WriteLine(_waveLeft[h]);
fileoutRight.WriteLine(_waveRight[h]);
h++;
}
fileoutLeft.Close();
fileoutRight.Close();
现在对于这段代码,我知道音频是2通道。所以我参考了许多链接和线程,如果我正确地读取每个通道的pcm数据,我就会感到困惑。但是我比较了每个频道的情节,他们看起来不错(与原创歌曲匹配),但我不确定他们的准确性。你能指导我获得任何渠道的准确原始数据吗?单声道,立体声和5.1。
谢谢。
您会发现使用AudioFileReader
类更容易获得样本,其Read
方法接受浮点数组。对于多声道音频,样本是交错存储的,所以对于立体声,你会得到左边的样本,然后是右边的样本,然后是另一个左边的,等等。