2024/01/27(土) [n年前の日記]
#1 [basic] FreeBASICでwavやoggを鳴らせるFBSoundライブラリを試用
FreeBASICで、wav、mp3、ogg等を鳴らせる FBSound というライブラリがあると知った。
_jayrm/fbsound: A free sound library primarily for games and demos written by D.J. Peters.
_fbsound 1.2 Windows/Linux (sid wav mp3 ogg mod it xm s3m) - freebasic.net
_fbsound 1.1 (dynamic) Windows/Linux 32 and 64-bit (wav mp3 ogg mod it xm s3m) - freebasic.net
_fbsound 1.0 Win/Lin 32/64-bit (wav mp3 ogg mod it xm s3m) - freebasic.net
_Load Sound in Memory (FBSound 1.2) - freebasic.net
以前はライセンスが不明で敬遠されてた気配があるけど、今現在はドキュメント上で、ライセンスについてちゃんと書いてあるように見える。
Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit で試用してみることにした。複数のwavを同時に鳴らせたらいいのだけど、さて。
_jayrm/fbsound: A free sound library primarily for games and demos written by D.J. Peters.
_fbsound 1.2 Windows/Linux (sid wav mp3 ogg mod it xm s3m) - freebasic.net
_fbsound 1.1 (dynamic) Windows/Linux 32 and 64-bit (wav mp3 ogg mod it xm s3m) - freebasic.net
_fbsound 1.0 Win/Lin 32/64-bit (wav mp3 ogg mod it xm s3m) - freebasic.net
_Load Sound in Memory (FBSound 1.2) - freebasic.net
以前はライセンスが不明で敬遠されてた気配があるけど、今現在はドキュメント上で、ライセンスについてちゃんと書いてあるように見える。
Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit で試用してみることにした。複数のwavを同時に鳴らせたらいいのだけど、さて。
◎ インストール :
fbsound-1.2.zip を入手して解凍。
inc/ の中身は以下。
test/*.dll は以下。
この .bi と .dll を、利用したいプロジェクトフォルダにコピーして、ソースの最初のほうに以下を書いておけば、FBSound が使えるようになる。
あるいは、.bi ファイルを、FreeBASICインストールフォルダ/inc/ にコピーしておいてもいい。ただ、生成した .exe と同じ場所に .dll群も置いておかないと動作しない。
- inc/ にヘッダーファイル .bi が入っている。
- test/ に動作に必要な .dll ファイル群が入っている。
inc/ の中身は以下。
fbs3d.bi fbsound_dynamic.bi fbsound_oop.bi
test/*.dll は以下。
fbsound-32.dll fbsound-64.dll fbsound-ds-32.dll fbsound-ds-64.dll fbsound-mm-32.dll fbsound-mm-64.dll
この .bi と .dll を、利用したいプロジェクトフォルダにコピーして、ソースの最初のほうに以下を書いておけば、FBSound が使えるようになる。
#include "fbsound_dynamic.bi"
あるいは、.bi ファイルを、FreeBASICインストールフォルダ/inc/ にコピーしておいてもいい。ただ、生成した .exe と同じ場所に .dll群も置いておかないと動作しない。
◎ 動作確認 :
test/ 以下にサンプルファイル群が入っているので、各 .bas について、fbc xxxx.bas と打ってコンパイルすれば動作確認できる。
ogg (or wav) を鳴らすサンプルを書いてみた。
_waveplay.bas
fbc waveplay.bas と打ってコンパイル。waveplay.exe が生成される。
_1.ogg 、 _2.ogg 、 _3.ogg を同じフォルダに入れてから実行すれば、1, 2, 3キーを押すことで ogg を再生できる。
複数のoggを同時に再生することができているので、鳴らすだけでOK系のゲームSEなら使えそうかなと…。
ogg (or wav) を鳴らすサンプルを書いてみた。
_waveplay.bas
' wave play sample with FBSound #include "fbsound_dynamic.bi" chdir(exepath()) ' FBSound initialize If fbs_Init() = True Then Print "fbs_Init() success." Else Print "Error : fbs_Init() failure" Print FBS_Get_PlugError() Beep sleep end 1 End If dim as integer hWave1, hWave2, hWave3 #ifdef 0 ' load wav file Print "load wav file" fbs_Load_WAVFile("1.wav", @hWave1) fbs_Load_WAVFile("2.wav", @hWave2) fbs_Load_WAVFile("3.wav", @hWave3) #Else ' load ogg file Print "load ogg file" fbs_Load_OGGFile("1.ogg", @hWave1) fbs_Load_OGGFile("2.ogg", @hWave2) fbs_Load_OGGFile("3.ogg", @hWave3) #endif Print "Play : 1 - 3 key" Print "Exit : ESC key" Dim As Boolean running = True Dim As String k While running Dim As String k = inkey$ Select Case k Case "1": fbs_Play_Wave(hWave1) Case "2": fbs_Play_Wave(hWave2) Case "3": fbs_Play_Wave(hWave3) Case Chr(27): running = False End Select sleep 100 Wend Print "Exit."
fbc waveplay.bas と打ってコンパイル。waveplay.exe が生成される。
_1.ogg 、 _2.ogg 、 _3.ogg を同じフォルダに入れてから実行すれば、1, 2, 3キーを押すことで ogg を再生できる。
複数のoggを同時に再生することができているので、鳴らすだけでOK系のゲームSEなら使えそうかなと…。
◎ modも鳴らせる :
.wav 以外に、.ogg、.mp3 も鳴らせるけれど、.mod, .xm, .s3m, .it 等、Amiga発祥のデモシーンで使われていた音楽ファイルフォーマットも利用できる。
_MOD (ファイルフォーマット) - Wikipedia
_MOD (ファイルフォーマット) - Wikipedia
[ ツッコむ ]
#2 [basic] FreeBASIC + FBWindowsSoundWav.basを試用
FreeBASIC でwav再生するためのライブラリについて調べてる。
以下の投稿ページの中で、Windows と Linux の両方でwav再生するための関数名を同じにしたライブラリが紹介されてた。
_Play Sound WAV (Windows [32-bit], [64-bit], Linux [32-bit], [64-bit]) - freebasic.net
再生の実処理は、Windows、もしくは Linuxに特化した機能を呼び出して実現してるらしい。関数名が同じになるだけでも便利そうだなと思えてきたので試用してみることにした。環境は Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit。
結論を先に書いておく。一応wavは鳴ったけど、ゲーム制作用には使えない印象。
以下の投稿ページの中で、Windows と Linux の両方でwav再生するための関数名を同じにしたライブラリが紹介されてた。
_Play Sound WAV (Windows [32-bit], [64-bit], Linux [32-bit], [64-bit]) - freebasic.net
再生の実処理は、Windows、もしくは Linuxに特化した機能を呼び出して実現してるらしい。関数名が同じになるだけでも便利そうだなと思えてきたので試用してみることにした。環境は Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit。
結論を先に書いておく。一応wavは鳴ったけど、ゲーム制作用には使えない印象。
◎ インストール :
前述の掲示板から、ソースコードをコピペして、ローカルで .bi や .bas として保存する。
サンプルは以下。今回は 1.wav というファイルを読み込んで再生する。
_sample.bas
fbc sample.bas でコンパイル。sample.exe を実行。pキーで再生。sキーで停止。qキーで終了。
たしかに wav が鳴ってくれたけれど…。前の再生がまだ終わってない状態で連続して鳴らすと、前の再生をブツ切りして、次の音が最初から再生されてしまう。同時に並行して鳴ってほしいのだけどなあ…。
また、ブツ切りされる際に、ノイズもブチブチと入りまくる。
ゲーム制作に使えるライブラリでは無さそうだなと…。
- Linux の場合は、alsa.bi と FBLinuxSoundWav.bas をプロジェクトフォルダにコピー。
- Windwos の場合は、FBWindowsSoundWav.bas をプロジェクトフォルダにコピー。
サンプルは以下。今回は 1.wav というファイルを読み込んで再生する。
_sample.bas
#include "FBWindowsSoundWav.bas" Dim fb_Wav As FbWAV Ptr LoadWav("1.wav", fb_Wav) PlayWav(fb_Wav) Do Var key = Inkey Select Case key Case "s" : StopWav(fb_Wav) Case "p" : PlayWav(fb_Wav) Case "q" : Exit Do Case " " PauseWAV(fb_Wav) Sleep(100) End Select Var sp = StatusPlay(fb_Wav) Sleep(100) Cls Select Case sp Case 1 : Print "Play" Case 0 : Print "Stop" Case 2 : Print "Pause" End Select Print "Length=" & GetLengthSeconds(fb_Wav) & " seconds" Print "s)top / p)lay / q)uit / SPACE : Pause" Loop FreeWav(fb_Wav)
fbc sample.bas でコンパイル。sample.exe を実行。pキーで再生。sキーで停止。qキーで終了。
たしかに wav が鳴ってくれたけれど…。前の再生がまだ終わってない状態で連続して鳴らすと、前の再生をブツ切りして、次の音が最初から再生されてしまう。同時に並行して鳴ってほしいのだけどなあ…。
また、ブツ切りされる際に、ノイズもブチブチと入りまくる。
ゲーム制作に使えるライブラリでは無さそうだなと…。
[ ツッコむ ]
#3 [basic] FreeBASIC + FMODを試用
FreeBASIC から、FMOD (fmod.dll) なるサウンド用ライブラリを利用することができるらしい。
_FMOD
_FMOD - FreeBASIC Wiki Manual | FBWiki
_FreeBASIC Compiler / Feature Requests / #185 FMOD Ex headers for freebasic...
_TUTORIAL: Using FMOD for In-Game Music - Page 2 - freebasic.net
FMODは、商用利用時はライセンス料を払わないといけないサウンドライブラリ。ただ、フリーソフトに使う分には無料で利用しても良いことになっているらしい。あるいは、売り上げが一定額に満たない場合も無料で利用できる、と書いてあるように見えた。昔の Unity みたいな感じだろうか。 *1
気になったので、Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit で試用してみた。
_FMOD
_FMOD - FreeBASIC Wiki Manual | FBWiki
_FreeBASIC Compiler / Feature Requests / #185 FMOD Ex headers for freebasic...
_TUTORIAL: Using FMOD for In-Game Music - Page 2 - freebasic.net
FMODは、商用利用時はライセンス料を払わないといけないサウンドライブラリ。ただ、フリーソフトに使う分には無料で利用しても良いことになっているらしい。あるいは、売り上げが一定額に満たない場合も無料で利用できる、と書いてあるように見えた。昔の Unity みたいな感じだろうか。 *1
気になったので、Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit で試用してみた。
◎ インストール :
現行版のバイナリはユーザ登録しないと入手できないように見えたのだけど、おそらく昔の版なら、別の経路で入手できそう。例えば、以下のページから、UsingFMOD_A_Tutorial.zip もしくは、fmod_example_program.zip を入手する。中に fmod.dll も入ってる。
_TUTORIAL: Using FMOD for In-Game Music - Page 2 - freebasic.net
_QB Express: Issue #26
fmod_example_program.zip を解凍すると、サンプルファイル fmod_example.bas と fmod.dll が入ってる。ちなみに、ヘッダーファイル、fmod.bi は、FreeBASIC 1.10.1 に最初から入っている。
_TUTORIAL: Using FMOD for In-Game Music - Page 2 - freebasic.net
_QB Express: Issue #26
fmod_example_program.zip を解凍すると、サンプルファイル fmod_example.bas と fmod.dll が入ってる。ちなみに、ヘッダーファイル、fmod.bi は、FreeBASIC 1.10.1 に最初から入っている。
◎ 動作確認 :
fbc fmod_example.bas でコンパイル。
ただ、警告が結構出る。もしかすると fmod.dll のバージョンが合ってないのだろうか。しかし、FreeBASIC の fmod.bi には FMOD 3.75 と記述されていて、今回入手できた fmod.dll のバージョンも 3.7.5。バージョンは合ってそうな気がする…。FreeBASIC のバージョンアップに伴う仕様変更に、fmod.bi が追従していないだけだろうか? 随分古いライブラリのようだし。
さておき。一応、wav は鳴ってくれた。別々の音が同時に鳴っているようにも聞こえる。
しかし、一部の wav がループ再生されてしまう…。全ての wav がループ再生されるわけではなくて、特定のwavだけがループ再生になる。何故。ワンショット系のSEにするにはどうしたらいいのか…。
もしかして wav ファイルの中にループ再生するかしないかの情報を盛り込めることができて、たまたま何かの拍子に、その wav にだけ、その情報が入っちゃってるとか…?
ループ再生されてしまう wav を SoundEngine Free 5.23 で開いて、そのまま保存し直してみた。保存し直した wav を使ったらループ再生されない。どういうことだろう…。分からんなあ…。やはり wav にループ再生を指示する何かしらの情報を埋め込めるのだろうか…。
ただ、警告が結構出る。もしかすると fmod.dll のバージョンが合ってないのだろうか。しかし、FreeBASIC の fmod.bi には FMOD 3.75 と記述されていて、今回入手できた fmod.dll のバージョンも 3.7.5。バージョンは合ってそうな気がする…。FreeBASIC のバージョンアップに伴う仕様変更に、fmod.bi が追従していないだけだろうか? 随分古いライブラリのようだし。
さておき。一応、wav は鳴ってくれた。別々の音が同時に鳴っているようにも聞こえる。
しかし、一部の wav がループ再生されてしまう…。全ての wav がループ再生されるわけではなくて、特定のwavだけがループ再生になる。何故。ワンショット系のSEにするにはどうしたらいいのか…。
もしかして wav ファイルの中にループ再生するかしないかの情報を盛り込めることができて、たまたま何かの拍子に、その wav にだけ、その情報が入っちゃってるとか…?
ループ再生されてしまう wav を SoundEngine Free 5.23 で開いて、そのまま保存し直してみた。保存し直した wav を使ったらループ再生されない。どういうことだろう…。分からんなあ…。やはり wav にループ再生を指示する何かしらの情報を埋め込めるのだろうか…。
*1: 今の Unity はどういう価格体系になったのかよく知らないので、「昔の」と言っておきます…。
[ ツッコむ ]
#4 [basic] FreeBASIC + BASSを試用
FreeBASIC から BASSなるサウンド用ライブラリを利用することができるらしい。
_Un4seen Developments - BASS
_Un4seen Developments - BASSMOD
BASSは、非営利目的の場合は無料で利用できる。商用利用の場合はライセンス料を払わないといけない。
たしかこのあたり、DXRuby を触ってた頃も、「作ったゲームを同人ソフトとして販売するだけでも一定額を払わないといけないのはどうなのか。そのゲームが売れるのか売れないのか、全然分からないのに」みたいな話があって敬遠されていた記憶が…。
でもまあ、フリーソフトを作る分には無料で利用できるので、一応試用。環境は Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit。
_Un4seen Developments - BASS
_Un4seen Developments - BASSMOD
BASSは、非営利目的の場合は無料で利用できる。商用利用の場合はライセンス料を払わないといけない。
たしかこのあたり、DXRuby を触ってた頃も、「作ったゲームを同人ソフトとして販売するだけでも一定額を払わないといけないのはどうなのか。そのゲームが売れるのか売れないのか、全然分からないのに」みたいな話があって敬遠されていた記憶が…。
でもまあ、フリーソフトを作る分には無料で利用できるので、一応試用。環境は Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit。
◎ インストール :
以下のファイルを入手。
後者は、modファイルを再生するために必要。wav や mp3 を鳴らすだけなら要らない、と思う。たぶん。
それぞれ解凍して、中に入っている .dll (bass.dll, BASSMOD.dll) をプロジェクトフォルダにコピーしておく。
ちなみに…。
bass24.zip bassmod20.zip
後者は、modファイルを再生するために必要。wav や mp3 を鳴らすだけなら要らない、と思う。たぶん。
それぞれ解凍して、中に入っている .dll (bass.dll, BASSMOD.dll) をプロジェクトフォルダにコピーしておく。
ちなみに…。
- bass24.zip : 32bit版と64bit版の dll が入っている。
- bassmod20.zip : 32bit版の dll しか入ってない。
◎ 動作確認 :
FreeBASICインストールフォルダ/examples/sound/BASS/ の中にサンプルファイルがある。
demo.bas と small.bas はコンパイルできて、ogg と mo3(oggに対応させたmodらしい)は再生できた。
しかし、mod.bas がコンパイルできない。以下のエラーを出す。
色々調べてみたけれど、FreeBASICインストールフォルダ/inc/bassmod.bi の、以下の行を変更したら、コンパイルできるようになった。file のタイプを const zstring ptr に変更している。
しかし、コンパイルはできたものの、生成された mod.exe が、Windowsセキュリティから PUA:Win32/Keygen として警告されてしまう。mod.exe を、オンラインのウイルススキャンサイトに渡してスキャンしてみると問題無しと出てくるので、単に誤検出じゃないのかと思うけど…。
どうせ誤検出だろう、誤検出に違いないと信じて(?)、mod.exe を実行してみたところ、一応 mod が鳴ったことは鳴ったけれど…。ウイルス扱いされるのでは困るよなあ…。生成物を配布できないやん…。
いやまあ、BASSMOD は使わず、BASSだけ使う分には、そういう問題に遭遇しないのかもしれんけど。今の時代に、あえてゲームのBGMとしてmod/s3m/xm/itを鳴らしたい人も居ないだろうから、それほど実害は無さそうな気も…。BGMの類は、えてして ogg か mp3 にして用意することが多いだろうし…。
demo.bas と small.bas はコンパイルできて、ogg と mo3(oggに対応させたmodらしい)は再生できた。
しかし、mod.bas がコンパイルできない。以下のエラーを出す。
> fbc mod.bas mod.bas(15) error 58: Type mismatch, at parameter 2 of BASSMOD_MUSICLOAD() in 'If (BASSMOD_MusicLoad(FALSE, sound_file, 0, 0, BASS_MUSIC_LOOP) = False) Then'
色々調べてみたけれど、FreeBASICインストールフォルダ/inc/bassmod.bi の、以下の行を変更したら、コンパイルできるようになった。file のタイプを const zstring ptr に変更している。
declare function BASSMOD_MusicLoad(byval mem as BOOL, byval file as any ptr, byval offset as DWORD, byval length as DWORD, byval flags as DWORD) as BOOL ' ↓ declare function BASSMOD_MusicLoad(byval mem as BOOL, byval file as const zstring ptr, byval offset as DWORD, byval length as DWORD, byval flags as DWORD) as BOOL
しかし、コンパイルはできたものの、生成された mod.exe が、Windowsセキュリティから PUA:Win32/Keygen として警告されてしまう。mod.exe を、オンラインのウイルススキャンサイトに渡してスキャンしてみると問題無しと出てくるので、単に誤検出じゃないのかと思うけど…。
どうせ誤検出だろう、誤検出に違いないと信じて(?)、mod.exe を実行してみたところ、一応 mod が鳴ったことは鳴ったけれど…。ウイルス扱いされるのでは困るよなあ…。生成物を配布できないやん…。
いやまあ、BASSMOD は使わず、BASSだけ使う分には、そういう問題に遭遇しないのかもしれんけど。今の時代に、あえてゲームのBGMとしてmod/s3m/xm/itを鳴らしたい人も居ないだろうから、それほど実害は無さそうな気も…。BGMの類は、えてして ogg か mp3 にして用意することが多いだろうし…。
[ ツッコむ ]
#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、自分の知識レベルではちょっと手に負えないライブラリのようだなと…。
[ ツッコむ ]
以上、1 日分です。