金といいます。
AudioTrackクラスを使って、
・Threadクラスのパブリック変数として
AudioTrack track ;
を定義。
・クラスのコンストラクタで初期化
track =
new AudioTrack(AudioManager.STREAM_MUSIC,
MicrophoneActivity.SAMPLERATE,
AudioFormat.CHANNEL_OUT_MONO ,
AudioFormat.ENCODING_PCM_16BIT,
MicrophoneActivity.out_buff_size,
AudioTrack.MODE_STREAM);
・run()の中で
track.play();
while (isPlay) {
track.write(buff, 0, buff.length);
}
track.stop();
track.release();
というような処理を実行するプログラムを作成しました。
Android2.Xの複数の実機環境で実行したところ正常に動作しており、
要望の処理が実行できている(音声が再生できている)のですが、
Android4.0の端末でまったく同じアプリを実行したところ、
track.play()の処理で
05-02 02:56:55.825: E/AndroidRuntime(2367): java.lang.IllegalStateException: play() called on uninitialized AudioTrack.
05-02 02:56:55.825: E/AndroidRuntime(2367): at
android.media.AudioTrack.play(AudioTrack.java:828)
05-02 02:56:55.825: E/AndroidRuntime(2367): at com.njn.NoticeReceiver.TrackPlayThread.run(TrackPlayThread.java:96)
となり、アプリがエラー終了してしまいます。
Thread処理の挙動が違うのかと思い、 track変数の宣言をstaticにしてみたり、
コンストラクタ内の初期化処理をrun()の中に移動させてみたりしましたが、どうにも解決しません。
一応、デバッグツールを使ってそれぞれ処理を通っていることは確認しているのですが、
2.X系では不要だけれど、4.0以上では必要な、initialize処理があったりするのでしょうか。
もしくは、4.0の実行環境がPandaboardという特殊な環境によるものなのでしょうか。
ご教示いただければ幸いです。