J
J4M350N
Neues Mitglied
- 0
Hallo, arbeite gerade an einer App, die die Umgebungslautstärke kontinuierlich über das interne Mikrofon des Androiden misst und (erstmal) anzeigt.
Ich möchte noch kurz sagen, dass ich bevor ich mich um die UI-Entwicklung kümmern will, zuerst die Funktion sicherstellen will.
Kurz zur UI: (Pre-Version)
Zuerst die globalen variablen:
Initialisierung
Ich bekomme hier auf aufs EditText folgendes
Jetz kommt das Problem.
Das einlesen funktioniert nicht, ich bekomme:
ret1 im Code ist der Return-Wert der beim Aufruf von myAudioRecord.read(...) zurückgegeben wird. Dieser sollte die Anzahl der eingelesenen Bytes enthalten.
Auch auffällig ist, dass das Ausführen der Mehorde doRecord nur sehr kurz dauert, auch wenn duration (Aufnahmedauer) ein paar Sekunden beträgt.
Wenn ich das Byte-Array auslese bzw. die Summe aller elemente bilde kommt 0 raus.
Ich bin für Vorschläge aller Art dankbar.
Ich möchte noch kurz sagen, dass ich bevor ich mich um die UI-Entwicklung kümmern will, zuerst die Funktion sicherstellen will.
Kurz zur UI: (Pre-Version)
- EditText (für Debugging Zwecke)
- Buttons für Init und Record (Aufruf der Methoden, siehe unten)
- Seekbar zur Anzeige (der Lautstärke)
- Start, UI-Elemente "holen"
- Initialisierungs-Methode aufrufen (Button)
- Record-Methode aufrufen (Button)
Zuerst die globalen variablen:
Code:
private final int myAUDIO_SAMPLE_RATE = 44100;
private final int myAUDIORECORD_CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO;
private final int myAUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
private final int myAUDIORECORD_BUFFERSIZE = AudioRecord.getMinBufferSize( myAUDIO_SAMPLE_RATE,
myAUDIORECORD_CHANNEL_CONFIG,
myAUDIO_FORMAT);
private AudioRecord myAudioRecord;
private byte[] myAudioBuffer;
Code:
private void doInit(){
myAudioRecord = new AudioRecord( MediaRecorder.AudioSource.MIC,
myAUDIO_SAMPLE_RATE,
myAUDIORECORD_CHANNEL_CONFIG,
myAUDIO_FORMAT,
myAUDIORECORD_BUFFERSIZE);
if(myAudioRecord.getState() == AudioRecord.STATE_INITIALIZED){myEditText.append("AudioRecord initialized.\n");}
else{myEditText.append("AudioRecord not initialized.\n");}
myEditText.append("AudioRecord Buffersize: " + String.valueOf(myAUDIORECORD_BUFFERSIZE) + "\n");
}
Die Initialisierung scheint also zu klappen.AudioRecord initialized.
AudioRecord Buffersize: 3017
Jetz kommt das Problem.
Code:
private byte[] doRecord(int duration){
int myAudioRecordBufferSize = myAUDIO_SAMPLE_RATE * 2 * duration;
// 44100Hz * 2 bytes (16bit pcm) * duration (seconds)
byte[] myAudioRecordBuffer = new byte[myAudioRecordBufferSize];
int ret1 = 0; // return value
try {ret1 = myAudioRecord.read(myAudioRecordBuffer, 0, myAudioRecordBufferSize);}
catch (Exception e) {myEditText.append("Exception\n");}
if(ret1 == myAudioRecord.ERROR_INVALID_OPERATION){myEditText.append("Error: Invalid operation.\n");}
if(ret1 == myAudioRecord.ERROR_BAD_VALUE){myEditText.append("Error: Bad value.\n");}
if(ret1 == myAudioRecord.ERROR){myEditText.append("Error.\n");}
myEditText.append("Read Bytes: " + String.valueOf(ret1) + "\n");
myEditText.append("Capture started.\n");
while(myAudioRecord.getRecordingState() == myAudioRecord.RECORDSTATE_RECORDING){}
myEditText.append("Capture completed.\n");
Zur Erklärung:Read Bytes: 0
ret1 im Code ist der Return-Wert der beim Aufruf von myAudioRecord.read(...) zurückgegeben wird. Dieser sollte die Anzahl der eingelesenen Bytes enthalten.
Auch auffällig ist, dass das Ausführen der Mehorde doRecord nur sehr kurz dauert, auch wenn duration (Aufnahmedauer) ein paar Sekunden beträgt.
Wenn ich das Byte-Array auslese bzw. die Summe aller elemente bilde kommt 0 raus.
Ich bin für Vorschläge aller Art dankbar.
Zuletzt bearbeitet: