【问题标题】:Incorrect argument using Opus.NET when Encoding编码时使用 Opus.NET 的参数不正确
【发布时间】:2017-10-18 14:56:34
【问题描述】:

我正在使用Opus.NET 并成功地使用他们的默认演示项目编码音频,默认采样率48000。当我尝试将采样率更改为 8000 时,我收到 Opus Encoding 错误。

我确信这与segmentFrames 以及Bitrate 必须相应更改。我无法在此处进行此计算,这是我在 GitHub 的默认 Opus.NET 演示项目中的代码。

这里是代码

void StartEncoding()
{
    _startTime = DateTime.Now;
    _bytesSent = 0;
    _segmentFrames = 960;
    _encoder = OpusEncoder.Create(48000, 1,   FragLabs.Audio.Codecs.Opus.Application.Voip);
    _encoder.Bitrate = 8192;
    _decoder = OpusDecoder.Create(48000, 1);
    _bytesPerSegment = _encoder.FrameByteCount(_segmentFrames);

    _waveIn = new WaveIn(WaveCallbackInfo.FunctionCallback());
    _waveIn.BufferMilliseconds = 25;
    _waveIn.DeviceNumber = comboBox1.SelectedIndex;
    _waveIn.DataAvailable += _waveIn_DataAvailable;
    _waveIn.WaveFormat = new WaveFormat(48000, 16, 1);

    _playBuffer = new BufferedWaveProvider(new WaveFormat(48000, 16, 1));

    _waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback());
    _waveOut.DeviceNumber = comboBox2.SelectedIndex;
    _waveOut.Init(_playBuffer);

    _waveOut.Play();
    _waveIn.StartRecording();

    if (_timer == null)
    {
        _timer = new System.Windows.Forms.Timer();
        _timer.Interval = 1000;
        _timer.Tick += _timer_Tick;
    }
    _timer.Start();
}

每次我通过将值从 48000 更改为 8000 进行编码时,我都会在 Opus 上收到错误提示

编码错误参数不正确

【问题讨论】:

  • 比特率错误。见维基:en.wikipedia.org/wiki/WAV
  • 我知道如果我将比特率更改为 8000 样本它不能是 8192 并且segmentFrames 也需要从 960 更改为某些东西.. 但问题是什么。您提供的链接没有此信息。
  • 此处列出的延迟是正常工作采样率(通常为 44.1 kHz)下的总延迟(帧大小,加上所有前瞻)。见网页:en.wikipedia.org/wiki/Comparison_of_audio_coding_formats

标签: c# opus


【解决方案1】:

您的采样率可以是[8, 12, 16, 24, 48] kHz 之一,所以 8kHz 是可以的。

_segmentFrames 的值取决于您的采样率和作品帧的大小(以毫秒为单位)。可能的大小为[2.5, 5, 10, 20, 40, 60] ms,默认为 20 毫秒。下面是 960 的计算方式:

SampleRate / 1000 * FrameSize = 48000 / 1000 * 20 = 960

如果您希望速率为 8kHz,_segmentFrames 应为 8000 / 1000 * 20 = 160

_encoder.Bitrate 可以是任何6-510 kbs

更多信息:https://mf4.xiph.org/jenkins/view/opus/job/opus/ws/doc/html/group__opus__encoder.html

【讨论】:

    猜你喜欢
    • 2011-02-19
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多