NAudio MediaFoundationRecorder EncodeToAAC Byte 数组而不是文件

本文关键字:文件 数组 MediaFoundationRecorder EncodeToAAC Byte NAudio | 更新日期: 2023-09-27 18:37:08

我目前正在做的是在录制时从数据接收事件中获取字节并使用编解码器对字节进行编码。我设置的编解码器目前使用的是ALaw,G722,GSM等(如NetworkChatDemo)

用于开始录制的代码

    If waveIn Is Nothing Then
        waveIn = New WaveIn
        waveIn.DeviceNumber = 0
        waveIn.BufferMilliseconds = 100
        waveIn.WaveFormat = codec.RecordFormat
        waveIn.StartRecording()
    End If

用于处理记录字节的代码

Private Sub OnDataAvailable(ByVal sender As Object, ByVal e As WaveInEventArgs) Handles waveIn.DataAvailable
    Dim encoded As Byte() = codec.Encode(e.Buffer, 0, e.BytesRecorded)
    ...
    //Send encoded audio over UdpClient
End Sub

这对我来说效果很好,但我想添加对 AAC 格式的支持。因此,我想实现与上述 DataReceived 事件相同的结果,这是一个编码的 AAC 音频字节数组,我可以通过 udp、MediaFoundationEncoder.EncodeToAac(...) 或我在 NAudio 中不知道的其他类/函数发送。据我所知,MediaFoundationEncoder.EncodeToAac(...)仅将音频编码为文件而不是字节数组。它也不接受字节数组作为参数。有没有办法实现我想要的,或者 NAudio 只允许我在完全记录和保存 AAC 文件后使用它?

NAudio MediaFoundationRecorder EncodeToAAC Byte 数组而不是文件

是的,正如 Corey 所说,这是 NAudio 1.7 的新成员,添加对 Stream 编码的支持是我将来肯定想添加的东西。

如果您不介意在较低级别工作,则可以尝试将 AAC 编码器构造为 MFT,从MediaFoundationTransform创建派生类(请参阅MediaFoundationResampler作为如何执行此操作的示例。