我目前使用NAudio來捕捉聲音,並且它只創建一個wav文件。我正在尋找一種在保存文件之前將其編碼爲mp3的方法。我發現LAME,但是當我嘗試添加lame_enc.dll文件時,它說「無法添加引用,請確保該文件可訪問,並且這是一個有效的程序集或COM組件」。任何幫助,將不勝感激。如何使用LAME將wav編碼爲mp3 c#
6
A
回答
1
只需將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;
}
}
1
文件lame_enc.dll
是一個非託管的DLL,這意味着你不能只添加一個引用它在你的.NET應用程序。你需要一個包裝來定義入口點以及它們如何被調用。對於lame_enc.dll
我使用Yeti
包裝,其可以附連到this CodeProject article.
代碼中找到我張貼關於如何響應用這個MP3編碼問題的一步步驟:change format from wav to mp3 in memory stream in NAudio。這應該讓你開始。
8
在.NET 4.0中最簡單的方法:
使用Visual Studio的NuGet包管理器控制檯:
Install-Package NAudio.Lame
代碼剪斷:發送語音到內存流,然後保存爲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);
}
}
+2
retMs在這個例子中沒有做什麼? –
相關問題
- 1. 如何在C/C++中使用lame將mp3解碼爲wav?
- 2. 使用PHP中的LAME將WAV轉換爲MP3
- 3. LAME編碼器Node.js MP3流
- 4. 如何使用lame在shell腳本中編碼wav文件?
- 5. 如何使用iPhone上的LAME將編碼進度條顯示爲.mp3?
- 6. 用LAME編碼的MP3的長度
- 7. 如何使用LAME編碼器unicode評論mp3
- 8. 算法編碼wav到mp3
- 9. 如何在Android設備上將WAV編碼爲MP3
- 10. 從wav轉換.mp3使用Lame庫在Android
- 11. 是否有編碼器/解碼器可用於Windows Phone將Wav轉換爲Mp3和Mp3爲Wav?
- 12. 我如何使用C++以編程方式將wav轉換爲MP3?
- 13. Mac應用程序使用LAME編碼mp3
- 14. 使用javascript將wav轉換爲mp3
- 15. android:將mp3轉換爲wav使用Jlayer
- 16. 如何使用NAudio/Lame將.wav轉換爲mp3時設置通道和採樣率?
- 17. Python將wav轉換爲mp3
- 18. 將WAV轉換爲MP3
- 19. iPhone - 將mp3轉換爲wav?
- 20. 我需要使用ffmpeg將.wav轉換爲.mp3所需的編解碼器?
- 21. 如何使用bash將lame子目錄中的所有目錄mp3文件轉換爲lame?
- 22. 如何爲Winxp安裝ffmpeg,ffmpeg-PHP,Mplayer,Mencoder,LAME MP3編碼器。 PHP版本5.3.0
- 23. 如何在Azure上將mp3解碼爲wav WebApp
- 24. 如何使用Naudio將WAV流轉換爲MP3?
- 25. 如何使用Java將.wav轉換爲.mp3?
- 26. 如何使用純java將wav轉換爲mp3?
- 27. Android:如何使用Java將MP4A音頻轉換爲MP3或Wav
- 28. 將pcm轉換爲mp3(使用LAME)會在mp3文件中產生「點擊」
- 29. 使用IAudioEncoder配置DirectShow應用程序中的LAME MP3編碼器
- 30. 將.wav文件轉換爲.mp3
http://www.codeproject.com/Articles/501521/How-to-convert-between-most-audio-formats-in-NET – MichaC