9

オンライン/ライブでオーディオを処理したいのですが、オーディオ ファイルからオーディオ サンプルを常に読み取り、これらを処理し (エフェクトを適用するなど)、処理したサンプルをサウンドカードなどのオーディオ出力デバイスに転送します。入力ファイルには、wav、mp3、さらには ogg などの一般的な形式があります。

さまざまなオーディオ形式の読み取りを簡素化し、生のオーディオ サンプルの一定のストリームを提供する、オーディオ ファイル用の libav/ffmpeg に似たライブラリはありますか? または、フォーマットごとに個別のライブラリを使用するのが最善の解決策ですか? ライブラリは、c/c++ およびクロスプラットフォーム互換 (Mac、Win、Linux、ARM) である必要があります。

編集すべての回答に感謝します。私はすべてのライブラリを評価し、ほとんどのライブラリはバックエンドとして ffmpeg を必要とするため、libav/ffmpeg をそのまま使用するのが最善であるという結論に達しました。

4

6 に答える 6

3

クロスプラットフォームのオーディオ I/O には、RtAudioまたはPortAudioをお勧めします。オーディオのデコードについては、libsndfileまたはlibaudiodecoderを参照してください。

于 2012-10-16T13:56:36.817 に答える
3

ジュースをチェックしてください。これは、音楽ソフトウェア用の VST オーディオ プラグインの開発に使用されてきた大きなライブラリです。そこには必要のないものがたくさんありますが、ビルドに含めるオーディオ部分だけを選択して選択できると思います。AudioFormatReaderとそれに関連するクラスは、ファイルの読み取りを行うことができ、サウンド カードに出力するためのクラスもあります。他にもたくさんのオーディオ処理ツールがあります。GPL ライセンスのクロスプラットフォームであり、実験的な Android サポートを主張しています。まだプロジェクトに使用していませんが、インスピレーションを待っています!

于 2012-10-16T13:54:21.500 に答える
2

libSDLをチェックアウトします。これには、そのようなことを行うために構築されたオーディオサブシステムがあり、ogg、mp3、flac、wav などを処理します。

于 2012-10-16T14:02:36.543 に答える
1

LibVLCはこれを行うことができます。libvlcは、最もさまざまなオーディオ(およびビデオ)形式をサポートしています。これはC/C++クロスプラットフォームライブラリです。また、Armコード生成もサポートする必要があります。

于 2012-10-16T13:46:24.457 に答える
1

irrKlangライブラリを使用できます。私は自分のゲームにそれを使用しました。使用するのは非常にシンプルなライブラリです。たとえば、ファイル「somefile.mp3」を再生するには、書き込む必要があります

engine->play2D("somefile.mp3", true);

また、このライブラリはクロスプラットフォームでもあります。C++、C#、およびすべての .NET 言語で動作します。

このライブラリのその他の機能 (独自のサイトから)

低レベルのオーディオ ライブラリで知られているすべての機能に加えて、洗練されたストリーミング エンジン、拡張可能なオーディオ読み取り、シングルおよびマルチスレッド モード、ローエンド ハードウェア用の 3D オーディオ エミュレーション、プラグイン システム、複数のロールオフ モデルなどの多くの便利な機能を備えています。 . これらすべては、非常に単純な API を介してアクセスできます。

于 2012-10-19T09:02:25.913 に答える
0

GAudio Libraryはおそらくあなたが追求するものです。シンプル、パワフル、クロスプラットフォーム、拡張可能

GAudio の hello ワールドは次のようになります。

gaudio_init("addons");

const char* filename = "..\\media\\trek12.wav";

gsource* source = gaudio_source_create_from_file(filename,FALSE);
if(source == NULL)
{   
    printf("load file:%s error!\n",filename);
    printf("bad source.\nerror code:%d.\n",gaudio_error_get());
    gaudio_deinit();
    return -1;
}

printf("play filename:%s\n",filename);

gaudio_source_play(source,FALSE);

printf("\nplaying, press any key to quit.\n");
getch();

gaudio_source_stop(source);
gaudio_source_destroy(source);

gaudio_deinit();
于 2013-11-07T13:41:45.343 に答える