私はPythonctypesを使用してlame_enc.dllとインターフェイスし、wavをmp3にエンコードしようとしています。この問題は、2008年にhttp://www.dreamincode.net/forums/topic/72083-lame-mp3-encoder-for-python/で解決なしで議論されました。
22050 Hz、モノラルでwavに録音されたいくつかの単語を聞くことができるmp3出力があるので、私はかなり近いと思います。ただし、出力で通常のクリック音も聞こえるので、まだ問題があります。
私のコードは次の場所にあります:http://pastebin.com/SFwCuZZU
私が使用している:
http://lame1.buanzo.com.ar/のlibmp3lame-win-3.98.2.zipWindowsバイナリ dllフォルダー内に、データ構造defsを含むBladeMP3EncDLL.hファイルと、私が試みているexample.cppがあります。 python/ctypesに直接変換します。これらをそれぞれhttp://pastebin.com/E41nzq7mとhttp://pastebin.com/ySGfwhPDにコピーしました。
http://openinnowhere.sourceforge.net/lameonj/LameDLLInterface.htmからのlameエンコーダーdllに関する詳細なガイダンス
考えられる問題の1つは、ctypesによって報告されるbeConfigデータ構造のサイズが332バイトであり、ヘッダーファイルに記載されている予想される331バイトではなく、手動チェックで予想されることです。それからまた、それはただの設定設定かもしれません。
更新:http://pastebin.com/cdUniF1eを参照してください。 ほぼそこにあります... beEncodeChunkの2番目のパラメーターは、バイト数ではなく、サンプル数です。Mp3は、最初のワンクリックを除いて、今は良い音に聞こえます:-(。
成功!それはまだあまりきれいではありませんが、動作します。wavの44バイトヘッダーの仮定は常に正しいとは限りません。そのため、クリックしました。これは、wavヘッダーから最初のmp3チャンクにデータをエンコードしていました。代わりにPythonウェーブモジュールを使用してフレームを読み取りました(チャネル数とフレームレートを簡単に取得できるという追加の利点があります)。http://pastebin.com/ehDajzhNを参照してください。