无法在Android中使用AudioRecord录制

时间:2016-09-22 12:58:09

标签: android audio-recording audiorecord

我正在开发一款Android应用。在我的应用程序中,我需要使用AudioRecord类录制音频。现在我正在创建一个简单的应用程序来测试AudioRecord类,因为我之前从未使用过它。我的简单应用程序是用户点击"记录"按钮开始记录。单击"停止",停止录制。然后"玩"按钮播放录制的音频。但是当我点击"记录"我的应用程序给我错误按钮。

这是我的活动

$scope.print = printFn;
function printFn() { $window.print(); }

单击“录制”按钮时出现错误。

这是Logcat中的错误:

enter image description here

错误是什么?如何正确使用AudioRecord?

1 个答案:

答案 0 :(得分:0)

最后我解决了这个问题。我只需要运行新线程进行录制。

 private void startRecord(){

        File file = new File(Environment.getExternalStorageDirectory(), "test.pcm");

        try {
            file.createNewFile();

            OutputStream outputStream = new FileOutputStream(file);
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
            dataOutputStream = new DataOutputStream(bufferedOutputStream);

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

            audioData = new short[minBufferSize];

            final AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                    11025,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
                    AudioFormat.ENCODING_PCM_16BIT,
                    minBufferSize);

            audioRecord.startRecording();

            Toast.makeText(getBaseContext(),"Recording",Toast.LENGTH_SHORT).show();


            recordingThread = new Thread(new Runnable() {
                public void run() {
                    while(recording){
                        int numberOfShort = audioRecord.read(audioData, 0, minBufferSize);
                        for(int i = 0; i < numberOfShort; i++){
                            try{
                                dataOutputStream.writeShort(audioData[i]);
                            }
                            catch (IOException e)
                            {
                                Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
                            }
                        }
                    }
                }
            }, "AudioRecorder Thread");

            audioRecord.stop();
            dataOutputStream.close();

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

    }