如何为媒体记录器android使用不同的音频编码比特率
在我的应用程序中,我使用媒体录制器进行音频录制。 我想使用不同的比特率32,64128160等如何为媒体记录器android使用不同的音频编码比特率,android,mediarecorder,bitrate,Android,Mediarecorder,Bitrate,在我的应用程序中,我使用媒体录制器进行音频录制。 我想使用不同的比特率32,64128160等 recorder = new MediaRecorder(); /******Audio Source******/ try{ if(audio_source.equals("Camcorder")) recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); els
recorder = new MediaRecorder();
/******Audio Source******/
try{
if(audio_source.equals("Camcorder"))
recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
else if(audio_source.equals("MIC"))
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
else recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
}
catch(Exception e){
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
}
/******Audio Channel******/
try{
if(audio_channel.equalsIgnoreCase("mono")){
recorder.setAudioChannels(1);
}
else if(audio_channel.equalsIgnoreCase("stereo")){
recorder.setAudioChannels(2);
}
}
catch(Exception e){
recorder.setAudioChannels(1);
}
System.out.println(" bitrate -- "+bit_rate);
if (Build.VERSION.SDK_INT >= 10) {
recorder.setAudioSamplingRate(44100);//44100
}
else{
recorder.setAudioSamplingRate(8000);//44100
}
/******AudioEncodingBitRate******/
try{
System.out.println(" in try ..."+bit_rate);
if(bit_rate.equalsIgnoreCase("32")){
recorder.setAudioEncodingBitRate(32000);
}
else if(bit_rate.equalsIgnoreCase("64")){
recorder.setAudioEncodingBitRate(64000);
}
else if(bit_rate.equalsIgnoreCase("96")){
recorder.setAudioEncodingBitRate(96000);
}
else if(bit_rate.equalsIgnoreCase("128")){
recorder.setAudioEncodingBitRate(128000);
}
else if(bit_rate.equalsIgnoreCase("160")){
recorder.setAudioEncodingBitRate(160000);
}
}
catch(Exception e){
recorder.setAudioEncodingBitRate(64);
}
/******File Format******/
//recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
if(format.equals(".mp4"))
{
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
}
else
{
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
}
if (Build.VERSION.SDK_INT >= 10) {
recorder.setAudioSamplingRate(44100);//44100
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
}
else{
recorder.setAudioSamplingRate(8000);//44100
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
}
recorder.setOutputFile(audiofile.getAbsolutePath());
recorder.prepare();
但使用上述所有不同的比特率条件,我并没有得到任何质量上的改变。
如何使用它?根据设置,比特率设置为每秒比特数,并且
Prepare()可以对参数执行额外的检查,以确保指定的比特率是否适用,有时会对传递的比特率进行内部剪裁,以确保音频录制可以根据平台的功能顺利进行
我假设,在这种情况下发生了削波,因为即使每秒160位也低得离谱。根据标准,比特率设置为每秒比特数,并且
Prepare()可以对参数执行额外的检查,以确保指定的比特率是否适用,有时会对传递的比特率进行内部剪裁,以确保音频录制可以根据平台的功能顺利进行
我想,在这种情况下,由于每秒160位的速度都低得离谱,所以就发生了削波。有什么解决方案吗?因为32和160比特率文件的大小和声音都相同?请使用32000这样的实际比特率。有什么解决方案吗?因为32和160比特率文件的大小和声音都相同?请使用类似32000的实际比特率。MPEG4是容器格式。看起来您没有指定要使用的编码器(
setAudioEncoder
)。有一个合理的可能性,默认编码器是AMR_NB,它有一个非常低的最大比特率和一个固定的采样率。我使用过它。AMR_NB.参见更新的代码在这种情况下,请参见我之前评论的第二部分。如果您想要更好的录制质量,请指定不同的编码器,如AAC。但我需要比特率方面的质量。我提供了32,64128等比特率选项…AMR_NB的最大比特率为12.2 kbit/s,固定采样率(8000 Hz)。再一次如果您希望使用质量良好的编码器,请使用其他编码器。MPEG4是容器格式。看起来您没有指定要使用的编码器(setAudioEncoder
)。有一个合理的可能性,默认编码器是AMR_NB,它有一个非常低的最大比特率和一个固定的采样率。我使用过它。AMR_NB.参见更新的代码在这种情况下,请参见我之前评论的第二部分。如果您想要更好的录制质量,请指定不同的编码器,如AAC。但我需要比特率方面的质量。我提供了32,64128等比特率选项…AMR_NB的最大比特率为12.2 kbit/s,固定采样率(8000 Hz)。再一次如果你期望的东西与体面的质量,使用不同的编码器。