首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -记录声音和检查声音音量

Android -记录声音和检查声音音量
EN

Stack Overflow用户
提问于 2016-08-29 16:15:23
回答 1查看 1.8K关注 0票数 6

我正在试图找出我的设备是否正确地录制音频(录制的音频的音量并不太低,而且记录的文件实际上有声音)。我试着做的方法是:

开始录制->播放声音->停止录音->获取文件记录的最大音量。

我用来记录声音的代码:

代码语言:javascript
复制
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左右意味着只有麦克风在工作,而播放声音不工作,如果分贝在零度附近,那么麦克风就不能工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-08 00:16:20

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

我已经建立了一个项目,可视化记录声音强度通过条形图。酒吧越高,声音越大,录音的声音越低,酒吧的分贝越低。

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

我之所以建议这样做,是因为我认为这就是你试图在开始录音中实现的-->播放声音-->停止录音-->获得文件记录的最大音量。

当记录文件超过可接受的分贝时,您可以依靠可视化器来监视记录器,而不是每次获得最大音量。

您可以在github上找到源代码。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39210726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档