Проблема связана с длиной дорожки mp3, это больше, чем исходная длина записанного звука на несколько секунд (с LAMEPreset.ABR_64) до нескольких минут (с LAMEPreset.VBR_90) для 15 минут оригинала audio.
В проигрывателе Windows Media mp3-файл воспроизводится нормально до фактической длины звука, а затем внезапно пытается закончиться.
Код: Выделить всё
public async Task GetAudioStreamById(int audioId)
{
using (var audioStream = await _audioContentRawService.GetAudioContentRawAsync(audioId))
{
using (var nAudioStreamMediaFoundationReader = new StreamMediaFoundationReader(audioStream))
using (var wavStream = new MemoryStream())
{
//Step 1: Convert the audio to wav format
WaveFileWriter.WriteWavFileToStream(wavStream, nAudioStreamMediaFoundationReader);
var config = new LameConfig()
{
WriteVBRTag = true,
Preset = LAMEPreset.VBR_90
};
//Step 2: Convert the wav audio to 16Khz, 16 bit, mono channel, Pcm
using (var nAudioStreamMediaFoundationReader2 = new StreamMediaFoundationReader(wavStream))
using (var nAudioWaveFormatConversionStream = new WaveFormatConversionStream(new WaveFormat(16000, 16, 1), nAudioStreamMediaFoundationReader2))
using (var nAudioPcmWavStream = WaveFormatConversionStream.CreatePcmStream(nAudioWaveFormatConversionStream))
using (var mp3Streamvbr = new MemoryStream())
using (var mp3StreamWritervbr = new LameMP3FileWriter(mp3Streamvbr, new WaveFormat(16000, 16, 1), config))
using (var pcmWavStream = new MemoryStream())
{
await nAudioPcmWavStream.CopyToAsync(pcmWavStream);
pcmWavStream.CopyTo(mp3StreamWritervbr);
var filePathmp3vbr = Path.Combine("C:/Temp/", $"audio_vbr90_{audioId}.mp3");
using (var fileStreammp3vbr = new FileStream(filePathmp3vbr, FileMode.Create, FileAccess.Write, FileShare.None))
{
await fileStreammp3vbr.WriteAsync(mp3Streamvbr.ToArray());
}
return pcmWavStream;
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ength-usin