[英]Convert PCM to MP3/OGG
我需要將PCM或編碼音頻(ADPCM,uLaw,Opus)的連續流轉換成MP3 / OGG格式,以便可以將其流式傳輸到瀏覽器(使用html的音頻標簽)。 我的“ stream-mp3 / ogg-using-audio-tag”部分正在工作,現在我需要開發轉換層。
我有兩個問題:
注意:我了解MP3存在許可問題,因此我們願意使用OGG。
謝謝。
<無恥的插頭>
我為NAudio
編寫了一個插件,該插件使用LAME Encoder套件中的libmp3lame處理MP3編碼。 它在NuGet上為NAudio.Lame
,其源代碼在GitHub上 。
</ Shameless Plug>
遺憾的是,如果您打算將其用於個人以外的其他用途,則許可問題仍然存在。 LAME本身是根據LGPL許可的,但是根據LAME Wikipedia條目 , LAME實施的專利仍然需要Frauenhofer / Thompson的許可。 如果您打算為他人生產某種東西,這可能會變得昂貴 。
Vorbis壓縮機不受專利等限制,因此是一種合理的選擇。 在某個時候,我計划做一個類似於OGG / Vorbis格式的包裝器。 同時,快速的Google搜索會打開Ogg Vorbis Interop庫 ,這可能對您有用。
是的,幾乎所有轉換都需要PCM作為中間格式。 NAudio
為您提供了從多種音頻格式中獲取PCM的工具。
要回答第一個問題,要創建MP3或OGG,您需要一個編碼器。 NAudio不包含MP3或OGG編碼器。 它所要做的就是為您提供訪問計算機上已安裝的編碼器(例如ACM或Media Foundation Transforms)的方法。 但是,同時使用MP3和OGG,您會發現最簡單的方法是找到一個非托管DLL或命令行實用程序,然后從.NET訪問它們。 上面鏈接的我寫的文章簡要說明了如何將LAME.exe與stdin和stdout一起使用,以將PCM快速轉換為MP3。
至於第二個問題,答案是肯定的。 無論何時進行代碼轉換,都首先解碼為PCM,然后在目標編解碼器中重新編碼。 我認為從理論上講,您可以將以任何格式編碼的音頻放入OGG容器中,但實際上,OGG容器中的音頻通常使用Vorbis編碼。 FLAC和OPUS可能是選項,但是您又需要找到一個可以為您編寫OGG容器格式的應用程序或庫,因為我不知道有任何完全托管的OGG編寫器。
1) PCM到OGG
string fileName = @"e:\Down\male.wav";
Sox.Convert(@"sox.exe", fileName, fileName + ".ogg");
2) PCM到MP3
static void AnyToMp3(string fileName)
{
DsReader dr = new DsReader(fileName);
IntPtr formatPcm = dr.ReadFormat();
byte[] dataPcm = dr.ReadData();
dr.Close();
IntPtr formatMp3 = AudioCompressionManager.GetCompatibleFormat(formatPcm,
AudioCompressionManager.MpegLayer3FormatTag);
byte[] dataMp3 = AudioCompressionManager.Convert(formatPcm, formatMp3, dataPcm, false);
Mp3Writer mw = new Mp3Writer(File.Create(fileName + ".mp3"));
mw.WriteData(dataMp3);
mw.Close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.