簡體   English   中英

將PCM轉換為MP3 / OGG

[英]Convert PCM to MP3/OGG

我需要將PCM或編碼音頻(ADPCM,uLaw,Opus)的連續流轉換成MP3 / OGG格式,以便可以將其流式傳輸到瀏覽器(使用html的音頻標簽)。 我的“ stream-mp​​3 / ogg-using-audio-tag”部分正在工作,現在我需要開發轉換層。

我有兩個問題:

  1. 如何使用NAudio和/或其他C#庫/框架將PCM轉換為MP3 / OGG? 我假設NAudio演示應用程序中有一個或兩個代碼段可能正在執行此操作,但是我一直找不到。
  2. 在將其轉換為MP3 / OGG之前,我是否必須將編碼數據(ADPCM,uLaw,OPUS)轉換為PCM(或者可以),或者MP3 / OGG“容器”可以接受編碼數據?

注意:我了解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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM