JNIを使ってリッピング
TOC情報も読めているし、トラックのデータも読めている。
データをダンプ表示しただけではよくわからないので、先日作ったWAVEファイルモジュールに渡して、実際にWAVEファイルにしてみた。
ちゃんと音がでる。問題はない。
問題なのは、リッピングの遅さだった。
異常に遅い。CDドライブが遊んでいる。
調べた結果、原因はWAVEファイル出力だった。書き込む際にループして1バイトづつ書いていた。これをまとめて書くように変更。
まだ遅い。今度はWAVEファイル出力のOutputStreamだった。
まとめて書き込まれた時の処理が定義されていない。
これを直すと劇的に速くなった。しかし、まだCDドライブは若干遊んでいる。
1回で読みとるセクタ数を変えてみるが、これは全く効果なし。
原因を追及いていくと、セクタを読むJNIメソッドが遅い。
JNIを使うのにオーバーヘッドがかかるのか?
他のJNIメソッドで試したが遅くない。
JNI内で毎回配列を作成し返しているので、これが原因かもしれない。
呼び出し側でダイレクトバッファーを使い、それを渡してJNI側ではそれを書き換えるようにすれば速くなるかも。
おっとその前に、ネイティブプログラム側のCDアクセス部分だけをコメントにしてどうなるかを試した方がいいな。
それで変わらなければ、チューニングのするところがない。
データをダンプ表示しただけではよくわからないので、先日作ったWAVEファイルモジュールに渡して、実際にWAVEファイルにしてみた。
ちゃんと音がでる。問題はない。
問題なのは、リッピングの遅さだった。
異常に遅い。CDドライブが遊んでいる。
調べた結果、原因はWAVEファイル出力だった。書き込む際にループして1バイトづつ書いていた。これをまとめて書くように変更。
まだ遅い。今度はWAVEファイル出力のOutputStreamだった。
まとめて書き込まれた時の処理が定義されていない。
これを直すと劇的に速くなった。しかし、まだCDドライブは若干遊んでいる。
1回で読みとるセクタ数を変えてみるが、これは全く効果なし。
原因を追及いていくと、セクタを読むJNIメソッドが遅い。
JNIを使うのにオーバーヘッドがかかるのか?
他のJNIメソッドで試したが遅くない。
JNI内で毎回配列を作成し返しているので、これが原因かもしれない。
呼び出し側でダイレクトバッファーを使い、それを渡してJNI側ではそれを書き換えるようにすれば速くなるかも。
おっとその前に、ネイティブプログラム側のCDアクセス部分だけをコメントにしてどうなるかを試した方がいいな。
それで変わらなければ、チューニングのするところがない。
Comments