【问题标题】:Naudio float Sample and Concentus.OggFile short Sample, convert mp3 to opus oggNaudio float Sample 和 Concentus.OggFile short Sample,将 mp3 转换为 opus ogg
【发布时间】:2017-07-15 05:57:59
【问题描述】:

尝试使用将 mp3 文件转换为 opus ogg 文件

NAudio:https://github.com/naudio/NAudio

Concentus.OggFile https://github.com/lostromb/concentus.oggfile

using (var source = new MemoryStream(mp3File))
using (var mp3Reader = new MyAudioFileReader(source, FileReaderType.Mp3))
using (var memo = new MemoryStream())
{
    var bufferFloat = new float[mp3Reader.Length / (mp3Reader.WaveFormat.BitsPerSample / 8)];
    var count = mp3Reader.Read(bufferFloat, 0, bufferFloat.Length);

    //convert float to short 
    var buffShort = new short[count];
    var scale = (float)(short.MaxValue);
    for (int i = 0; i < count; i++)
    {
        buffShort[i] = (short)(bufferFloat[i] * scale);
    }
    //encoder
    var encoder = OpusEncoder.Create(48000, 
        mp3Reader.WaveFormat.Channels, 
        OpusApplication.OPUS_APPLICATION_AUDIO);

    encoder.Bitrate = 65536;//64kbps

    //tags
    var tags = new OpusTags();
    tags.Fields[OpusTagName.Title] = "Title";
    tags.Fields[OpusTagName.Artist] = "Artist";

    //
    var oggOut = new OpusOggWriteStream(encoder, memo, tags);

    oggOut.WriteSamples(buffShort, 0, buffShort.Length);
    oggOut.Finish();

    result = memo.ToArray();
}

我不了解基础知识,做了一些 GDD,这是我得到的结果。

OpusOggWriteStream.WriteSamples()

需要 short[] 样本作为输入。 我将 NAudio float[] 示例提供程序转换为 short[] 的方式可以吗?

可能不是因为无法播放输出文件。

此代码不起作用,我不知道为什么:“D

【问题讨论】:

    标签: c# mp3 naudio ogg opus


    【解决方案1】:

    这可能太晚了,但无论如何。据我所知,您的代码看起来不错,所以要调试,我会尝试一些事情:

    1. 实际上在 OggOpusWriteStream 中有一个 WriteSamples() 重载,它接受 float[]。首先尝试使用它
    2. 我会确保 mp3Reader.Read 实际上产生的数据与您认为的一样多。我想知道它是否可能只返回一帧解码数据或类似的东西。尝试将数据写为未压缩的 pcm 并进行完整性检查

    我检查了 Concentus.Oggfile 中是否存在一些错误,因为您只写过一次 WriteSamples() - 我认为在这种情况下它可能无法正确完成页面,但我找不到任何东西。

    【讨论】:

      猜你喜欢
      • 2013-12-08
      • 2016-11-06
      • 2020-09-14
      • 2012-08-06
      • 1970-01-01
      • 2021-08-09
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多