1

http://www.codeproject.com/Articles/5901/C-MP3-Compressorの記事には、LAME の 32 ビット mp3 オーディオ エンコーダーをラップする C# 32 ビット実装があります。そのソース コードをダウンロードして 64 ビットに変換し、最新の LAME リリース [ http://www.rarewares.org/mp3-lame-bundle.phpの LAME 3.99.5 64bit など]で使用してみました。 、しかし、エラーが発生し続けます

算術演算でオーバーフローが発生しました。

そのコードを機能させるために何をする必要があるか、または 64 ビットで既に機能している代替のオープン ソース C# ソリューションについてのアイデアはありますか?

4

1 に答える 1

0

私はこの同じエラーに遭遇し、これで修正されました。Lame.cs ファイルの EncodeChunk メソッドを次のように変更します。

public static uint EncodeChunk(uint hbeStream, byte[] buffer, int index, uint nBytes, byte[] pOutput, ref uint pdwOutput) {
    uint res;
    GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
    try {
        IntPtr ptr = (IntPtr)(handle.AddrOfPinnedObject() + index);
        res = beEncodeChunk(hbeStream, nBytes / 2/*Samples*/, ptr, pOutput, ref pdwOutput);
    } finally {
        handle.Free();
    }
    return res;
}

Int32 にキャストされていましたが、アドレス空間が大きすぎます。

于 2014-01-16T22:25:30.850 に答える