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
的按鈕問題,請致電裏面的onCreate的startRecording方法,希望它有助於 –
你需要更新您的應用程序每秒,現在我不會寫代碼,搜索更新Android應用程序每秒 –
謝謝安德烈!按鈕問題我解決了,所以我更新了代碼。 – AlarMa