C/C++ にて オーディオファイルを再生する
の続きです。
前回は、OpenAL を使う方法に紹介した。
今回は、irrKlang を使う方法に紹介する。
セットアップに手間がかかったので記録しておく。
irrKlang
オーディオファイルを再生するライブラリです。
https://www.ambiera.com/irrklang/
クロスプラットフォーム(Windows、MacOS、Linux )です。
wav、ogg、mp3、flac、mod、xm、s3m などのファイル形式に対応している。
ライセンス
非商用製品では無料でirrKlang を使用できる。
商用製品では、irrKlang proライセンスを購入する必要がある。
irrKlang のセットアップ
irrKlang はプラットフォーム毎にビルドされたライブラリで配布されている。
パッケージ管理ツールでインストールできない。
かなり手間がかかる。
(1)下記からダウンロードする
https://www.ambiera.com/irrklang/downloads.html
(2) 解凍する
下記のようなディレクトリとファイルの構成に展開される。
bin ディレクトリにプラットフォーム毎にビルドされたライブラリがある。
doc
examples
examples.net
include
lib
media
plugins
readme.txt
changes.txt
bin
dotnet-4-64
linux-gcc-64
winx64-visualStudio
libirrklang.dylib
ikpMP3.dylib
ikpFLAC.dylib
(3) 必要なファイルをシステム領域にコピーする。
(3-1) システム領域にディレクトリを作成する
mkdir /usr/local/opt/irrklang
mkdir /usr/local/opt/irrklang/include
mkdir /usr/local/opt/irrklang/lib
(3-2)ヘッダーファイルとライブラリイファイルをコピーする
cp include/* /usr/local/opt/irrklang/includ/
cp bin/macosx-gcc/*.dylib /usr/local/opt/irrklang/lib
下記のように g++ のコマンドオプションを指定してビルドする。
g++ sample.cpp -I/usr/local/opt/irrklang/include -L/usr/local/opt/irrklang/lib -lirrklang
(5) 実行環境を整備する
以降は主に MAC の場合
(5-1) シンボリックリンクを作成する。
実行すると、下記のエラーになる。
dyld: Library not loaded: /usr/local/lib/libirrklang.dylib
シンボリックリンクを作成する。
ln -s /usr/local/opt/irrklang/lib/libirrklang.dylib /usr/local/lib/libirrklang.dylib
(5-2) ライブラリの使用を許可する
実行すると、下記のワーニングが表示される。
/usr/local/lib/libirrklang.dylib: code signature in (/usr/local/lib/libirrklang.dylib) not valid for use in process using Library Validation: library load disallowed by system policy
参考 apple developer
Notarizing macOS Software Before Distribution
対応策
署名のないライブラリは、
手動で使用を許可する
参考
macOS 10.15 Catalinaにおける「開発元を検証できないため開けません」
(4)pkg-config を使えるようにする
(4-1) 設定ファイルをコピーする
mkdir /usr/local/opt/irrklang/pkgconfig
cp pkgconfig/irrklang.pc /usr/local/opt/irrklang/pkgconfig
(4-2) PKG_CONFIG_PATH を設定する
export PKG_CONFIG_PATH=/usr/local/opt/irrklang/pkgconfig
(4-2) 動作確認する
pkg-config --cflags --libs irrklang
-I/usr/local/opt/irrklang/include -L/usr/local/opt/irrklang/lib -lirrklang
以上で、下記のようにビルドできる。
g++ sample.cpp
pkg-config --cflags --libs irrklang
参考
pkg-configを使ってg++でコンパイルできるようになるまで
irrKlang の使用方法
zip ファイルの examples に下記のサンプルがある。
01.HelloWorld
04.OverrideFileAccess
02.3DSound
03.MemoryPlayback
04.OverrideFileAccess
05.Effects
06.Recording
01.HelloWorld を 参考にMAC で動くように修正したコードはこちらに。
https://github.com/ohwada/MAC_cpp_Samples/blob/master/irrKlang/play_file.cpp
mp3 を再生する
libirrklang.dylib は、
wav、ogg、mod、xm、s3m などの形式に対応している。
mp3 のときは、実行ファイルと同じディレクトリに ikpMP3.dylib を配置する。
実行すると、ワーニングが表示されるので、
手動で使用を許可する。