Android - هل يمكنني القيام بذلك مع MediaRecord / MediaPlayer بدلا من Audiorecord / Track؟

StackOverflow https://stackoverflow.com/questions/2238714

سؤال

أستخدم حاليا Audiorecord لتسجيل الصوت من ميكروفون لجهاز Android ثم أنابيبها مباشرة إلى AudioTrack التي تلعبها سماعة جهاز Android.

أتساءل هل يمكنني أن أفعل نفس الشيء ولكن مع فئات MediaPlayer و MediaRecorder بدلا من ذلك، أحتاج إلى استخدام ترميز AMR-NB المتوفرة على فئات الوسائط وليس الفئات الصوتية.

مشكلتي مع Mediarecorder و MediaPlayer هي أنه يبدو أنه يجب علي التسجيل إلى ملف ثم تشغيل لهذا الملف؟

هذا ليس ما أريد القيام به، هل هناك على أي حال لدفق الصوت الصوت من أجهزة التصنيع العسكري إلى سماعة الأذن مع فئات الوسائط؟

الرمز الخاص بي باستخدام فئات الصوت هو أدناه، هل من الممكن القيام بشيء ما مع MediaPlayer و MediaRecorder؟

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);
                     }  
    }
}
هل كانت مفيدة؟

المحلول

لا، ليس في هذا الوقت؛ إنه قيود معروف MediaPlayer لم يتم دعم مدخلات دفق البايت. ما زلت بحاجة إلى مصدر إدخال ملف أو URI.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top