我正在使用 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 编码的音频,但无法找到解决方案。
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);
}
}