2013-10-03 9 views
6

पर एक WAV एन्कोड करने के लिए LAME का उपयोग कैसे कर सकता हूं, मैं वर्तमान में ध्वनि को कैप्चर करने के लिए NAudio का उपयोग कर रहा हूं और यह केवल एक WAV फ़ाइल बनाता है। मैं फ़ाइल को सहेजने से पहले इसे एमपी 3 में एन्कोड करने का एक तरीका ढूंढ रहा हूं। मुझे LAME मिला लेकिन जब भी मैं lame_enc.dll फ़ाइल को जोड़ने का प्रयास करता हूं तो यह कहता है "एक संदर्भ जोड़ा नहीं जा सका। कृपया सुनिश्चित करें कि फ़ाइल पहुंच योग्य है, और यह एक वैध असेंबली या COM घटक है"। किसी भी सहायता की सराहना की जाएगी।मैं एमपी 3 सी #

+1

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

उत्तर

1

बस बिन फ़ोल्डर में lame_enc.dll रखें और इसे संदर्भ में जोड़ने का प्रयास न करें। उसके बाद इस कोड को आजमाएं। बिट दर यहाँ आप भी सेट कर सकते हैं 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; 
     } 
     } 
1

फ़ाइल lame_enc.dll एक अप्रबंधित DLL है, जिसका अर्थ है कि आप बस अपने .NET अनुप्रयोग में इसे करने के लिए एक संदर्भ नहीं जोड़ सकते। प्रवेश बिंदु क्या हैं और उन्हें कैसे बुलाया जाता है, यह परिभाषित करने के लिए आपको एक रैपर की आवश्यकता है। change format from wav to mp3 in memory stream in NAudio: lame_enc.dll के लिए मैं Yeti आवरण, this CodeProject article.

से जुड़ी कोड में पाया जा सकता है मैं एक कदम-दर-कदम कैसे सवाल के जवाब में एमपी 3 कूटबन्धन के लिए इस का उपयोग करने पर पोस्ट का उपयोग करें। आपको इस तरह से प्रारंभ करवाया जाना चाहिए।

8

नेट 4.0 में सबसे आसान तरीका:

उपयोग दृश्य स्टूडियो Nuget पैकेज प्रबंधक कंसोल:

Install-Package NAudio.Lame 

कोड कटाव: एक स्मृति धारा के भाषण भेजें, तो एमपी 3 के रूप में सहेजने:

//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); 
    } 
} 
+2

रेटएम इस उदाहरण में कुछ भी नहीं करता है? –

संबंधित मुद्दे