Android录音带剪辑失真

时间:2017-06-08 11:52:51

标签: android audio recording clipping

我是Android新手。我想录制一些音频,然后我创建了一个Android应用程序。有用 。 但它录制的音频太大,容易产生剪辑失真。

例如,首先我启动我的应用并说“你好”。在我的Android手机上,我收到录音文件' recording1.pcm' ;然后我从GooglePlay开始另一个录音应用程序,说“你好”#39;在同一音量的我的Android手机上,我得到录音文件' recording2.pcm'

然后我在Audition中打开这两个文件,录音的波形为'pcm' (我的应用程序记录)被剪裁,并且记录的波形为2.pcm' (其他应用程序的记录)不会被剪裁。 (对不起,我无法嵌入图片)

录音的核心代码如下:

private class RecordAudio extends AsyncTask<Void, Integer, Void> {
        @Override
        protected Void doInBackground(Void... params) {
            isRecording = true;
            try {
                DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(recordingFile)));
                int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);
                AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.CAMCORDER, frequency, channelConfiguration, audioEncoding, bufferSize);
                short[] buffer = new short[bufferSize * 99];
                audioRecord.startRecording();

                int r = 0;
                while (isRecording) {
                    int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
                    for (int i = 0; i < bufferReadResult; i++) {
                        dos.writeShort(buffer[i]);
                    }

                    publishProgress(new Integer(r));
                    r++;
                }

                audioRecord.stop();
                dos.close();

            } catch (Throwable t) {
                Log.e("AudioRecord", "Recording Failed");
            }
            return null;
        }

    }

我的应用中的其他参数:

frequency = 16000;
channelConfiguration = AudioFormat.CHANNEL_IN_STEREO;
audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

我尝试了以下内容:

  1. 我将代码dos.writeShort(buffer[i]);更改为dos.writeShort(buffer[i]/2);,然后波形的幅度变为过去的一半,但仍然存在削波失真。我认为在缓冲区获取音频数据之前,数据已被剪切。

  2. 我浏览了&#39; audioRecord&#39;的API。 ,但没有麦克风音量的API。

  3. 感谢您的帮助!

0 个答案:

没有答案