WAV文件到字节数组

本文关键字:数组 到字节 文件 WAV | 更新日期: 2023-09-27 18:19:46

我目前正在使用Naudio记录用户的语音,并将其转换为字节数组,这样我就可以对其应用FFT,并将它转换为双数组,然后转换为声谱图。我目前无法将WAV文件转换为字节数组。谢谢

  private void mic_Click(object sender, EventArgs e)
    {
        if (MicB.Text.Equals("Start"))
        {
            int deviceNumber = 0;
            sourceStream = new NAudio.Wave.WaveIn();
            sourceStream.DeviceNumber = deviceNumber;
            sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);
            sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(sourceStream_DataAvailable);             
            waveWriter = new NAudio.Wave.WaveFileWriter(test.wav, sourceStream.WaveFormat);
            sourceStream.StartRecording();
            MicB.Text = "Stop";
        }
        else if (MicB.Text.Equals("Stop"))
        {               
            if (waveOut != null)
            {
                waveOut.Stop();
                waveOut.Dispose();
                waveOut = null;
            }
            if (sourceStream != null)
            {
                sourceStream.StopRecording();
                sourceStream.Dispose();
                sourceStream = null;
            }
            if (waveWriter != null)
            {
                waveWriter.Dispose();
                waveWriter = null;
            }
            MicB.Text = "Start";
        }
    }
    private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
    {
        if (waveWriter == null) return;
        waveWriter.Write(e.Buffer, 0, e.BytesRecorded);
        waveWriter.Flush();                    
    }

编辑:我从Coding4Fun获得了这段代码,并编辑了一小部分,但不确定这是否是我想要的,即转换为浮点并对其应用FFT。对不起,我对音频信号完全陌生。

 private void spectro_Click(object sender, EventArgs e)
    {
        //convert to float
        using (WaveFileReader reader = new WaveFileReader(test.wav))
        {
            IWaveProvider stream32 = new Wave16ToFloatProvider(reader);
            using (WaveFileWriter converted = new WaveFileWriter(temp.wav, stream32.WaveFormat))
            {
                byte[] buffer = new byte[8192];
                int bytesRead;
                do
                {
                    bytesRead = stream32.Read(buffer, 0, buffer.Length);
                    converted.Write(buffer, 0, bytesRead);
                } while (bytesRead != 0 && converted.Length < reader.Length);
            }
        }
    }

问题:在转换为浮点后,我如何应用FFT?

WAV文件到字节数组

这很难回答,但我可以大胆猜测。您使用的是WaveFileWriter。库中是否存在WaveStreamWriter?在这种情况下,可以提供MemoryStream作为参数,并使用流上的ToArray来获取字节。