2015-06-16 34 views
0

起初我應該道歉如果下面的代碼看起來很糟糕,而且格式不正確。我對編程知之甚少,因此我從不同來源獲取了一些節目,並將它們放在一起。如何在同一個文本框中重複顯示值?

在應用程序中,我想顯示來自手機麥克風的聲音的頻率(使用過零方法)。 當我運行的應用程序顯示頻率一次,但不更新它。

1)你能否幫我找到解決方案,在同一個文本框中重複顯示頻率值(或者在屏幕上的更合適的小部件)?

* 2)是否有可能使這個應用程序沒有按鈕。我的意思是,該應用程序顯示頻率開始後?*已解決

謝謝!

package alar.alar.com.frequencyFreq; 

import android.app.Activity; 
import android.media.AudioFormat; 
import android.media.AudioRecord; 
import android.media.MediaRecorder; 
import android.os.Bundle; 
import android.widget.TextView; 


public class MainActivity extends Activity { 
    private static final int RECORDER_SAMPLERATE = 8000; 
    private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO; 
    private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT; 
    public AudioRecord recorder = null; 
    int numCrossing, p; 
    short audioData[]; 
    public int frequency; 
    public boolean recording; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE, 
       RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING); 

     recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 
       RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSize); 

     recorder.startRecording(); 
     recording = true; 
     audioData = new short[bufferSize]; 
      recorder.read(audioData, 0, bufferSize); 
      numCrossing = 0; 

      for (p = 0; p < bufferSize - 1; p++) { 
       if ((audioData[p] > 0 && audioData[p + 1] <= 0) || 
         (audioData[p] < 0 && audioData[p + 1] >= 0)) { 
        numCrossing++; 
       } 
      } 

      frequency = (8000/bufferSize) * (numCrossing/2); 

      TextView textView = (TextView) this.findViewById(R.id.textView); 
      textView.setText(String.valueOf(frequency)); 

     }//onCreate 
    }//activity 
+0

的按鈕問題,請致電裏面的onCreate的startRecording方法,希望它有助於 –

+0

你需要更新您的應用程序每秒,現在我不會寫代碼,搜索更新Android應用程序每秒 –

+0

謝謝安德烈!按鈕問題我解決了,所以我更新了代碼。 – AlarMa

回答

0

試試這個

private Timer timer; 
private TimerTask timerTask; 
public void onPause(){ super.onPause(); 
timer.cancel(); 
} public void onResume(){ 
super.onResume(); 
try { 
timer = new Timer(); timerTask = new TimerTask() { 
@Override 
public void run() { 
//your method } 
}; 
timer.schedule(timerTask, 1000, 1000); } catch (IllegalStateException e){ android.util.Log.i("Damn", "resume error"); } } 
相關問題