###前提・実現したいこと
Eclipseを使ってAndroidアプリを開発中の学生です。今、マイクを利用したものを作ろうとしているんですが、バッファやAudioRecorderなどの使い方がイマイチよく分かりません。AudioRecorderを使って音声を録音することはいろんなサイトで勉強して実装することはできました。それと、作りたいものというのは声ではなくて息を利用するものです。なので、息を検知する方法があれば教えて欲しいです。
###該当のソースコード
java
1package com.moonlight_aska.android.recorder02; 2 3 import android.app.Activity; 4 import android.media.AudioFormat; 5import android.media.AudioRecord; 6import android.media.MediaRecorder; 7 import android.os.Bundle; 8 import android.util.Log; 9 import android.view.View; 10 import android.widget.Button; 11 12 public class Recorder02 extends Activity implements View.OnClickListener { 13 final static int SAMPLING_RATE = 11025; 14 AudioRecord audioRec = null; 15 Button btn = null; 16 boolean bIsRecording = false; 17 int bufSize; 18 /** Called when the activity is first created. */ 19 @Override 20 public void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.main); 23 24 btn = (Button)findViewById(R.id.button_id); 25 btn.setOnClickListener(this); 26 // バッファサイズの計算 27 bufSize = AudioRecord.getMinBufferSize( 28 SAMPLING_RATE, 29 AudioFormat.CHANNEL_CONFIGURATION_MONO, 30 AudioFormat.ENCODING_PCM_16BIT) * 2; 31 // AudioRecordの作成 32 audioRec = new AudioRecord( 33 MediaRecorder.AudioSource.MIC, 34 SAMPLING_RATE, 35 AudioFormat.CHANNEL_CONFIGURATION_MONO, 36 AudioFormat.ENCODING_PCM_16BIT, 37 bufSize); 38 } 39 40 @Override 41 public void onClick(View v) { 42 // TODO Auto-generated method stub 43 if (v == btn) { 44 if (bIsRecording) { 45 btn.setText(R.string.start_label); 46 bIsRecording = false; 47 } 48 else { 49 // 録音開始 50 Log.v("AudioRecord", "startRecording"); 51 audioRec.startRecording(); 52 bIsRecording = true; 53 // 録音スレッド 54 new Thread(new Runnable() { 55 @Override 56 public void run() { 57 byte buf[] = new byte[bufSize]; 58 // TODO Auto-generated method stub 59 while (bIsRecording) { 60 // 録音データ読み込み 61 audioRec.read(buf, 0, buf.length); 62 Log.v("AudioRecord", "read " + buf.length + " bytes"); 63 } 64 // 録音停止 65 Log.v("AudioRecord", "stop"); 66 audioRec.stop(); 67 } 68 }).start(); 69 btn.setText(R.string.stop_label); 70 } 71 } 72 } 73 74 @Override 75 protected void onDestroy() { 76 // TODO Auto-generated method stub 77 super.onDestroy(); 78 audioRec.release(); 79 } 80 }
###上記のコードについて
上記のコードは「http://seesaawiki.jp/w/moonlight_aska/d/%a5%c7%a1%bc%a5%bf%a5%b9%a5%c8%a5%ea%a1%bc%a5%e0%a4%c8%a4%b7%a4%c6%b2%bb%c0%bc%a5%c7%a1%bc%a5%bf%a4%f2%c6%c9%a4%df%b9%fe%a4%e0」のサイトから引用してきました。分からないことがいくつかあるのですが、一番疑問に思っているところについて記述します。サイトの上端にAudioRecord#readメソッドで 音声データを読み込むと書いてあるのですが、マイクに声を出しても出さなくてもLogで値を調べたところ値が変わらないのです。また、bufはbyte型の配列ですので、配列の中身を調べても今度は値が変わるのですが、マイクに声を出さなくても値は変動します。ですので、このreadメソッドを使って音声データを読み込むという意味を具体的に教えて頂きたいです。
###質問の仕方が下手でご迷惑おかけします・・・
プログラムについての質問をあまりしたことがないので、大変分かりづらい質問かと思いますが、回答よろしくお願いします。それと、書いた質問は一つではないので、回答ができる部分だけでいいのでお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/23 01:41
2016/09/23 02:21
2016/09/23 10:35
2016/09/23 10:40
2016/09/28 11:19