月夜忆 2019-05-15 17:56 采纳率: 0%
浏览 2143
已结题

在android中同时调用多个麦克风报错:android.media.MediaRecorder.start(Native Method)

1.问题描述:
在android中同时调用多个麦克风报错:

报错位置mr2.strat():第二个麦克风启动操作时报错。

报错内容:

android.media.MediaRecorder.start(Native Method)

代码如下:

图片说明




图片说明

录音权限和存储权限已授予。


    private void startRecord(){
        if(mr == null){
            File dir = new File(Environment.getExternalStorageDirectory(),"sounds");
            if(!dir.exists()){
                dir.mkdirs();
            }
            String filename = string1.getText().toString();
            SimpleDateFormat df = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");//设置日期格式
            File soundFile = new File(dir,filename+df.format(new Date())+"_MIC"+".amr");
            File soundFile2 = new File(dir,filename+df.format(new Date())+"_VOICE_COMMUNICATION"+".amr");
            if(!soundFile.exists()){
                try {
                    soundFile.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
            if(!soundFile2.exists()){
                try {
                    soundFile2.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }

            mr = new MediaRecorder();
            mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
            mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);   //设置输出格式
            mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);   //设置编码格式
            mr.setOutputFile(soundFile.getAbsolutePath());

            mr2 = new MediaRecorder();
            mr2.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);  //音频输入源
            mr2.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);
            mr2.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
            mr2.setOutputFile(soundFile2.getAbsolutePath());


            try {
                mr.prepare();
                mr.start();//
                mr2.prepare();
                mr2.start();//**在这个位置报错**

            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

    //停止录制,资源释放
    private void stopRecord(){
        if(mr != null){
            mr.stop();
            mr2.stop();

            mr.release();
            mr2.release();

            mr = null;
            mr2 = null;
        }
    }

  • 写回答

2条回答 默认 最新

  • threenewbee 2019-05-15 23:56
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀