2013-10-03 19 views
6

Şu anda sesi yakalamak için NAudio kullanıyorum ve sadece bir wav dosyası oluşturuyorum. Dosyayı kaydetmeden önce bir mp3'e şifrelemek için bir yol arıyorum. LAME buldum ama lame_enc.dll dosyasını eklemeye çalıştığımda "Referans eklenemedi. Lütfen dosyanın erişilebilir olduğundan emin olun ve geçerli bir derleme veya COM bileşeni". Herhangi bir yardım takdir edilecektir.Bir wav'ı bir mp3 c'ye kodlamak için LAME'yi nasıl kullanabilirim? #

+1

http://www.codeproject.com/Articles/501521/How-to-convert-between-most-audio-formats-in-NET – MichaC

cevap

1

Sadece lame_enc.dll dosyasını bin klasörüne yerleştirin ve başvuruyu eklemeyi denemeyin. Bundan sonra bu kodu deneyin. 64,128 gibi ..... Burada da ayarlayabilirsiniz bit hızı

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; 
     } 
     } 
1

lame_enc.dll Eğer sadece .NET uygulamasında bir referansı ekleyemezsiniz yani yönetilmeyen bir DLL dosyası. Giriş noktalarının ne olduğunu ve nasıl çağrıldığını tanımlamak için bir sarıcıya ihtiyacınız var. change format from wav to mp3 in memory stream in NAudio: lame_enc.dll için ben bir adım-adım yanıtta MP3 kodlama için soruyu bu nasıl kullanılacağı yayınlanan this CodeProject article.

bağlı kod bulunabilir Yeti sarmalayıcı kullanın. Bu seni başlatmalı.

8

Net 4.0 kolay yolu:

Kullanım visual studio Nuget Paket yöneticisi konsolu:

Install-Package NAudio.Lame 

Kod Snip:

//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); 
    } 
} 
: mp3 olarak kaydetmek sonra, bir bellek akışı konuşma gönder
+2

retMs bu örnekte hiçbir şey yapmaz mı? –

İlgili konular