色んなサイト見てコーディングしてみた。
…がうまくいかない。
ソースはこんなん(注:実行しても動きません→追記:permissionの設定すれば動きます。この記事参照)
package org.example.microphone;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.media.AudioRecord.OnRecordPositionUpdateListener;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class Microphone extends Activity {
private static final int AUDIO_SAMPLE_FREQ = 8000;
//Bufferサイズ(getMinBufferSize()で取得できる値の2倍)
private static final int AUDIO_BUFFER_SIZE = AudioRecord.getMinBufferSize(AUDIO_SAMPLE_FREQ,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.CHANNEL_CONFIGURATION_MONO) * 2;
private static final String TAG = "debug";
AudioRecord record;
mNotification notificaiotn;
TextView textView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,String.valueOf(AUDIO_BUFFER_SIZE));
textView = (TextView)findViewById(R.id.textView);
setContentView(R.layout.main);
//recorderインスタンスのコンストラクタ設定
try{
record = new AudioRecord(MediaRecorder.AudioSource.MIC,
AUDIO_SAMPLE_FREQ,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
AUDIO_BUFFER_SIZE);
}
catch(IllegalArgumentException e){
e.printStackTrace();
}
Log.d(TAG,String.valueOf(record.getState()));
record.setNotificationMarkerPosition(50);
record.setPositionNotificationPeriod(100);
record.setRecordPositionUpdateListener(notificaiotn);
}
//オーディオ入力イベントリスナの実装
public class mNotification implements OnRecordPositionUpdateListener{
@Override
public void onMarkerReached(AudioRecord recorder) {
// TODO Auto-generated method stub
//read PCM buffer here
byte[] audioBuffer = new byte[AUDIO_SAMPLE_FREQ];
record.read(audioBuffer,0,AUDIO_SAMPLE_FREQ);
textView.setText(String.valueOf(audioBuffer));
}
@Override
public void onPeriodicNotification(AudioRecord recorder) {
// TODO Auto-generated method stub
//read PCM buffer here
byte[] audioBuffer = new byte[AUDIO_SAMPLE_FREQ];
record.read(audioBuffer,0,AUDIO_SAMPLE_FREQ);
}}
@Override
public void onPause(){
super.onPause();
}
}
どうもsetNotificationMarketPosition部分でAudioRecordのインスタンス初期化が出来ていないみたい。エラーログはこんな感じ。
07-21 21:54:24.749: ERROR/AudioFlinger(35): Request requires android.permission.RECORD_AUDIO
permissionの設定が問題なのかしら?
明日はそこら辺のいじくり方について調べるか。
----------
※参考URL
[1]http://www.mail-archive.com/android-developers@googlegroups.com/msg35441.html
[2]http://www.mailinglistarchive.com/html/android-group-japan@googlegroups.com/2009-10/msg00035.html
[3]http://d.hatena.ne.jp/yamanetoshi/20100202/1265036548
[4]http://www.mailinglistarchive.com/html/android-group-japan@googlegroups.com/2010-06/msg00617.html
[5]http://groups.google.co.jp/group/android-developers/browse_thread/thread/38cabdc4a48358a9?fwc=1
[6]http://developer.android.com/reference/android/media/AudioRecord.html
0 件のコメント:
コメントを投稿