我试图找出我的设备是否正确录制音频(录制的音频音量不是太低,实际录制的文件有声)。我尝试这样做的方式是:
开始录制 - >播放声音 - >停止录制 - >获取文件记录的最大音量
我用来录制声音的代码:
public void playSound() {
File myDataPath = new File(getActivity().getFilesDir().getAbsolutePath()
+ File.separator + ".CheckAudio");
if (!myDataPath.exists())
myDataPath.mkdirs();
recordFile = myDataPath + File.separator + "Recording_" + new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()) + ".mp3";
am.setStreamVolume(AudioManager.STREAM_RING, am.getStreamMaxVolume(AudioManager.STREAM_RING), 0);
am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, am.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION), 0);
Uri defaultRingtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
try {
md = new MediaRecorder();
md.setAudioSource(MediaRecorder.AudioSource.MIC);
md.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
md.setOutputFile(recordFile);
md.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
md.prepare();
md.start();
} catch (IllegalStateException | IOException e) {
recording = false;
removeItem("Unable to record audio, please try again."); // (Show toast)
return;
}
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(getActivity(), defaultRingtoneUri);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
mediaPlayer.prepare();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
md.stop();
md.release();
mediaPlayer.release();
mediaPlayer = null;
// get recordfile volume
}
});
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
removeItem("Unable to play audio");
sound = false;
}
}
但是,我无法找到如何分析创建的mp3文件并检查它是否为空(来自声音),是否有库或其他方式?
我希望你们明白我想要达到的目标,因为我的英语非常糟糕,谢谢。
编辑:(更多解释) 如果您在录制麦克风声音时播放声音(铃声或其他内容),录制的分贝应为90分贝左右。意味着播放声音和麦克风,但如果分辨率大约为30,则表示只有麦克风正在工作,并且播放的声音不是,如果分贝大约为零则麦克风不工作。
答案 0 :(得分:1)
如果录制的声音太低或太大,您可以使用可视化工具来实时显示。
我已经建立了一个项目,通过条形图可视化录制声音强度。条形音响越大,录制的声音就会降低条形低分贝。
此项目还有inapp播放器,允许用户播放他的所有录音。内置播放器还可以显示播放声音数据。
我建议这是因为我认为这是你想要实现的目标 开始录制 - >播放声音 - >停止录制 - >获取文件记录的最大音量。
如果录制文件的录制时间超过了可接受的分贝,那么每次你都可以依靠可视化工具来监视录制器,而不是获得最大音量。
您可以在github上找到源代码
https://github.com/hiteshsahu/Android-Audio-Recorder-Visualization-Master