Сперва я должен извиниться, если код ниже выглядит ужасным и не отформатирован правильно. Я мало что знаю о программировании, поэтому я взял кусочки программ из разных источников и просто собрал их.Как показывать значения в одном и том же текстовом поле?
В приложении Я хотел бы отображать частоту (используя метод пересечения нуля) звука с микрофона телефона. Когда я запускаю приложение, он показывает частоту один раз, но не обновляет ее.
1) Можете ли вы помочь мне найти решение для одновременного отображения значений частоты в том же текстовом поле (или в более подходящем виджете на экране)?
* 2) Можно ли сделать это приложение без кнопок. Я имею в виду, что приложение показывает частоту сразу после ее запуска? * SOLVED
Спасибо!
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
для кнопок вопрос, вызовите метод startRecording в OnCreate, надеюсь, что это помогает –
вы должны обновить приложение каждый второй, теперь я не могу писать код, искать обновления приложение для Android каждый раз –
Спасибо, Андреа! Вопрос с кнопками я решил, поэтому я обновил код. – AlarMa