2013-10-03 105 views
6

現在、NAudioを使用してサウンドをキャプチャしており、wavファイルのみを作成しています。私はファイルを保存する前にmp3にエンコードする方法を探しています。私はLAMEを見つけましたが、lame_enc.dllファイルを追加しようとすると、「参照を追加できませんでした。ファイルがアクセス可能であり、有効なアセンブリまたはCOMコンポーネントであることを確認してください。どんな助けもありがとう。LAMEを使用してwavをmp3にエンコードする方法#

+1

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

答えて

1

lame_enc.dllをbinフォルダに置き、参照に追加しないでください。その後、このコードを試してください。ここでは、また、64128のようなビットレートを設定することができ、.....

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は、あなたがちょうどあなたの.NETアプリケーションで、それへの参照を追加することができないことを意味し、アンマネージドDLLです。エントリポイントとは何かを定義するラッパーが必要です。 change format from wav to mp3 in memory stream in NAudiolame_enc.dllのために私は私がステップバイステップ応答でMP3のエンコード用の質問をこれを使用する方法についての投稿をthis CodeProject article.

に添付コードで見つけることができYetiラッパーを使用します。それはあなたを始めるはずです。

8

.NET 4.0で簡単な方法:

使用のVisual Studio Nugetパッケージマネージャコンソール:

Install-Package NAudio.Lame 

コードスニップ:

//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として保存し、メモリストリームにスピーチを送ります
+2

retMsはこの例では何もしませんか? –

関連する問題