Преобразование Webm в wav в Mp3 приводит к неправильной (увеличенной) длине дорожки с помощью NAudio.LameC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Преобразование Webm в wav в Mp3 приводит к неправильной (увеличенной) длине дорожки с помощью NAudio.Lame

Сообщение Anonymous »

Я использую приведенный ниже код для преобразования аудиоконтента WebM (аудио, записанного веб-браузером с помощью MediaRecorder) в Wave, а затем в mp3, используя NAudio.Wave и NAudio.Lame.
Проблема связана с длиной дорожки 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;
}
}
}
}
Я попробовал различные пресеты LAMEPresets, чтобы посмотреть, что работает, в целом пресеты abr дают длину трека ближе к исходной (еще на несколько секунд больше). С пресетами VBR разница больше. Также, если битрейт указан вместо предустановленного, например. 128 — это гораздо ближе к оригинальной длине трека. Также попробовал установить WriteVBRTag, как показано в приведенном выше коде, но безуспешно!
Будет очень полезно знать, как сохранить длину дорожки mp3 как можно ближе к исходной длине дорожки WebM.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ength-usin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Преобразование Webm в wav в Mp3 приводит к неправильной (увеличенной) длине дорожки с помощью NAudio.Lame
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Есть ли эффективный способ назначить звуки (tick.wav, end_break.wav, end_task.wav)?
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Есть ли эффективный способ назначить звуки (tick.wav, end_break.wav, end_task.wav)?
    Anonymous » » в форуме Python
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Есть ли эффективный способ назначить звуки (tick.wav, end_break.wav, end_task.wav)?
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Каков эквивалент Python Lame Mp3 Converter?
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»