2013-01-10 51 views
6

Nella mia applicazione Android sto registrando la voce dell'utente che ho salvato come file audio codificato .3gp.Come leggere i valori grezzi del formato audio 3gp/AMR-NB?

Quello che voglio fare è aprirlo, cioè la sequenza x [n] che rappresenta il campione audio, al fine di eseguire alcune analisi del segnale audio.

Qualcuno sa come potrei fare questo?

risposta

5

È possibile utilizzare la classe Android MeidiaCodec per decodificare 3gp o altri file. L'uscita del decodificatore è un array di byte PCM standard. È possibile inviare direttamente questo output alla classe Android AudioTrack per riprodurre o continuare con questo array di byte di uscita per ulteriori elaborazioni come DSP. Per applicare l'algoritmo DSP, l'array di byte deve essere trasformato in float/double array. Ci sono diversi passaggi per ottenere l'output dell'array di byte. In sintesi sembra che come segue:

  1. Instantiate MediaCodec

    String mMime = "audio/3gpp" 
    MediaCodec mMediaCodec = MediaCodec.createDecoderByType(mMime); 
    
  2. Creare formato multimediale e configurare codec multimediale

    MediaFormat mMediaFormat = new MediaFormat(); 
    mMediaFormat = MediaFormat.createAudioFormat(mMime, 
        mMediaFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE), 
        mMediaFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT)); 
    
    mMediaCodec.configure(mMediaFormat, null, null, 0); 
    mMediaCodec.start(); 
    
  3. uscita Acquisizione da MediaCodec (deve elaborare all'interno di un filo)

    MediaCodec.BufferInfo buf_info = new MediaCodec.BufferInfo(); 
    int outputBufferIndex = mMediaCodec.dequeueOutputBuffer(buf_info, 0); 
    byte[] pcm = new byte[buf_info.size]; 
    mOutputBuffers[outputBufferIndex].get(pcm, 0, buf_info.size); 
    

Questo Google IO talk potrebbe essere rilevante qui.

+0

Grazie mille per avermi iniziato. Verificherò e implementerò parte di questo codice entro questa settimana e probabilmente accetterò la tua risposta. – JDS

+0

Puoi dirmi come aggiungere AudioTrack che riprodurrà l'intero inputStream del file 3gp? –

+0

Dopo aver letto i dati nell'array di byte da MediaCodec, è possibile riprodurli utilizzando il metodo di scrittura classe AudioTrack. Si prega di consultare la firma del metodo di scrittura qui, http://developer.android.com/reference/android/media/AudioTrack.html –

Problemi correlati