【问题标题】:MediaPlayer get max aplitudeMediaPlayer 获得最大幅度
【发布时间】:2013-08-19 10:03:07
【问题描述】:

我想在录制AND playing 时在我的录制应用中实现 VU 表。录音的时候知道怎么做,但是播放的时候出现问题。 How can I grab the max amplitude at a given point in time from android MediaPlayer? 我知道有一种方法,因为我看到一些小部件在我的设备上播放音乐时会做同样的事情。我不想使用 android Visualizer 进行渲染,我想让我自己的 VU 表适用于 OS 2.3+ 的设备。基本上,我需要 MediaPlayer 的 getMaxAmplitude。

【问题讨论】:

    标签: android android-mediaplayer audiotrack


    【解决方案1】:

    //首先导入这个库

    import android.media.MediaRecorder;
    
    private MediaRecorder mRecorder = null;
    
    public double getAmplitude() {
            if (mRecorder != null)
                    return  (mRecorder.getMaxAmplitude()/2700.0);
            else
                    return 0;
    
    }
    

    //如果您需要更多详细信息,这里是我的班级,正在做同样的事情

    package com.spaidevelopers.noisealert;
    
    import java.io.IOException;
    import android.media.MediaRecorder;
    
    public class SoundMeter {
            // This file is used to record voice
            static final private double EMA_FILTER = 0.6;
    
            private MediaRecorder mRecorder = null;
            private double mEMA = 0.0;
    
            public void start() {
    
                if (mRecorder == null) {
    
                            mRecorder = new MediaRecorder();
                            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                            mRecorder.setOutputFile("/dev/null"); 
    
                            try {
                                mRecorder.prepare();
                            } catch (IllegalStateException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
    
                           mRecorder.start();
                           mEMA = 0.0;
                    }
            }
    
            public void stop() {
                    if (mRecorder != null) {
                            mRecorder.stop();       
                            mRecorder.release();
                            mRecorder = null;
                    }
            }
    
            public double getAmplitude() {
                    if (mRecorder != null)
                            return  (mRecorder.getMaxAmplitude()/2700.0);
                    else
                            return 0;
    
            }
    
            public double getAmplitudeEMA() {
                    double amp = getAmplitude();
                    mEMA = EMA_FILTER * amp + (1.0 - EMA_FILTER) * mEMA;
                    return mEMA;
            }
    }
    

    【讨论】:

    • OP 正在尝试询问如何为 MediaPlayer 执行此操作
    猜你喜欢
    • 2011-02-24
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多