最近由于需要实现音乐频谱,所以今天就为大家普及一下。关于音乐频谱你需要了解数字信号处理的知识,尤其是FFT的知识。简单说就是把时域上连续的信号(波形)强度转换成离散的频域信号(频谱)。我理解波形就是信号的强度,或者说音响设备的输出的功率,功率高,音量就大。但是歌曲的曲调是不会变的,因为频谱是不会变的。
频谱反映的是这个这个音乐在某个连续时间段内,声音的震动频率。不知道理解的对不对。
本文的音乐频谱实现是仿照Android Api Demo 里的一个例子实现的,需要Android 2.3及以上系统,因为要用到Visualizer 类,这个类只在Android 2.3以上的API才支持。
首先实例化Visualizer,参数SessionId可以通过MediaPlayer的对象获得
visualizer = new Visualizer(mPlayerInstance.getAudioSessionId());
接着设置需要转换的音乐内容长度,专业的说这就是采样,该采样值一般为2的指数倍,如64,128,256,512,1024。这里我设置了128,原因是长度越长,FFT算法运行时间更长。
visualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[0]);
然后为visualizer设置监听器,这样当Capture一段数据后,就会触发两个函数进行处理。设置监听函数为
setDataCaptureListener(OnDataCaptureListener listener, rata,iswave,isfft )
参数解释:
rate, 表示采样的周期,即隔多久采样一次