【问题标题】:Return amplitude of the mic input when not recording不录音时麦克风输入的返回幅度
【发布时间】:2011-05-21 16:25:00
【问题描述】:

我有以下代码,需要能够在手机上收听麦克风并使用该值在某种可视化器上以图形方式显示:

Timer micTimer = new Timer();
micTimer.schedule(new TimerTask(){
    @Override
    public void run(){
        int x = MediaRecorder.getAudioSourceMax();
        Log.v("Timer", "" + x);
    }
}, 0, 100);

我知道这可能远非错误。稍后在课程中,我使用 AudioRecorder 对象来录制声音以进行一些后期处理。在这里,我不想记录任何东西,只是在可视化器上显示声音。此代码中的日志仅每 100 毫秒输出一次数字 6。它与自动调整增益有关吗?如果是这样,我该如何解决?

【问题讨论】:

    标签: java android audio


    【解决方案1】:

    好吧,我很抱歉说山姆,但你无法从麦克风获得振幅没有录音。我开发了一个与此非常相似的应用程序。您必须开始录制,调用 getMaxAmplitude() 函数(它将返回 0),稍等片刻,然后再次调用它,它将返回自上次调用该函数以来的最大幅度。查看NoiseAlert app. 它真的帮助了我。

    另外,附带说明一下,在我的研究中,我发现使用 MediaRecorder 对象更容易,因为它没有自动增益;你会得到麦克风实际“听到”的内容。

    【讨论】:

    • 我尝试了 NoiseAlert 应用程序,并且在我自己的应用程序中使用了该代码。 getMaxAmplitude() 返回最大值,只是将我的手指靠近麦克风,或者只是说话……我设备中的麦克风坏了吗?录制的音频听起来不错
    【解决方案2】:

    您的代码中的日志确实只是每 100 毫秒输出一次数字 6。你应该做出这样的改变:

    mediaRecorder = new MediaRecorder();
    //...
    //...
    //int x = MediaRecorder.getAudioSourceMax(); change to:
    int x = mediaRecorder.getMaxAmplitude();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多