録音アプリ作成

録音アプリ作成

今回できたのは
audio

音声を記録するには
android.media.MeiaRecorder クラスの
setAudioSource() を使う

MediaRecorder は録画にも使うけど
ソースとして音声のみを指定すれば録音に使える

ソース
記録フォーマット
コーデック
に指定する定数は

MediaRecorder.AudioSource
MediaRecorder.OutputFormat
MediaRecorder.AudioEncoder
となる

なお、録音を使うには
権限として
RECORD_AUDIO

WRITE_EXTERNAL_STORAGE
が必要になる

まずは実践

新しくプロジェクトを
RecordAudio で作成

対象は Android 4.0.3

プロジェクトができたら
新しくレイアウトファイルをつくるので
file > new > other > Android XML Layout File

record.xml
を作成

RootElement には
LinearLayout を選択

これで作成されるので
次にテキストで録音中と表示し
停止するボタンも設置する


	<TextView 
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="録音中"/>
	<Button 
	    android:id="@+id/stop"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="録音停止"/>

を追加する

次に
AndroidManifest.xml へ権限を追加する

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

を追記する

ここまでできたら
MainActivity で処理を書く

Android アプリでは基本的に
HTMLのような画面をXMLで作成
Javascript の処理のようなものを
java で書く

まず

 extends ActionBarActivity

 extends Activity

にして
Ctrl + shift + o で import を補完

使用する画面を変更したので

setContentView(R.layout.record);

にする

		if (savedInstanceState == null) {
			getSupportFragmentManager().beginTransaction()
					.add(R.id.container, new PlaceholderFragment()).commit();
		}


	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	/**
	 * A placeholder fragment containing a simple view.
	 */
	public static class PlaceholderFragment extends Fragment {

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView = inflater.inflate(R.layout.fragment_main, container,
					false);
			return rootView;
		}
	}

はいらないので削除

そして使うものを宣言しておく

	private Button executeBtn;
	private MediaRecorder mRecorder;

ここからの処理は onCreate() の中へ書く

まず MediaRecorder インスタンス作成

mRecorder = new MediaRecorder();

次に入力ソースをマイクに設定する

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

そして記録するときのフォーマットを3GPP にするので

mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

次に音声コーデックをAMR-N8 にする

mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

次に出力ファイルのパスを設定する
このときにSDカードに書き込むので権限がほしい

mRecorder.setOutputFile("/sdcard/audio.3gp");

今回はテストだけど
実際にこれをやると以前のものが上書きされるので注意

次にレコーダを準備
例外対策のため
try catch で書く

		try {
			//レコーダを準備
			mRecorder.prepare();
		}catch(IllegalStateException e){
			e.printStackTrace();
		} catch (IOException e) {
			// TODO: handle exception
			e.printStackTrace();
		}

次に録音開始

mRecorder.start();

次に、終了ボタンをタップしたときの処理を追加

this.executeBtn =(Button)findViewById(R.id.stop);

これでボタンを判別

挙動は
setOnClickListener で設定する

途中でエラーがでるので
マウスオーバーして指示にしたがい補完する
もしくは
Ctrl + shift + o で候補を出して補完する

最初に

import android.view.View.OnClickListener;

を書いてもいいけど
なれない内は補完したほうがいい

挙動は例外対策を考えて
try catch で書いていく

ソースは

try {
					//録音停止
					mRecorder.stop();
					//再使用に備えレコーダ状態のリセット
				} catch (IllegalStateException e) {
					// TODO: handle exception
					e.printStackTrace();
				}

あと、メモリ管理みたいに使ったら開放をわすれずに行うので

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		
		//使わなくなったらレコードリソースを開放
		mRecorder.release();
	}

を追加する

これで実行すればできあがり

録音している画面は変化しないので
なにかエフェクトをつけるとおもしろいかもしれない

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です