Androidで録音

1ヶ月ほど前に壮大な理想を掲げたような気がするので、出来るところから手をつける。
とりあえずはAndroidで普通に録音するところから。

(とりあえず泣く子も黙る初心者の自分がどうにかこうにか録音できたまでのメモ)

サンプルコード

とりあえず見つけたここのコードを利用させていただくことにした。
このままだと呼び出し側がないので、コメント中程のSisiさんのコードも利用させて頂く。

これをAndroidプロジェクトのsrc内に貼りつけて開始。

サンプルコード修正

Sisiさんのサンプルコードはそのまま使おうにも一部修正が必要なので書き直す。

まず、Sisiさんはなにやら元のサンプルコードのクラス名を変更しているようなので

	final AudioRecorder2 recorder = new AudioRecorder2(“C:/Bochum”);

	final AudioRecorder recorder = new AudioRecorder(“C:/Bochum”);

に修正。
さらに、Benさんに指摘されているように

	“C:/Bochum”

	"/test/tmp.3gp"

などなどと書き直す。
ついでに、コピペだとダブルクォーテーションが何故か大文字になるので小文字に直してやる。
さらにこのプログラムでは”ちょっと待つ”とコメントがあるくせに実際には何も待っていないので

	//….wait a while

のコメント前後にスリープを入れてあげるといいかもしれない。

	//….wait a while
	Thread.sleep(1000);

これで1秒間の録音ができる。

ボタン作成

Sisiさんのプログラムではボタンを用いて録音を開始しているので、Techfirm Android Labのページを参考にボタンを作成
3つのボタンのIDはそれぞれrecord、start、stopにする。

デバッグツール

Androidエミュレータを起動するだけだとどんなエラーが発生しているのか全くわからない。
JavaDriveによるとDDMSというデバッグツールがあるらしいのでこれを参考にエラーを見つけましょう。

SDカード

Eclipse上からエラーが消えてもプログラムはエラーを吐いて止まるだけ。
エミュレータで録音するためには、まずはSDカードのイメージを作成する。
ASKAの開発日誌を参考にコマンドプロンプトで以下のコマンドを打ち込むと128MのSDカードイメージを作成できる。

	> mksdcard 128M sdcard.img

そしたら、SDカード搭載したをAVMを作成しなおす。

書き込み権限

さて、SDカードも搭載したのでいざサンプルコードを実行してみるとまたもやエラーで止まります。
こんどはSDカードが読み取り専用になってるとのこと。
書き込みを許可するためにはパーミッションを設定しなければなりません。
Android 開発メモによるとManifest.xml

	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

を追加してやればよいらしい。
実行してみるとまだエラー。
さらに

	<uses-permission android:name="android.permission.AUDIO_RECORD"/>

を追加してやることでやっとエラーがで無くなった?

プログラムを実行するとSDカードにtmp.3gpが出来ているはずです。
残念ながらまだ再生できないけど、録音はできた!