NAudio MediaFoundationRecorder EncodeToAAC字节数组而不是文件

时间:2013-10-28 06:41:17

标签: c# .net vb.net audio naudio

我目前正在做的是在录制时我从数据接收事件中获取字节并使用编解码器对字节进行编码。我目前使用的编解码器是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文件?

1 个答案:

答案 0 :(得分:3)

是的,正如Corey所说,这是NAudio for 1.7的新增功能,并且我希望将来添加对Stream编码的支持。

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