如何将NAudio数据转换为OGG Opus格式?

问题描述 投票:0回答:1

我正在使用 NAudio 从音频设备捕获数据,我需要将数据转换为 OGG Opus 格式。我正在使用 OpusDotNet nuget 包 https://github.com/mrphil2105/OpusDotNet

下面是从NAudio获取音频数据的代码

OpusEncoder opusEncoder = new OpusEncoder(Application.Audio, 16000, 1);

WaveInEvent waveInStream = new WaveInEvent();
waveInStream.DeviceNumber = 0;
waveInStream.WaveFormat = new WaveFormat(16000, 16, 1);
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(OnDataAvailable);
waveInStream.StartRecording();

private void OnDataAvailable(object sender, WaveInEventArgs e)
{
    int encodedLength;
    byte[] encodedData = opusEncoder.Encode(e.Buffer,e.Buffer.Length,out encodedLength);
}

我收到错误消息,提示帧大小无效。 我研究了使用 NAudio 将 WAV 流转换为 Opus 和 从设备作为 RTP 发送 NAudio / Opus 编码的音频,但无法找到解决方案。

c# naudio opus
1个回答
0
投票
opus 编码器的输入数据必须是 PCM 格式。 试试这个:

WaveInEvent waveInStream = new WaveInEvent(); waveInStream.DeviceNumber = 0; waveInStream.BufferMilliseconds = 60; waveInStream.WaveFormat = new WaveFormat(16000, 16, 1); waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(OnDataAvailable); waveInStream.StartRecording(); private void OnDataAvailable(object sender, WaveInEventArgs e) { using (var reader = new RawSourceWaveStream(new MemoryStream(e.Buffer, 0, e.BytesRecorded), new WaveFormat(16000, 16, 1))) using (var encoder = new OpusEncoder(OpusDotNet.Application.Audio, 16000, 1) { Bitrate = 128000, // 128 kbps VBR = true, // Variable bitrate }) { var pcmStream = WaveFormatConversionStream.CreatePcmStream(reader); MemoryStream mem = new MemoryStream(); pcmStream.CopyTo(mem); byte[] encodedData = opusEncoder.Encode(mem.ToArray(),mem.ToArray().Length,out encodedLength); } }
    
© www.soinside.com 2019 - 2024. All rights reserved.