Преобразование MP3 в Opus ogg с помощью NAudio без ACM или DMO на сервере
Я попытался преобразовать MP3-файл в Opus Ogg, используя следующий код: Naudio float Sample и Concentus.OggFile short Sample, конвертируйте mp3 в opus ogg, используя:
концентрат.оггфайл и NAudio
когда отредактировано немного как ниже:
using (var mp3Reader = new AudioFileReader(mp3file))
using (var memo = new MemoryStream())
{
var bufferFloat = new float[mp3Reader.Length / (mp3Reader.WaveFormat.BitsPerSample / 8)];
var count = mp3Reader.Read(bufferFloat, 0, bufferFloat.Length);
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(24000, 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, 24000);
oggOut.WriteSamples(buffShort, 0, buffShort.Length);
oggOut.Finish();
}
он работает отлично, но когда я запускаю код с удаленного сервера на общем хостинге, он не запускается из-за отсутствия кодеков ACM или DMO.
Поэтому, когда я пытаюсь использовать NLayer.NAudioSupport и должен изменить:
using (var mp3Reader = new AudioFileReader(mp3file))
чтобы:
var builder = new Mp3FileReader.FrameDecompressorBuilder(wf => new Mp3FrameDecompressor(wf));
using (var mp3Reader = new Mp3FileReader(source, builder))
эта строка:
var count = mp3Reader.Read(bufferFloat, 0, bufferFloat.Length);
Независимо от того, что я делаю, считайте через это исключение: Попытка прочитать за концом потока!!
Поэтому, я буду очень признателен, если кто-нибудь покажет мне, как это достигается, поскольку у меня мало или нет звука.