В настоящее время я использую NAudio для захвата звука, и он создает только wav-файл. Я ищу способ кодировать его в mp3 перед сохранением файла. Я нашел LAME, но когда я пытаюсь добавить файл lame_enc.dll, он говорит: «Ссылка не может быть добавлена. Убедитесь, что файл доступен, и это действительная сборка или COM-компонент». Любая помощь будет оценена по достоинству.Как я могу использовать LAME для кодирования wav в mp3 C#
ответ
Просто поместите lame_enc.dll в папку bin и не пытайтесь добавить его в ссылку. После этого попробуйте этот код. Здесь вы также можете установить скорость передачи данных, как 64,128, .....
public byte[] ConvertWavToMP3(byte[] bt, uint bitrate)
{
MemoryStream ms = new MemoryStream(bt);
ms.Seek(0, SeekOrigin.Begin);
var ws = new WaveFileReader(ms);
byte[] wavdata = null;
using (MemoryStream wavstrm = new MemoryStream())
using (WaveFileWriter wavwri = new WaveFileWriter(wavstrm, ws.WaveFormat))
{
ws.CopyTo(wavwri);
wavdata = wavstrm.ToArray();
}
WaveLib.WaveFormat fmt = new WaveLib.WaveFormat(ws.WaveFormat.SampleRate, ws.WaveFormat.BitsPerSample, ws.WaveFormat.Channels);
Yeti.Lame.BE_CONFIG beconf = new Yeti.Lame.BE_CONFIG(fmt, bitrate);
byte[] srm = null;
using (MemoryStream mp3strm = new MemoryStream())
using (Mp3Writer mp3wri = new Mp3Writer(mp3strm, fmt, beconf))
{
mp3wri.Write(wavdata, 0, wavdata.Length);
byte[] mp3data = mp3strm.ToArray();
return mp3data;
}
}
Файл lame_enc.dll
является неуправляемым DLL, а это означает, что вы не можете просто добавить ссылку на него в приложении .NET. Вам нужна оболочка, чтобы определить, что такое точки входа и как они вызываются. Для lame_enc.dll
я использую Yeti
обертку, которую можно найти в коде, прикрепленной к this CodeProject article.
Я отправил шаг за шагом о том, как использовать это для кодирования MP3 в ответ на вопрос: change format from wav to mp3 in memory stream in NAudio. Это должно заставить вас начать.
Самый простой способ в .NET 4.0:
Используйте Visual Studio NuGet Пакет менеджер консоли:
Install-Package NAudio.Lame
код Snip: Отправить речь в поток памяти, а затем сохранить как mp3:
//reference System.Speech
using System.Speech.Synthesis;
using System.Speech.AudioFormat;
//reference Nuget Package NAudio.Lame
using NAudio.Wave;
using NAudio.Lame;
using (SpeechSynthesizer reader = new SpeechSynthesizer()) {
//set some settings
reader.Volume = 100;
reader.Rate = 0; //medium
//save to memory stream
MemoryStream ms = new MemoryStream();
reader.SetOutputToWaveStream(ms);
//do speaking
reader.Speak("This is a test mp3");
//now convert to mp3 using LameEncoder or shell out to audiograbber
ConvertWavStreamToMp3File(ref ms, "mytest.mp3");
}
public static void ConvertWavStreamToMp3File(ref MemoryStream ms, string savetofilename) {
//rewind to beginning of stream
ms.Seek(0, SeekOrigin.Begin);
using (var retMs = new MemoryStream())
using (var rdr = new WaveFileReader(ms))
using (var wtr = new LameMP3FileWriter(savetofilename, rdr.WaveFormat, LAMEPreset.VBR_90)) {
rdr.CopyTo(wtr);
}
}
В этом примере ничего не сделано в retMs? –
http://www.codeproject.com/Articles/501521/How-to-convert-between-most-audio-formats-in-NET – MichaC