Как записать звук с каждого микрофона на телефоне Android в отдельные файлы одновременно? - PullRequest
0 голосов
/ 25 июня 2019

В Android Studio я могу создать экземпляр mediaRecorder и записать звук, затем я могу создать экземпляр mediaRecorder с другим источником звука и записывать звук. Проблема в том, что у меня не может быть двух mediaRecorder одновременно (или я так думаю).

В дополнение к mediaRecorder я рассмотрел использование двух разных объектов AudioRecord, но, похоже, кто-то здесь пытался сделать это около месяца назад, и он тоже не работает. Я посмотрел на mediaMuxer, который может быть ключом к этому, но я новичок в концепции мультиплексирования и не знаю, как реализовать что-то в этом роде.

// not to professional standards  
btnRecord.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if(checkPermissionFromDevice()) {

                pathsave = Environment.getExternalStorageDirectory()
                        .getAbsolutePath() + "/"
                        + UUID.randomUUID().toString() + 
"_audio_record.3gp";
                setupMediaRecorder();
                try {
                    mediaRecorder.prepare();
                    mediaRecorder.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                btnPlay.setEnabled(false);
                btnStop.setEnabled(false);
                btnStopRecord.setEnabled(true);

                Toast.makeText(MainActivity.this, "Recording...", 
Toast.LENGTH_SHORT).show();
                }
                else{
                    requestPermission();
                }
            }
        });

//------------------------------------------------------------------------

btnRecord2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if(checkPermissionFromDevice()) {

                pathsave2 = Environment.getExternalStorageDirectory()
                        .getAbsolutePath() + "/"
                        + UUID.randomUUID().toString() + 
"_audio_record.3gp";
                setupMediaRecorder2();
                try {
                    mediaRecorder2.prepare();
                    mediaRecorder2.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                btnPlay2.setEnabled(false);
                btnStop2.setEnabled(false);
                btnStopRecord2.setEnabled(true);

                Toast.makeText(MainActivity.this, "Recording...", 
Toast.LENGTH_SHORT).show();
            }
            else{
                requestPermission();
            }
        }
    });
 //-----------------------------------------------------------------------

 private void setupMediaRecorder() {
    mediaRecorder = new MediaRecorder();
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    mediaRecorder.setOutputFile(pathsave);

}

//------------------------------------------------------------------------

private void setupMediaRecorder2() {
    mediaRecorder2 = new MediaRecorder();
    mediaRecorder2.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder2.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mediaRecorder2.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    mediaRecorder2.setOutputFile(pathsave2);

}

Я могу записывать, останавливать запись и воспроизводить оба носителя записи по отдельности. Когда я пытаюсь записать оба одновременно, приложение вылетает. Любая помощь будет принята с благодарностью.

...