2013-01-10 18 views
6

Android uygulamasında, .3gp kodlu bir ses dosyası olarak kaydettiğim kullanıcının sesini kaydediyorum.3gp/AMR-NB ses formatının ham değerleri nasıl okunur?

Ne yapmak isteyen bir ses sinyali analiz gerçekleştirmek için, ses örneği temsil eden, yani sekans x [n], yukarı bu açıktır.

Bunu yapmak için nasıl gidebileceğimi bilen var mı?

cevap

5

3gp veya diğer dosyaları kod çözmek için Android MeidiaCodec sınıfını kullanabilirsiniz. Dekoder çıkışı standart PCM bayt dizisidir. DSP gibi daha fazla işlem için bu çıktı bayt dizisini oynatmak veya devam etmek için bu çıkışı doğrudan Android AudioTrack sınıfına gönderebilirsiniz. DSP algoritmasını uygulamak için bayt dizisi float/double dizisine dönüştürülmelidir. Bayt dizisi çıktısını almak için birkaç adım vardır. aşağıdaki gibi benzeri Özetle görünüyor:

  1. örneğini MediaCodec

    String mMime = "audio/3gpp" 
    MediaCodec mMediaCodec = MediaCodec.createDecoderByType(mMime); 
    
  2. medya codec'i Medya biçimi oluşturma ve yapılandırmak

    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. MediaCodec (Yakalama çıkışı bir iş parçacığı içine işlemek Should)

    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); 
    

Bu Google IO talk burada alakalı olabilir.

+0

Başlamak için çok teşekkür ederim. Bu kodun bir kısmını bu hafta içinde test edip uygulayacağım ve muhtemelen cevabınızı kabul ediyorum. – JDS

+0

3gp dosyasının tüm inputStream'lerini çalan AudioTrack'in nasıl ekleneceğini söyleyebilir misiniz? –

+0

Verileri MediaCodec'ten bayt dizisine okuduktan sonra, AudioTrack sınıf yazma yöntemi kullanılarak çalınabilir. Lütfen buraya yazım yöntemi imzası konusuna bakın, http://developer.android.com/reference/android/media/AudioTrack.html –