2024/01/27(土) [n年前の日記]
#5 [basic] FreeBASIC + PortAudioを試用してみたかった
FreeBASICから PortAudio なるサウンドライブラリを利用することができるという話も見かけたのでそのあたりを試してみた。環境は Windows10 x64 22H2 + FreBASIC 1.10.1 32bit。
結論を先に書くけど、PortAudio についての知識を持ってる人じゃないと使えない気配がした。
結論を先に書くけど、PortAudio についての知識を持ってる人じゃないと使えない気配がした。
◎ PortAudioをMinGWでビルド :
PortAudio を使うためには、ライブラリファイル *.a や、ランタイム(?) *.dll が必要になるのだろう。MinGW(gcc 6.3.0) を使ってビルドできないか試した。
_PortAudio - an Open-Source Cross-Platform Audio API
_Notes_about_building_PortAudio_with_MinGW ・ PortAudio/portaudio Wiki
_PortAudio: Building Portaudio for Windows with MinGW
FreeBASICに同梱されている portaudio.bi を眺めたところ、v19_20140130 を対象にしていた。同じバージョンを入手してビルドしたほうが良さそうだな…。
PortAudio のサイトから、pa_stable_v19_20140130.tgz を入手して解凍。
MinGW/MSYS が使える状態にして、portaudio/ の中に入って、bash を起動。configure を利用する関係で、bash上でしか作業できない。
以下を打ったところ、色々なファイルが生成された。
include/ にヘッダファイル、*.h がある。これはビルドする前から元々入っている。
lib/ 以下に、色々なファイルが生成された。更に、lib/.libs/ に以下のファイルが入っている。
_PortAudio - an Open-Source Cross-Platform Audio API
_Notes_about_building_PortAudio_with_MinGW ・ PortAudio/portaudio Wiki
_PortAudio: Building Portaudio for Windows with MinGW
FreeBASICに同梱されている portaudio.bi を眺めたところ、v19_20140130 を対象にしていた。同じバージョンを入手してビルドしたほうが良さそうだな…。
PortAudio のサイトから、pa_stable_v19_20140130.tgz を入手して解凍。
MinGW/MSYS が使える状態にして、portaudio/ の中に入って、bash を起動。configure を利用する関係で、bash上でしか作業できない。
以下を打ったところ、色々なファイルが生成された。
./configure make
include/ にヘッダファイル、*.h がある。これはビルドする前から元々入っている。
lib/ 以下に、色々なファイルが生成された。更に、lib/.libs/ に以下のファイルが入っている。
libportaudio.dll.a libportaudio.la libportaudio-2.dll
- *.a や *.la が、コンパイル時に必要になるライブラリファイル。
- *.dll が、実行時に必要になるDLLファイル。
◎ FreeBASICで使用 :
FreeBASIC 1.10.1 32bitで使えそうか試してみる。libportaudio.dll.a, libportaudio.la を、freeBASICインストールフォルダ/lib/win??/ にコピー。
加えて、libportaudio-2.dll をプロジェクトフォルダにコピーするのだけど、これだけでは動かなかった。libmingwex-0.dll とやらも必要になった。MinGWインストールフォルダ/bin/ から探して持ってくる。
ただ、サンプルファイルが皆無なので、使い方が全く分からない…。
加えて、libportaudio-2.dll をプロジェクトフォルダにコピーするのだけど、これだけでは動かなかった。libmingwex-0.dll とやらも必要になった。MinGWインストールフォルダ/bin/ から探して持ってくる。
ただ、サンプルファイルが皆無なので、使い方が全く分からない…。
◎ 別版バイナリを試用 :
FreeBASICの掲示板で、ビルド済みの別版 PortAudio バイナリを配布している事例を見かけた。
以下の投稿ページで、FreeBASIC用にビルドした PortAudio のバイナリが配布されている。FreeBASICの配布パッケージに入ってるものとは異なる、別の版らしい。
_libportaudio-2 dynamic windows linux 32/64-bit - freebasic.net
portaudio.zip を入手して解凍すると、以下のファイルが入っていた。
見た感じ、以下のようなファイルなのだろう。
Wndows 32bit用の libportaudio-2.dll をサンプルファイルと同じ場所にコピーして、fbc streamcallback.bas でコンパイル。streamcallback.exe を実行したらサイン波が鳴ってくれた。
fbc enumerate.bas で enumerate.exe を生成して実行したところ、利用できるデバイスの一覧が表示された。
これってつまり、PortAudio を使って音を鳴らしたい時は、どれかしらのデバイスを明示的に指定しないと鳴らせないということになるのだろうか…? なんだか面倒臭いな…。
以下の投稿ページで、FreeBASIC用にビルドした PortAudio のバイナリが配布されている。FreeBASICの配布パッケージに入ってるものとは異なる、別の版らしい。
_libportaudio-2 dynamic windows linux 32/64-bit - freebasic.net
portaudio.zip を入手して解凍すると、以下のファイルが入っていた。
. |-- lib | |-- lin32 (Linux 32bit) | | `-- libportaudio-2.so | |-- lin64 (Linux 64bit) | | `-- libportaudio-2.so | |-- win32 (Windows 32bit) | | `-- libportaudio-2.dll | `-- win64 (Windows 64bit) | `-- libportaudio-2.dll |-- enumerate.bas (sample) |-- pa_dynamic.bi (FreeBASIC Header file) `-- streamcallback.bas (sample) 5 directories, 7 files
見た感じ、以下のようなファイルなのだろう。
- Windows 32bit, 64bit用の libportaudio-2.dll
- Linux 32bit, 64bit用の libportaudio-2.so
- FreeBASIC用のヘッダーファイル pa_dynamic.bi
- サンプルファイル enumerate.bas, streamcallback.bas
Wndows 32bit用の libportaudio-2.dll をサンプルファイルと同じ場所にコピーして、fbc streamcallback.bas でコンパイル。streamcallback.exe を実行したらサイン波が鳴ってくれた。
fbc enumerate.bas で enumerate.exe を生成して実行したところ、利用できるデバイスの一覧が表示された。
PortAudio V19-devel (built May 13 2016 04:39:45) (0) input Microsoft Sound Mapper - Input (1) input マイク (Realtek(R) Audio) (2) input ステレオ ミキサー (Realtek(R) A (3) output Microsoft Sound Mapper - Output (4) output スピーカー (Realtek(R) Audio) (5) output Realtek Digital Output (Realtek
これってつまり、PortAudio を使って音を鳴らしたい時は、どれかしらのデバイスを明示的に指定しないと鳴らせないということになるのだろうか…? なんだか面倒臭いな…。
◎ 更に別の版を試用 :
上記の版とはまた別の版も見かけた。以下のやり取りの下のほうで、fbPortAudio.zip というファイルが配布されている。
_C/C++ Libraries - freebasic.net
fbPortAudio.zip を入手して解凍したら、*.a, *.dll, *.bi が入っていた。
以下のサンプルファイルをコンパイルしたら、情報を表示したり、サイン波が鳴った。
_C/C++ Libraries - freebasic.net
fbPortAudio.zip を入手して解凍したら、*.a, *.dll, *.bi が入っていた。
以下のサンプルファイルをコンパイルしたら、情報を表示したり、サイン波が鳴った。
patest_devs.bas patest_sine.bas patest_version.bas
◎ 状況が混乱している気がする :
FreeBASIC + PortAudio は、状況的によく分からないことになっている気がする…。
公式の portaudio.bi とは別の版が複数あるようで、一応それらは、付属している .dll を一緒に利用する限り、それらしく動作する。
しかし、公式の portaudio.bi は、使い方が分からない。他の版のサンプルを流用してコンパイルしようとすると、各関数に与える変数のタイプが異なっているようで、エラーが出てコンパイルできない。
加えて、サンプルソースを見ても、実際に音を出すまでに細々とした各種設定をしないといけないようで、何をしているのかさっぱり分からない。
とにかく、公式版に同梱されている portaudio.bi を利用したサンプルが一切存在していない点が非常に困る…。自分でビルドした *.a や *.dll が、ちゃんとビルドできているのか、簡単な動作確認すらできない…。
この、PortAudio、自分の知識レベルではちょっと手に負えないライブラリのようだなと…。
公式の portaudio.bi とは別の版が複数あるようで、一応それらは、付属している .dll を一緒に利用する限り、それらしく動作する。
しかし、公式の portaudio.bi は、使い方が分からない。他の版のサンプルを流用してコンパイルしようとすると、各関数に与える変数のタイプが異なっているようで、エラーが出てコンパイルできない。
加えて、サンプルソースを見ても、実際に音を出すまでに細々とした各種設定をしないといけないようで、何をしているのかさっぱり分からない。
とにかく、公式版に同梱されている portaudio.bi を利用したサンプルが一切存在していない点が非常に困る…。自分でビルドした *.a や *.dll が、ちゃんとビルドできているのか、簡単な動作確認すらできない…。
この、PortAudio、自分の知識レベルではちょっと手に負えないライブラリのようだなと…。
[ ツッコむ ]
以上です。