尝试使用
将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 []的方式是否正常?
可能不是cuz输出文件无法播放。
此代码不起作用,我不明白为什么:“D
答案 0 :(得分:0)
这可能太晚了,但无论如何。据我所知,你的代码看起来很好,所以要调试我会尝试一些事情:
我检查了Concentus.Ogg文件中是否有一些错误,因为你只有一次WriteSamples() - 我想也许在那种情况下它不能正确地完成页面,但我找不到任何东西。