Domanda

Ho avuto un problema con l'utilizzo di AudioRecord per Android. Ho letto tanto come posso trovare on-line a questo proposito, ma io non riesco a ottenere un buon inizializzazione. Ho provato l'Android 2.2 emulatore, emulatore 1.5 e il mio telefono, un HTC Incredible in esecuzione Froyo. Gli emulatori e il mio telefono non riescono inizializzazione.

Ho provato i tassi di campionamento di 8000, 11025 e 44100, i formati di CHANNEL_IN_MONO / STEREO e CHANNEL_CONFIGURATION_MONO / STEREO, 8bit e la codifica a 16 bit (8 bit rende il getMinBufferSize fallire), e AudioSource di MIC e DEFAULT. Tutti i risultati nel test variabile diventando 0 dopo l'esecuzione di uno stato get (inizializzazione fallito).

Sembra che da tutto ciò che ho letto che questo dovrebbe correttamente inizializzare l'oggetto. Ho giocato in giro con il moltiplicatore sul buflen, alla sua gamma da 512 (il risultato della funzione) per 102400 perché avevo sentito che i dispositivi HTC richiedono qualcosa al di sopra 8192.

Per testare il mio problema ho fatto un nuovo piccolo progetto, che ricrea il mio problema nel modo più semplice possibile. Tiro fuori le costanti necessarie in interi locali quindi eseguire il costruttore e il metodo di accesso getState per verificare se ha funzionato.

package com.example.audiorecordtest;

import android.app.Activity;
import android.os.Bundle;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;

public class audioRecordTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        int freq =8000;
        int chan = AudioFormat.CHANNEL_IN_MONO;
        int enc  = AudioFormat.ENCODING_PCM_16BIT;
        int src  = MediaRecorder.AudioSource.MIC;
        int buflen = AudioRecord.getMinBufferSize(freq, chan, enc);
        AudioRecord ar = new AudioRecord(src,freq,chan,enc,20*buflen);
        int test = ar.getState();
    }
}
È stato utile?

Soluzione

- Modifica -

Si prega di vedere la risposta di Bill.

- modifica end -

Forse si dovrebbe verificare se è stato acquistato l'autorizzazione corretta. per esempio. È necessario per ottenere android.permission.VIBRATE nel file AndroidManifest.xml se è necessario vibrare il dispositivo.

Altri suggerimenti

Credo che significa che è necessario il permesso RECORD_AUDIO nel manifesto:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

che ha lavorato per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top