我是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;
我尝试了以下内容:
我将代码dos.writeShort(buffer[i]);
更改为dos.writeShort(buffer[i]/2);
,然后波形的幅度变为过去的一半,但仍然存在削波失真。我认为在缓冲区获取音频数据之前,数据已被剪切。
我浏览了&#39; audioRecord&#39;的API。 ,但没有麦克风音量的API。
感谢您的帮助!