ハマり中~
PdBase.openAudio 等のオーディオ系のメソッドは,libpdに同梱されたJNIのNative関数を呼んでいます.
- 生のlibpdをデスクトップ環境向けにビルドするとNative関数の中身はカラッポ.jni/z_jni_plain.c
- Android向けにビルドすると,これが jni/z_jni_opensl.c に置き換えられる.
- PortAudio branch版のlibpdでのデスクトップ向けビルドでは, jni/z_jni_pa.c に置き換えられる.
samples/com/noisepages/nettoyeur/libpd/sample/JavaSoundSample.java
これを1で実行すると,エラーは起きないけど何も鳴らない.まぁこれは正常な動作.
しかし3で実行すると,PdBase.openAudio と AudioSystem.getLine(info) がかち合った所でフリーズ.
前者を消すとPdから信号が流れてこないし,後者を消すと信号をオーディオデバイスに乗せられない.両方動かさないと意味がない.
うーむ?
- PortAudioが正常にインストールできていない可能性
- PortAudioのライブラリや実行ファイルがJNIでうまくリンクされていない可能性
- そもそもPortAudioを使う場合に適用できる手法ではない可能性
が考えられる。一個ずつつぶしていくか…
- make嫌い
- JNIむつかしー
- PortAudioっていうかサウンドドライバ使ったことない
JavaやPdそのものは「触るの初めて!たのしそう!」的にやる気が出ますが,
今まで意図して避けてきたものに囲まれるのはキツいっすな…
Cocoa向けlibpdビルドってのを提供してる人も居るようですが,今回はあくまでもAndroidアプリのテスト環境構築という前提があるので,ぜひともPortAudioで実現させたいところ.
あとで読む:http://www.ibm.com/developerworks/jp/linux/library/l-posix2/
0 件のコメント :
コメントを投稿