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まわりを詳しくまとめた書籍があったら買うのだが。

2010年4月9日 @ 6:47 PM.
AudioTrackってそんなに多くの実機で動かないんですか。ちなみにエミュは1.6とかでも動きますよ。