2013-04-09 112 views
0

我從書臨Android的媒體幫助...一個簡單的實時麥克風音頻表中的Android

下面是代碼:

public class MicMeter extends Activity implements OnClickListener { 


RecordAudio recordTask; 
int blocksize = 256; 
int frequency = 8000; 
int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO; 
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; 
TextView txt; 
Button start; 
boolean started = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_mic_meter); 
    start = (Button)findViewById(R.id.button1); 
    txt = (TextView)findViewById(R.id.textView1); 

    start.setOnClickListener(this); 


} 


private class RecordAudio extends AsyncTask <Void,double[],Void>{ 

    @Override 
    protected Void doInBackground(Void... params) { 
     try{ 
     int bufferSize = AudioRecord.getMinBufferSize(frequency,channelConfig,audioEncoding); 
     AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfig, audioEncoding, bufferSize); 

     short[] buffer = new short[blocksize]; 
     double[] meter = new double[blocksize]; 

     audioRecord.startRecording(); 

     while(started){ 
      int bufferReadResult = audioRecord.read(buffer, 0, blocksize); 

      for (int i = 0; i < blocksize && i < bufferReadResult; i++) { 
       meter[i] = (double) buffer[i]/32768.0; // signed 16 bit 
      } 
      publishProgress(meter); 
     } 
     audioRecord.stop(); 

    }catch (Throwable t) { 
     Log.e("AudioRecord","RecordingFail"); 
    } 

     return null; 
    } 

    @Override 
    protected void onProgressUpdate(double[]... meter) { 

     for(int i = 0 ; i < meter[0].length ; i++){ 
      double[] helper = meter[i]; 
      txt.setText(Double.toString(helper)); 
     } 

    } 


} 


@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

    if(started){ 
     recordTask.cancel(true); 
    }else{ 
     started = true; 
     recordTask = new RecordAudio(); 
     recordTask.execute(); 

    } 
} 

}

而我按下按鈕。 它顯示255.0,然後它不響應... 有沒有什麼辦法可以解決它? 有沒有關於此的任何問題版本?

感謝

回答

0
for(int i = 0 ; i < meter[0].length ; i++){ 
    double helper = i; 
    txt.setText(Double.toString(helper)); 

的setText覆蓋舊值。所以只有最後一個電話會顯示。最後一次調用將其設置爲助手,該助手始終爲meter [0] .length。由於這是一個固定的數字,它不會改變。

+0

好吧,我明白了..我能做些什麼來在文本中看到麥克風輸入的值? – kimonasKit 2013-04-23 08:33:27

相關問題