本教程是向大家介绍Flash制作音乐频谱,教程比较基础,转发过来,希望大家喜欢!花了3天做的音乐频谱的效果,截图的效果:

包括了5个类:
MusicControl类,不多说了,用来控制音乐的,包括音乐的载入和播放时的控制等。
ID3Control类,用来提取音乐文件的相关信息的类,循环的显示各种信息,提取的中文显示乱码,这里用一个函数进行更正即可:
复制代码function EncodeUtf8(str:String):String {
var oriByteArr:ByteArray = new ByteArray();
oriByteArr.writeUTFBytes(str);
var tempByteArr:ByteArray = new ByteArray();
for (var i = 0; i
if (oriByteArr == 194) {
tempByteArr.writeByte(oriByteArr[i+1]);
i++;
} else if (oriByteArr == 195) {
tempByteArr.writeByte(oriByteArr[i+1] + 64);
i++;
} else {
tempByteArr.writeByte(oriByteArr);
}
}
tempByteArr.position = 0;
return tempByteArr.readMultiByte(tempByteArr.bytesAvailable,"chinese");
}
Spectrum类,管理和显示频谱的类,从MusicControl类里取出频谱的信息,注意MusicControl类里的
SoundMixer.computeSpectrum(_spectrumArray,true);
里第二个参数 true 表示取出的是频谱,而 false 表示取出的是波形。
/*
类功能:显示频谱。
*/
package net.cdipan.spectrum{
import flash.display.Sprite;
import flash.utils.ByteArray;
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;
public class Spectrum extends Sprite {
//记录频谱的数组
private var _spectrum:Array;
//记录显示的类型
private var _type:int;
//用于显示频谱的精灵对象
private var _showSpectrum:Sprite;
//用于显示柱状频谱的精灵对象
private var _show1:Sprite;
//用于显示波浪频谱的精灵对象
private var _show2:Sprite;
//用于显示波形频谱的精灵对象
private var _show3:Sprite;
//柱形对象
private var _column:Column;
//波形对象
private var _waveform:Waveform;
public function Spectrum():void {
_spectrum = new Array(512);
_showSpectrum = new Sprite();
_showSpectrum.x = 22;
_showSpectrum.y = 18;
_show1 = new Sprite();
_show2 = new Sprite();
_show3 = new Sprite();
this.addChild(_showSpectrum);
//创建柱状频谱
createColumn(64,3,1,_show1);
createColumn(256,1,0,_show2);
//创建波形频谱
_waveform = new Waveform();
_show3.addChild(_waveform);
_showSpectrum.addChild(_show1);
}
//获取频谱数组
public function getSpectrum(byteArray:ByteArray):void {
for (var i:int=0; i<512; i++) {
_spectrum = byteArray.readFloat();
}
//将频谱数据传送给柱状和波浪的精灵实例










