gpt4 book ai didi

c# - Naudio float Sample 和 Concentus.OggFile short Sample,将 mp3 转换为 opus ogg

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:07 54 4
gpt4 key购买 nike

试图通过使用将 mp3 文件转换为 opus ogg 文件

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

Concentus.Ogg 文件 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

最佳答案

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

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

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

关于c# - Naudio float Sample 和 Concentus.OggFile short Sample,将 mp3 转换为 opus ogg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42438014/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com