如何知道音频是否在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。

谢谢。

如何知道音频是否在Naudio c#中消亡

您会发现使用AudioFileReader类更容易获得样本,其Read方法接受浮点数组。对于多声道音频,样本是交错存储的,所以对于立体声,你会得到左边的样本,然后是右边的样本,然后是另一个左边的,等等。