即时将原始音频字节从 NAudio 转换为 wav 字节

Posted

技术标签:

【中文标题】即时将原始音频字节从 NAudio 转换为 wav 字节【英文标题】:Converting Raw audio bytes from NAudio to wav bytes on the fly 【发布时间】:2021-01-11 15:26:43 【问题描述】:

您好,我正在尝试使用 NAudio 打开扬声器的实时流,然后以 wav 格式播放它们。我正在使用以下代码

private void ProcessData(object sender, WaveInEventArgs e)

    if (e.BytesRecorded > 0)
    
        MemoryStream stream = new MemoryStream();
        WaveFormat format = WaveFormat.CreateALawFormat(CaptureInstance.WaveFormat.SampleRate, CaptureInstance.WaveFormat.Channels);
        
        using (WaveFileWriter writer = new WaveFileWriter(new IgnoreDisposeStream(stream), format))
        
            //important i am writing the bytes on the fly to the wavefilewriter
            writer.Write(e.Buffer, 0, e.BytesRecorded);
            writer.Flush();
            writer.Dispose();
            //after dispose i assume the wave file chunk is ready to be read/send
        

        using (var player = new WaveOutEvent())
        
            using (var reader = new WaveFileReader(stream))
            
                //to test the wav bytes i tried to play the bytes but it gives error
                //Not a WAVE file - no RIFF header
                player.Init(reader);
                player.Play();
            
        
        
    

但它会引发错误“不是 wav 文件,RIFF 标头不存在”,我知道要从原始字节播放实时音频,NAudio 文档中已经显示了另一种方法,但请注意测试字节的可靠性,我正在播放字节并测试wavefilewriter。实际目的不是播放音频,而是在确认后将正确的 wav 字节发送到服务器进行处理,例如它开始播放,然后我将在流中使用 ByteArray。

【问题讨论】:

【参考方案1】:

您需要将MemoryStream 重新定位到开头,以便使用WaveFileReader 阅读它。

【讨论】:

好的,我会试一试,如果它解决了问题,请告诉您

以上是关于即时将原始音频字节从 NAudio 转换为 wav 字节的主要内容,如果未能解决你的问题,请参考以下文章

使用 NAudio 将 g722 音频转换为 WAV

使用 NAudio 将 WAV 流转换为 Opus

字节到 sbytes 并返回 - C# NAudio

将原始PCM数据转换为RIFF WAV

在 NAudio 中附加 WAV 标头

使用 NAudio 创建静音 WAVE 流