Проблема связана с длиной дорожки mp3, она превышает длину исходного записанного звука на несколько секунд (с LAMEPreset.ABR_64) до нескольких минут (с LAMEPreset.VBR_90) для 15 минут оригинала. audio.
В проигрывателе Windows Media mp3-файл воспроизводится нормально до фактической длины звука, а затем внезапно пытается закончиться.
Код: Выделить всё
using NAudio.Wave;
using NAudio.Lame;
public async Task GetAudioStreamById(int audioId)
{
//audiStream is the already saved webm audio stream
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;
}
}
}
}
Будет очень полезно знать, как сохранить длину дорожки mp3 как можно ближе к исходной длине дорожки WebM.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ength-usin