我目前使用MediaRecorder录制音频以生成.m4a,.mp4,.acc 和.3gp,还可以显示每个录音的输出数据 VisualizerView。
现在我想用PCM做同样的事情。
我尝试使用带有ENCODING_PCM_16BIT输入的MediaRecorder以及几种不同的输出组合。但是这些组合都没有产生原始PCM输出。
我的问题是:如何使用MediaRecorder录制并将结果作为原始PCM输出?
Java代码:
public String mFileName = null;
private String fileName = null;
private String fileNamePcm = null;
String formattedDate = new SimpleDateFormat("MM-dd-yyyy_HH-mm-ss").format(new Date());
fileName = formattedDate;
fileNamePcm = formattedDate;
MediaRecorder mRecorder = new MediaRecorder();
startRecording() {
// Test Format 1 - produced AMR_WB file
mRecorder.setAudioSamplingRate(44100);
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(AudioFormat.CHANNEL_OUT_MONO); // produced AMR_WB file.
mRecorder.setAudioEncoder(AudioFormat.ENCODING_PCM_16BIT);
// Test Format 2 - produced 3gp file
mRecorder.setAudioSamplingRate(44100);
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // produced 3gp file.
mRecorder.setAudioEncoder(AudioFormat.ENCODING_PCM_16BIT);
// Test Format 3 - produced 3gp file
mRecorder.setAudioSamplingRate(44100);
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // did not produced a file.
mRecorder.setAudioEncoder(AudioFormat.ENCODING_PCM_16BIT);
mRecorder.setOutputFile(fileNamePcm); // produced 3gp file. // trying to write raw pcm output to file.
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "TestRecordings" + "/" + fileName + ".3gp";
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "TestRecordings" + "/" + fileNamePcm + ".pcm";
mRecorder.setOutputFile(mFileName);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
} catch (IllegalStateException e) {
e.printStackTrace();
}
mRecorder.start();
}
答案 0 :(得分:0)
要获取原始PCM数据,您将必须使用AudioRecord class-它支持ENCODING_PCM_8BIT,ENCODING_PCM_16BIT和ENCODING_PCM_FLOAT。