Wanderer
Neues Mitglied
- 0
Hallo!
meine Applikation soll Audio Daten in den Arbeitsspeicher aufnehmen, und dann weiterverarbeiten. Deshalb benutze ich die AudioRecord Klasse und nicht den MediaRecorder.
Bisher hatte ich einen Loop, der per "read" AudioDaten abholt und dann für eine weile schlafen gelegt wird. Das hat prinzipiell funktioniert, nur dass das Device extrem langsam wurde (trotz des schlafens).
Ich habe das nun umgekrempelt und will mit dem "OnRecordPositionUpdateListener" auf hereinkommende Daten reagieren.
Alles scheint zu funktionieren (Öffnen des Audio Devices etc.), nur wird der Listener scheinbar nie aufgerufen. Weiss jemand, warum?
Info:
Ich arbeite auf einem echten Device, kein Emulator. Das Aufnahme in einem Pseudo Busy Loop funktioniert. Nur die CallBack Funktionen des Listeners werden nie aufgerufen.
Hier ist ein Auschnitt aus meinem Source:
meine Applikation soll Audio Daten in den Arbeitsspeicher aufnehmen, und dann weiterverarbeiten. Deshalb benutze ich die AudioRecord Klasse und nicht den MediaRecorder.
Bisher hatte ich einen Loop, der per "read" AudioDaten abholt und dann für eine weile schlafen gelegt wird. Das hat prinzipiell funktioniert, nur dass das Device extrem langsam wurde (trotz des schlafens).
Ich habe das nun umgekrempelt und will mit dem "OnRecordPositionUpdateListener" auf hereinkommende Daten reagieren.
Alles scheint zu funktionieren (Öffnen des Audio Devices etc.), nur wird der Listener scheinbar nie aufgerufen. Weiss jemand, warum?
Info:
Ich arbeite auf einem echten Device, kein Emulator. Das Aufnahme in einem Pseudo Busy Loop funktioniert. Nur die CallBack Funktionen des Listeners werden nie aufgerufen.
Hier ist ein Auschnitt aus meinem Source:
Code:
public class myApplication extends Activity {
/* audio recording */
private static final int AUDIO_SAMPLE_FREQ = 16000;
private static final int AUDIO_BUFFER_BYTESIZE = AUDIO_SAMPLE_FREQ * 2 * 3; // = 3000ms
private static final int AUDIO_BUFFER_SAMPLEREAD_SIZE = AUDIO_SAMPLE_FREQ / 10 * 2; // = 200ms
private short[] mAudioBuffer = null; // audio buffer
private int mSamplesRead; // how many samples are recently read
private AudioRecord mAudioRecorder; // Audio Recorder
...
private OnRecordPositionUpdateListener mRecordListener = new OnRecordPositionUpdateListener() {
public void onPeriodicNotification(AudioRecord recorder) {
mSamplesRead = recorder.read(mAudioBuffer, 0, AUDIO_BUFFER_SAMPLEREAD_SIZE);
if (mSamplesRead > 0) {
// do something here...
}
}
public void onMarkerReached(AudioRecord recorder) {
Error("What? Hu!? Where am I?");
}
};
...
public void onCreate(Bundle savedInstanceState) {
try {
mAudioRecorder = new AudioRecord(
android.media.MediaRecorder.AudioSource.MIC,
AUDIO_SAMPLE_FREQ,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
AUDIO_BUFFER_BYTESIZE);
} catch (Exception e) {
Error("Unable to init audio recording!");
}
mAudioBuffer = new short[AUDIO_BUFFER_SAMPLEREAD_SIZE];
mAudioRecorder.setPositionNotificationPeriod(AUDIO_BUFFER_SAMPLEREAD_SIZE);
mAudioRecorder.setRecordPositionUpdateListener(mRecordListener);
mAudioRecorder.startRecording();
/* test if I can read anything at all... (and yes, this here works!) */
mSamplesRead = mAudioRecorder.read(mAudioBuffer, 0, AUDIO_BUFFER_SAMPLEREAD_SIZE);
}
}
Zuletzt bearbeitet: