- uri = Uri.parse(Mp3Path);
- mMedia = MediaPlayer.create(this, uri);
调用Android SDK 2.3以上版本中一个工具包android.media.audiofx.Visualizer,程序需要做的就是实例化一个Visualizer对象,通过获得一个实例化的音频媒体类对象的SessionId,并设置该对象的需要转换的音乐内容长度和采样率。最后为visualizer设置监听器setDataCaptureListener(OnDataCaptureListener listener, rate, iswave, isfft),当采样得到的数据长度达到之前设置的内容长度后,将会触发两个函数,在这两个函数中即可分别得到音频信号的时域信号数据以及经过快速傅里叶变换(FFT)处理的频域信号数据,均为字节数组形式(即:byte[])。
- mWaveView = new VisualizerView(this);
- mFFtView = new VisualizerFFTView(this);
- final int maxCR = Visualizer.getMaxCaptureRate();
- mVisualizer = new Visualizer(mMedia.getAudioSessionId());
- mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
- mVisualizer.setDataCaptureListener(
- new Visualizer.OnDataCaptureListener()
- {
- public void onWaveFormDataCapture(Visualizer visualizer,
- byte[] waveform, int samplingRate)
- {
- mWaveView.updateVisualizer(waveform);
- }
- public void onFftDataCapture(Visualizer visualizer,
- byte[] fft, int samplingRate)
- {
- mFFtView.updateVisualizer(fft);
- }
- }, maxCR / 2, true, true);
需要注意的是:停止播放时,除了release播放类对象外,还要释放Visualizer对象。
音频信号FFT效果图: