带剪辑失真的Android音频录制
我是Android新手。我想录制一些音频,然后我创建了一个Android应用程序。它起作用了。 但是它录制的音频太大,容易产生剪辑失真 例如,首先我启动我的应用程序,对我的Android手机说“你好”,我得到了录音文件“recording1.pcm”;然后我从GooglePlay启动另一个录音应用程序,以相同的音量对我的Android手机说“你好”,我得到了录音文件“recording2.pcm” 然后我在试听中打开这两个文件,“recording1.pcm”(由我的应用程序录制)的波形被剪裁,而“recording2.pcm”(由另一个应用程序录制)的波形没有剪裁。(很抱歉,我无法嵌入图像) 录音的核心代码如下:带剪辑失真的Android音频录制,android,audio,recording,clipping,Android,Audio,Recording,Clipping,我是Android新手。我想录制一些音频,然后我创建了一个Android应用程序。它起作用了。 但是它录制的音频太大,容易产生剪辑失真 例如,首先我启动我的应用程序,对我的Android手机说“你好”,我得到了录音文件“recording1.pcm”;然后我从GooglePlay启动另一个录音应用程序,以相同的音量对我的Android手机说“你好”,我得到了录音文件“recording2.pcm” 然后我在试听中打开这两个文件,“recording1.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;
}
}
我尝试了以下方法:
dos.writeShort(缓冲区[I])
todos.writeShort(缓冲区[i]/2)代码>,则波形的振幅变为过去的一半,但仍存在削波失真。我认为在缓冲区获得音频数据之前,数据已经被剪裁了
谢谢你的帮助 也许问题不在于音量,如果你录下非常微弱的声音会发生什么?它也被剪掉了吗?如果我录下一个非常微弱的声音,它就不会被剪掉。我的应用程序的问题是“当声音有点大的时候,很容易产生剪辑失真”。也许问题不在于音量,如果你录制了一个非常微弱的声音,会发生什么?它也被剪掉了吗?如果我录下一个非常微弱的声音,它就不会被剪掉。我的应用程序的问题是“声音稍大时容易产生剪辑失真”
frequency = 16000;
channelConfiguration = AudioFormat.CHANNEL_IN_STEREO;
audioEncoding = AudioFormat.ENCODING_PCM_16BIT;