1

私はこれに一日中費やしました、そしてそれは私を狂わせます

誰かがmp3を単純な16ビットpcm(wave)ファイルにデコードする簡単な方法を知っていますか?商用プログラムと一緒に出荷できるものが必要なので、.libを好みます

libmpg123.dllを見つけましたが、msvc 2010でプログラムをdllとリンクさせる方法がわかりません。参照を追加する必要があることはわかっていますが、[新しい参照を追加]をクリックすると、空のダイアログが表示されます。プロジェクト名とプロジェクトディレクトリの見出しがあり、クリックするものはありません。libツールを使用して.dllを.libに変換しようとしましたが、.defファイル形式が悪いと文句を言い続けます。

madplayerをビルドしようとしましたが、id3tag.hを細かく調整できず、libmadの使用に関するドキュメントや例が見つかりません。

ラメが大きすぎる

.libのクイックソリューションのアイデアは、リンクして実行できます

ありがとう、スティーブ

4

2 に答える 2

5

mpg123は問題ありません。スタティック ライブラリ (.lib) の取得に問題があることがわかります。

lib を取得するには 2 つの方法があります。

  1. ソースコードをビルドします。はるかに柔軟ですが、少しトリッキーです。ソースをダウンロードすると、次のパスで VS2010 へのポートを見つけることができます:ports\MSVC++\2010。しかし、この場合、YASMをインストールしてビルド構成をいじるという問題に直面します (構成がソース コード パッケージで適切に調整されていないようです)。
  2. .def ファイルを変換して lib ツールを使用します。バイナリ パッケージには既に .h ファイルと .def ファイルが含まれているため、ソースは必要ありません。詳しく説明します:

    1. バイナリ ( win32またはwin64 ) をダウンロードし、フォルダに抽出しD:\mpg123ます。
    2. [スタート] -> [Microsoft Visual Studio 2010] -> [Visual Studio ツール] -> [Visual Studio コマンド プロンプト (2010)] から実行します。
    3. フォルダーcd D:\mpg123に移動しD:、次の行を実行します: lib /def:libmpg123-0.dll.def(または、def ファイルが呼び出されます)。
    4. これで、目的の .lib ファイルlibmpg123-0.dll.libがフォルダーに作成されました。

ただし、「フレームワークと参照」プロパティ ページは、.NET Framework アセンブリ、COM コンポーネント、または外部プロジェクト ( MSDN ) への参照を設定するために使用されることに注意してください。この場合、プロジェクトで追加のリンカー依存関係を指定する必要があります [構成プロパティ =>リンカー => 入力 => 追加の依存関係]。

于 2013-03-05T14:39:37.473 に答える
1

オレクサンダーからの答えはうまくいきます、どうもありがとう

mpg123-1.15.1-x86.zip をダウンロードするときに、1 つ追加する小さなことがあります。

上記のように、libmpg123-0.dll (dll) と libmpg123-0.dll.def (.lib を作成するために使用されるもの) が表示されます。名前を libmpg123-0.def に変更することをお勧めします。そうしないと、libmpg123-0.dll.dll という名前の dll が検索されますが、これは適切ではありません。

それに加えて、それはうまく機能します。この情報が何年も前にインターネット上になかったなんて信じられない。Olexanderに感謝し、stackoverflowに感謝します

参考までに、これは mpg123 を使用した単純な mp3 デコーダーです。

#include "mpg123/mpg123.h"

#define INBUFF  16384
#define OUTBUFF 32768


void loadMp3File(const char* filename)
{
    mpg123_handle *mh;
    unsigned char *buffer;
    size_t buffer_size;
    size_t done;
    int err;

    int channels, encoding;
    long rate;

    mpg123_init();
    mh = mpg123_new(NULL, &err);
    buffer_size = mpg123_outblock(mh);
    buffer = (unsigned char*) malloc(buffer_size * sizeof(unsigned char));

    /* open the file and get the decoding format */
    mpg123_open(mh, filename);
    mpg123_getformat(mh, &rate, &channels, &encoding);

    /* set the output format and open the output device */
    int m_bits = mpg123_encsize(encoding);
    int m_rate = rate;
    int m_channels = channels;


    /* decode and play */
    for (int totalBtyes = 0 ; mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK ; ) {
        totalBtyes += done;
    }


    /* clean up */
    free(buffer);
    mpg123_close(mh);
    mpg123_delete(mh);
    mpg123_exit();

}
于 2013-03-06T01:45:28.663 に答える