2010-02-10 15 views
5

Şu anda bir Android cihazının mikrofonundan ses kaydetmek ve daha sonra bir Android cihazındaki Kulaklıktan çalınan bir AudioTrack'e ses aktarmak için AudioRecord kullanıyorum.Android - Bunu AudioRecord/Track yerine MediaRecord/MediaPlayer ile yapabilir miyim?

Aynı şeyi MediaPlayer ve MediaRecorder sınıfları ile yapabildiğimi merak ediyorum; bunun yerine, Audio sınıflarında değil, Medya sınıflarında bulunan AMR-NB kodlamasını kullanmam gerekiyor.

MediaRecorder ve MediaPlayer'daki sorunum, bir dosyaya kaydetmem ve sonra bu dosya için oynatmam gerekiyormuş gibi görünüyor mu?

Yapmak istediğim bu değil, yine de Medya sınıflarıyla birlikte Mic'ten Kulaklık'a ses sesini yayınlamak var mı?

Ses sınıflarını kullanan kodum aşağıda, MediaPlayer ve MediaRecorder ile aynı şeyi yapmak mümkün mü?

public class Record extends Thread 
{ 

    static final int bufferSize = 200000; 
    final short[] buffer = new short[bufferSize]; 
    short[] readBuffer = new short[bufferSize]; 

    public void run() { 
     isRecording = true; 
     android.os.Process.setThreadPriority 
     (android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); 

     int buffersize = AudioRecord.getMinBufferSize(11025, 
     AudioFormat.CHANNEL_CONFIGURATION_MONO, 
     AudioFormat.ENCODING_PCM_16BIT); 


        arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 
            11025, 
            AudioFormat.CHANNEL_CONFIGURATION_MONO, 
            MediaRecorder.AudioEncoder.AMR_NB, 
            buffersize); 
        atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 
            11025, 
            AudioFormat.CHANNEL_CONFIGURATION_MONO, 
            MediaRecorder.AudioEncoder.AMR_NB, 
            buffersize, 
            AudioTrack.MODE_STREAM); 

        Log.d("AUDIO", "sample rate = : " + arec.getSampleRate()); 

        atrack.setPlaybackRate(11025); 

        byte[] buffer = new byte[buffersize]; 
        arec.startRecording(); 
        atrack.play(); 

        while(isRecording) { 
          arec.read(buffer, 0, buffersize); 
          atrack.write(buffer, 0, buffer.length); 
        } 
    } 
} 

cevap

3

Hayır, şu an için değil; MediaPlayer'un iyi bilinen bir sınırlaması, bayt akış girişlerinin desteklenmediği anlamına gelir. Hala bir dosyaya veya URI giriş kaynağına ihtiyacınız var.

+0

Ses sınıflarını yukarıdaki gibi kullanmalı ve Ses'i kendim kodlamalı mıyım? –

+0

Maalesef evet. Neyse ki, açık kaynak kodekleri oldukça kolay bir şekilde bulabilir ve kodlama için C (NDK) veya Java (Dalvik/SDK) kullanma seçeneğine sahip olursunuz. –

İlgili konular