2010-08-10

Rasender Reporter

Heute möchte ich Ihnen zeigen, wie leicht sich Androiden in mobile Diktiergeräte verwandeln lassen. Dies bedeutet:

  • Aufnehmen von Geräuschen mit dem eingebauten Mikrofon
  • Abspielen der Aufnahme

Der erste Teil, das Aufnehmen, ist sehr schnell erledigt:

protected void recordToFile() {
  recorder = new MediaRecorder();
  recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  File f = new File(Environment.getExternalStorageDirectory(),
      "recording.3gp");
  try {
    f.createNewFile();
    recorder.setOutputFile(filename = f.getAbsolutePath());
    recorder.prepare();
    recorder.start();
  } catch (IOException e) {
    Log.d(TAG, "could not start recording", e);
  }
}
Java2html

Ruft man diese Methode auf, wird das durch das Mikrofon aufgenommene Audiosignal in eine Datei auf der externen Speicherkarte geschrieben.

Stellen Sie sich eine Anwendung mit zwei Schaltflächen zum Starten und Stoppen der Aufnahme vor. Dann könnte das reagieren auf Klicks auf den Start-Knopf so aussehen:

startRecording.setOnClickListener(new View.OnClickListener() {
  public void onClick(View v) {
    startRecording.setEnabled(false);
    stopRecording.setEnabled(true);
    stopRecording.requestFocus();
    recordToFile();
  }
});
Java2html

Das Anklicken des Stopp-Knopfs beendet die Aufnahme und startet die Wiedergabe. Dies widerum könnte man so realisieren:

stopRecording.setOnClickListener(new View.OnClickListener() {
  public void onClick(View v) {
    stopRecording.setEnabled(false);
    // die Aufnahme stoppen
    recorder.stop();
    recorder.release();
    // die Datei abspielen
    playAudioFile(filename);
  }

});
Java2html

Bleibt eigentlich nur noch ein Blick auf die Abspielroutine:

protected void playAudioFile(String filename) {
  final MediaPlayer player = new MediaPlayer();
  player.setOnCompletionListener(new OnCompletionListener() {

    public void onCompletion(MediaPlayer player) {
      player.release();
      startRecording.setEnabled(true);
      startRecording.requestFocus();
    }
  });
  try {
    player.setDataSource(filename);
    player.prepare();
    player.start();
  } catch (Throwable thr) { // IllegalArgumentException,
    // IllegalStateException, IOException
    Log.d(TAG, "could not play audio", thr);
  }
}
Java2html

Diese Methode bringt insofern ein klein wenig Würze in die doch sehr einfachen Tätigkeiten, als sie einen Listener registriert, der nach dem Ende des Abspielvorgangs in Aktion tritt. Er gibt die nun nicht mehr benötigten Ressourcen frei und reaktiviert eine Schaltfläche – die Starttaste sollte natürlich während einer Wiedergabe nicht angeklickt werden können.

No comments:

Post a Comment