Androboiceってアプリを作ったときのメモ

前回の続き。

で、AndroidでPCMデータの再生

AudioTrackクラスで前回rec.rawとして保存した生PCMデータを再生できる。以下コード

// 各種例外処理は略
// サンプルレート 8kHz
int SAMPLE_RATE = 8000;
// オーディオトラック取得
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
		SAMPLE_RATE,
		AudioFormat.CHANNEL_CONFIGURATION_MONO,
		AudioFormat.ENCODING_PCM_16BIT,
		AudioTrack.getMinBufferSize(SAMPLE_RATE,
									AudioFormat.CHANNEL_CONFIGURATION_MONO,
									AudioFormat.ENCODING_PCM_16BIT) ,
		AudioTrack.MODE_STREAM);

// 録音したファイル取得
File recFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/rec.raw");
InputStream is = new FileInputStream(recFile);
// バイトデータの配列
long length = mOutFile.length();
byte[] byteData = new byte[(int)length];
// ファイルのデータを全て読み込み
int offset = 0, numRead = 0;
while (offset < byteData.length
		&& (numRead = is.read(byteData, offset, byteData.length - offset)) >= 0) {
	offset += numRead;
}
is.close();

// 出力
audioTrack.play();
audioTrack.write(byteData, 0, byteData.length);

コードはここを参考にした。
これでスピーカーから音が出る。
が、しかしDroidとかMilestoneとかG1とかで動かないらしい。
AudioTrackが取得できない条件があるみたい。サンプルレートが問題なのだろうか。
手元にないのでわからんが。。。2.0のエミュレータでは動くのだが・・・まいった;(

AudioTrackとAudioRecordクラスは指定したフレームごとにコールされるリスナを登録できるらしい。
それを使えば録音・再生のシークバーとかを実装できるのかな。うまくいかないのだが・・。

なんにせよ情報が少なすぎる・・。Audioまわりを詳しくまとめた書籍があったら買うのだが。