Android -记录声音和检查音量

  • 本文关键字:记录 声音 Android android
  • 更新时间 :
  • 英文 :


我试图找出我的设备是否正确录制音频(录制音频的音量不是太低,实际上录制的文件有声音)。我尝试的方法是:

开始录音->播放声音->停止录音->记录文件最大音量

我用来记录声音的代码:

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左右意味着只有麦克风工作,播放声音不,如果分贝大约为零,那么麦克风不工作。

如果录音声音太低或太大,您可以使用可视化器实时可视化。

我建立了一个项目,通过条形图可视化记录声音强度。

这个项目也有内置播放器,允许用户播放他所有的录音。内置播放器还可以显示播放声音数据。

我提出这个建议是因为我认为这是你想要实现的开始录音->播放声音->停止录音->获得文件录制的最大音量。

如果记录文件被记录在可接受的分贝以上,而不是每次都获得最大音量,您可以依靠可视化器来监视记录器。

你可以在github上找到源代码

https://github.com/hiteshsahu/Android-Audio-Recorder-Visualization-Master

最新更新