suikanさんからレイテンシに関してトラバを頂いていますが、それついてはまたあらためて書くとして、とりあえずコンパイル時に問題になった点をもう少し詳しく書いておきます。あまりまとまりはないですが、メモということで(このエントリを編集中に一度消えてしまった(泣))。
・環境はWinXP上でMinGW+MSYS。ソースはpa_stable_v19_061121.tgz。
・コンパイルのやり方は普通にconfigureしてmake。対応したいドライバのAPI(hostapi)ごとに
configureスクリプトに必要なオプションを与える。
・Makefile中で、*-recursiveのように、サブディレクトリに対して処理を行おうとするところがあるが、SUBDIRSが空(実際サブディレクトリはあるが、Makefileはトップにしか無い)なので失敗する。とりあえず外しておく。
・wmmeに関してはほとんど問題なし。
- ./configure --with-winapi でOK。
・asio
- asio対応のコンパイルを行うためには、まずasiosdkをSteinberg社から入手する必要がある(asiosdkは再配布は許可されていないはず)。これを適当なディレクトリに展開する。その上で、たとえば
./configure --with-winapi --with-asiodir=/c/asiosdk2.1
とする。しかし、元のままではコンパイルは通らない。portaudioのasio関係のソースのパスが以前と変わっているのにMakefileでは昔のままだからである。
pa_asio/ --> src/hostapi/asio/ と変更する。
- asioコンパイル時のみC++のソースをコンパイルすることになるので、Makefile中でもそれなりの対応が必要になる。ライブラリ作成時にもg++を使用するように変更。
- tests/pa_devsコマンドを作成するときに、'PaAsio_'ではじまる関数が見つからないと怒られる。portaudioライブラリ作成時にPaAsio_*もexportするように変更。
・DirectSound
- MicrosoftからDirectX SDKを入手して設定しておく。最新版を使えば良いのだろうが、私の環境ではうまく行かず、以前実績のある2004年10月版を使っている。展開したディレクトリをconfigureスクリプト実行時に指定する。たとえば
./configure --with-winapi=directx --with-dxdir=/c/dx9sdk
- 'src/hostapi/dsound/pa_win_ds_dynlink.h'でインクルードしている
'DSound.h'を小文字の'dsound.h'に変更。
・wdmks
- 同じくDirectX SDKが必要。
./configure --with-winapi=wdmks --with-dxdir=/c/dx9sdk
- pa_win_hostapis.cの中の、PaUtilHostApiInitializerの配列の中で、
がコメントアウトされているので、外す。
以上。
まだ細かいことはありますが、だいたいこんなところでコンパイルは通るようになります。また、wdmks以外はテストプログラムを実行するとそれなりに動作しているようです。
wdmksはbin/pa_devsコマンドでデバイスのリストは出ますが、音の入出力はまるでダメです。
ここまでの変更を施したものを、こちらに置いておきますので、興味のある方は試してみてください。お約束ですがat your own riskでお願いします。また、もっといい対処法などがありましたら是非教えてください。
変更したのはconfigure.in, Makefile.in, 'src/hostapi/dsound/pa_win_ds_dynlink.h', 'src/os/win/pa_win_hostapis.c'のみです。
しかし、poraudioのWikiやMLのアーカイブをざっと見たのですが、configureスクリプトの問題やwdmksが動かないという話題は見つけられませんでした。何か間違ってるのかなあ。一度MLで質問してみようかと思っています。
それから、今のconfigureスクリプトでは、一つのhostapi(ASIOならASIOだけ)しかコンパイルされませんが、すべてに対応したライブラリをコンパイルすることは出来るはずです。実際以前のバージョンでは出来ていましたから。
・環境はWinXP上でMinGW+MSYS。ソースはpa_stable_v19_061121.tgz。
・コンパイルのやり方は普通にconfigureしてmake。対応したいドライバのAPI(hostapi)ごとに
configureスクリプトに必要なオプションを与える。
・Makefile中で、*-recursiveのように、サブディレクトリに対して処理を行おうとするところがあるが、SUBDIRSが空(実際サブディレクトリはあるが、Makefileはトップにしか無い)なので失敗する。とりあえず外しておく。
・wmmeに関してはほとんど問題なし。
- ./configure --with-winapi でOK。
・asio
- asio対応のコンパイルを行うためには、まずasiosdkをSteinberg社から入手する必要がある(asiosdkは再配布は許可されていないはず)。これを適当なディレクトリに展開する。その上で、たとえば
./configure --with-winapi --with-asiodir=/c/asiosdk2.1
とする。しかし、元のままではコンパイルは通らない。portaudioのasio関係のソースのパスが以前と変わっているのにMakefileでは昔のままだからである。
pa_asio/ --> src/hostapi/asio/ と変更する。
- asioコンパイル時のみC++のソースをコンパイルすることになるので、Makefile中でもそれなりの対応が必要になる。ライブラリ作成時にもg++を使用するように変更。
- tests/pa_devsコマンドを作成するときに、'PaAsio_'ではじまる関数が見つからないと怒られる。portaudioライブラリ作成時にPaAsio_*もexportするように変更。
・DirectSound
- MicrosoftからDirectX SDKを入手して設定しておく。最新版を使えば良いのだろうが、私の環境ではうまく行かず、以前実績のある2004年10月版を使っている。展開したディレクトリをconfigureスクリプト実行時に指定する。たとえば
./configure --with-winapi=directx --with-dxdir=/c/dx9sdk
- 'src/hostapi/dsound/pa_win_ds_dynlink.h'でインクルードしている
'DSound.h'を小文字の'dsound.h'に変更。
・wdmks
- 同じくDirectX SDKが必要。
./configure --with-winapi=wdmks --with-dxdir=/c/dx9sdk
- pa_win_hostapis.cの中の、PaUtilHostApiInitializerの配列の中で、
#ifndef PA_NO_WDMKS PaWinWdm_Initialize, #endif
がコメントアウトされているので、外す。
以上。
まだ細かいことはありますが、だいたいこんなところでコンパイルは通るようになります。また、wdmks以外はテストプログラムを実行するとそれなりに動作しているようです。
wdmksはbin/pa_devsコマンドでデバイスのリストは出ますが、音の入出力はまるでダメです。
ここまでの変更を施したものを、こちらに置いておきますので、興味のある方は試してみてください。お約束ですがat your own riskでお願いします。また、もっといい対処法などがありましたら是非教えてください。
変更したのはconfigure.in, Makefile.in, 'src/hostapi/dsound/pa_win_ds_dynlink.h', 'src/os/win/pa_win_hostapis.c'のみです。
しかし、poraudioのWikiやMLのアーカイブをざっと見たのですが、configureスクリプトの問題やwdmksが動かないという話題は見つけられませんでした。何か間違ってるのかなあ。一度MLで質問してみようかと思っています。
それから、今のconfigureスクリプトでは、一つのhostapi(ASIOならASIOだけ)しかコンパイルされませんが、すべてに対応したライブラリをコンパイルすることは出来るはずです。実際以前のバージョンでは出来ていましたから。
※コメント投稿者のブログIDはブログ作成者のみに通知されます