亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 辦公 > Flash > 正文

Flash制作音樂頻譜

2020-07-17 13:08:40
字體:
來源:轉載
供稿:網友

本教程是向大家介紹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();
}
//將頻譜數據傳送給柱狀和波浪的精靈實例
for (var j:int=0; j<64; j++) {
var temp1:Column = _show1.getChildByName("column_"+j.toString()) as Column;
temp1.getSpectrum((_spectrum[j*4]+_spectrum[j*4+1]+_spectrum[j*4+2]+_spectrum[j*4+3]+_spectrum[j*4+256]+_spectrum[j*4+257]+_spectrum[j*4+258]+_spectrum[j*4+259])*12.5);
}
for (var m:int=0; m<256; m++) {
var temp2:Column = _show2.getChildByName("column_"+m.toString()) as Column;
temp2.getSpectrum((_spectrum[m]+_spectrum[m+256])*50);
}
//將頻譜數據傳送給波形的精靈實例
_waveform.getSpectrum(_spectrum);
}
//創建柱狀的精靈對象
private function createColumn(f_num:int,f_width:int,f_space:int,target:Sprite):void {
for (var i:int=0; i
_column = new Column();
_column.name = "column_"+i.toString();
_column.width = f_width;
_column.x = i*(f_width+f_space);
target.addChild(_column);
}
}
//更改樣式(type 為 0 時顯示柱形,為 1 時顯示波浪,為 2 時顯示波形)
public function changeType(type:int):void {
switch (type) {
case 0 :
if (_showSpectrum.contains(_show1)) {
_showSpectrum.removeChild(_show1);
}
if (_showSpectrum.contains(_show2)) {
_showSpectrum.removeChild(_show2);
}
if (_showSpectrum.contains(_show3)) {
_showSpectrum.removeChild(_show3);
}
_showSpectrum.addChild(_show1);
break;
case 1 :
if (_showSpectrum.contains(_show1)) {
_showSpectrum.removeChild(_show1);
}
if (_showSpectrum.contains(_show2)) {
_showSpectrum.removeChild(_show2);
}
if (_showSpectrum.contains(_show3)) {
_showSpectrum.removeChild(_show3);
}
_showSpectrum.addChild(_show2);
break;
case 2 :
if (_showSpectrum.contains(_show1)) {
_showSpectrum.removeChild(_show1);
}
if (_showSpectrum.contains(_show2)) {
_showSpectrum.removeChild(_show2);
}
if (_showSpectrum.contains(_show3)) {
_showSpectrum.removeChild(_show3);
}
_showSpectrum.addChild(_show3);
break;
}
}
}
}
Column類,條形的頻譜類,在Spectrum類里柱狀樣式中創建了 64 個,而波浪樣式中創建了 256 個。
/*
類功能:柱狀的頻譜。
*/
package net.cdipan.spectrum{
import flash.display.*;
import flash.geom.*;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class Column extends Sprite {
//頂部小方塊顏色
private const square_color:uint = 0xffffff;
//頂部顏色
private const top_color:uint = 0xffffff;
//中間顏色
private const middle_color:uint = 0x8cdcff;
//底部顏色
private const bottom_color:uint = 0x07f7ff;
//背景精靈對象
private var BG_Sp:Sprite;
//遮罩精靈對象
private var mask_Sp:Sprite;
//小方塊精靈對象
private var square_Sp:Sprite;
//記錄上次的頻譜的值,如果比這次的高就減一,否則將這次的設為此值
private var oldNum:Number;
//計時器對象
private var myTimer:Timer;
//記錄小方塊是否可以下落
private var canDrop:Boolean;
public function Column():void {
BG_Sp = new Sprite();
drawGradualRect();
addChild(BG_Sp);
mask_Sp = new Sprite();
drawMaskRect();
addChild(mask_Sp);
square_Sp = new Sprite();
drawSquareRect();
square_Sp.y = 99;
square_Sp.addEventListener(Event.ENTER_FRAME, _enterframe);
addChild(square_Sp);
//設置遮罩
BG_Sp.mask = mask_Sp;
oldNum = 0;
myTimer = new Timer(200, 1);
myTimer.addEventListener("timer", onTimer);
canDrop = false;
}
//使小方塊下落
private function _enterframe(e:Event):void {
if (canDrop) {
square_Sp.y += 4;
}
if (square_Sp.y > 99) {
square_Sp.y = 99;
}
if (square_Sp.y < -1) {
square_Sp.y = -1;
}
}
//繪制漸變圖形
private function drawGradualRect():void {
var fillType:String = GradientType.RADIAL;
var colors:Array = [top_color, middle_color, bottom_color];
var alphas:Array = [1, 1, 1];
var ratios:Array = [0x00, 0x7f, 0xff];
BG_Sp.graphics.beginGradientFill(fillType, colors, alphas, ratios);
BG_Sp.graphics.drawRect(0,-1,100,1);
BG_Sp.rotation = 90;
}
//繪制遮罩圖形
private function drawMaskRect():void {
mask_Sp.graphics.lineStyle();
mask_Sp.graphics.beginFill(0);
mask_Sp.graphics.drawRect(0,-100,1,100);
mask_Sp.graphics.endFill();
mask_Sp.y = 100;
}
//繪制小方塊
private function drawSquareRect():void {
square_Sp.graphics.lineStyle();
square_Sp.graphics.beginFill(square_color);
square_Sp.graphics.drawRect(0,0,1,1);
square_Sp.graphics.endFill();
}
//接收頻譜數據
public function getSpectrum(num:Number):void {
if (oldNum > num) {
oldNum -= 7;
} else {
oldNum = num;
if (oldNum != 0) {
//調用小方塊運動的函數
squareMove(oldNum);
}
}
if (oldNum<0) {
oldNum = 0;
}
mask_Sp.height = oldNum;
}
//控制小方塊運動的函數
private function squareMove(num:Number):void {
if (square_Sp.y > 99 - oldNum) {
square_Sp.y = 99 - num;
canDrop = false;
myTimer.reset();
myTimer.start();
}
}
public function onTimer(e:TimerEvent):void {
canDrop = true;
}
}
}
Waveform類,波形的類,用一條線條來繪制的,加入了逐漸消失的軌跡的效果。
/*
類功能:波形。
*/
package net.cdipan.spectrum{
import flash.display.*;
import flash.filters.*;
import flash.geom.*;
public class Waveform extends Sprite {
//線條顏色
private const line_color:uint = 0x07f7ff;
//創建用來繪制線條的精靈對象
private var Line:Sprite;
//用于逐漸消失的軌跡的位圖對象
private var bmpData:BitmapData;
private var bmp:Bitmap;
//濾鏡的各項參數
private var colorM:ColorMatrixFilter;
private var blur:BlurFilter;
private var r:Rectangle;
private var point;
//通過數字使濾鏡處理慢一步
private var num:int;
public function Waveform():void {
Line = new Sprite();
bmpData = new BitmapData(256,100,true,0);
bmp = new Bitmap(bmpData);
colorM = new ColorMatrixFilter([.98,0,0,0,0,0,.98,0,0,0,0,0,.98,0,0,0,0,0,.5,0]);
blur = new BlurFilter(7,7,BitmapFilterQuality.LOW);
r = new Rectangle(0,0,256,100);
p = new Point(0,0);
//添加顯示對象
this.blendMode=BlendMode.ADD;
this.addChild(bmp);
this.addChild(Line);
}
//接收頻譜數據
public function getSpectrum(array:Array):void {
if (num%2 == 0) {
var m:Number = 0;
for (var j=0; j<256; j+=2) {
m += array[j];
}
if (m != 0) {
//停止播放時不繪制圖像,就只會顯示一條直線
bmpData.draw(this);
}
bmpData.applyFilter(bmpData,r,p,colorM);
bmpData.applyFilter(bmpData,r,p,blur);
}
num++;
Line.graphics.clear();
Line.graphics.lineStyle(1,line_color,100);
for (var i=0; i<256; i+=2) {
var n:Number = array*50;
if (i != 0) {
Line.graphics.lineTo(i,50-n);
} else {
Line.graphics.moveTo(0,50-n);
}
}
}
}
}

教程結束,以上就是Flash制作音樂頻譜過程,希望對大家有所幫助,謝謝大家觀看本教程!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一在线视频| 国产精品丝袜久久久久久高清| 欧美老少配视频| 欧美成人精品影院| 亚洲第一av网站| 日韩中文理论片| 国产精品999999| 亚洲国产欧美自拍| 日韩精品一二三四区| 国产精品福利在线观看网址| 精品久久久久久亚洲精品| 亲爱的老师9免费观看全集电视剧| 亚洲精品大尺度| 九九热这里只有精品6| 亚洲精品91美女久久久久久久| 国产精品国产福利国产秒拍| 欧美一区三区三区高中清蜜桃| 亚洲无av在线中文字幕| 国产精品av在线播放| 久久久久久久久久久久av| 中文字幕亚洲一区二区三区五十路| 久久深夜福利免费观看| 性欧美xxxx视频在线观看| 日韩精品欧美国产精品忘忧草| 国产美女久久精品香蕉69| 久久精品这里热有精品| 成人午夜激情免费视频| 欧美一区二区大胆人体摄影专业网站| 国产欧美一区二区三区在线看| 亚洲视频在线观看网站| 国内精品久久久久影院优| 俺去啦;欧美日韩| 国产69精品99久久久久久宅男| 国产精品都在这里| 国产一区二区三区欧美| 国产欧美久久久久久| 国产精品亚洲网站| 国内精品一区二区三区四区| 66m—66摸成人免费视频| 日本一区二区在线播放| 美女啪啪无遮挡免费久久网站| 欧美xxxx14xxxxx性爽| 91精品在线观看视频| 亚洲男人天堂网站| 琪琪第一精品导航| 国产精品久久久久久久久久东京| 中文字幕日韩精品在线观看| 精品国产自在精品国产浪潮| 日韩在线观看免费av| 欧美另类精品xxxx孕妇| 亚洲欧美在线一区| 日韩av不卡在线| 清纯唯美日韩制服另类| 欧美精品久久久久久久久久| 一区二区三区四区视频| 亚洲男人的天堂在线| 日本免费一区二区三区视频观看| 欧美日韩国产成人高清视频| 欧美久久久精品| 米奇精品一区二区三区在线观看| 国产成人亚洲综合91精品| 国产精品永久在线| 中文日韩在线观看| 久久综合电影一区| 亚洲免费精彩视频| 日韩欧美高清在线视频| 91精品视频一区| 庆余年2免费日韩剧观看大牛| 91精品在线播放| 欧美日韩国产成人在线观看| 欧美日韩一二三四五区| 91精品视频在线看| 国产精品一区二区久久久久| 国产精品久久久久久久电影| 亚洲视频在线观看| 亚洲精品视频在线观看视频| 欧美日韩国产在线播放| 精品国产一区二区在线| 精品国产一区二区三区四区在线观看| 亚洲精品天天看| 日韩欧美中文免费| 日韩亚洲精品电影| www.亚洲男人天堂| 中文字幕免费国产精品| 97在线视频免费观看| 亚洲精品成人网| 久久久免费观看| 精品久久香蕉国产线看观看亚洲| 亚洲精品美女在线| 国产精品v片在线观看不卡| 亚洲九九九在线观看| 在线精品视频视频中文字幕| 亚洲精品动漫100p| 成人免费大片黄在线播放| 少妇精69xxtheporn| xxav国产精品美女主播| 九九热视频这里只有精品| 日韩av资源在线播放| 亚洲第一视频在线观看| 日产精品久久久一区二区福利| 欧美日韩高清区| 亚洲精品av在线| 日韩精品久久久久久福利| 51精品国产黑色丝袜高跟鞋| 久久高清视频免费| 亚洲第一视频在线观看| 日韩成人在线观看| 中文字幕精品一区久久久久| 精品国产一区久久久| 欧美激情精品久久久久久大尺度| 国产精品v日韩精品| 91网站在线看| 久久精品亚洲国产| 68精品国产免费久久久久久婷婷| 精品国内亚洲在观看18黄| 亚洲精品国产综合区久久久久久久| 亚洲天堂视频在线观看| 亚洲精品一区在线观看香蕉| 一区二区成人av| 亚洲精品丝袜日韩| 亚洲美女福利视频网站| 欧美夫妻性生活视频| 亚洲成人激情小说| 精品偷拍各种wc美女嘘嘘| 中国日韩欧美久久久久久久久| 欧美精品制服第一页| 成人在线免费观看视视频| 成人中文字幕在线观看| 日韩视频欧美视频| 日本欧美一级片| 欧美理论在线观看| 亚洲男女自偷自拍图片另类| 日韩精品一区二区三区第95| 91精品国产91久久久久福利| 国产亚洲人成网站在线观看| 在线视频免费一区二区| 国产精品久久久久久网站| 欧洲日本亚洲国产区| 美女撒尿一区二区三区| 夜色77av精品影院| 国产精品高清在线| 91精品在线影院| 久久国产精彩视频| 成人福利视频网| 97国产精品视频人人做人人爱| 欧美另类高清videos| 亚洲国产成人精品久久| 日韩av在线免费看| 亚洲电影免费观看高清完整版在线| 国产成人涩涩涩视频在线观看| 欧美高清视频免费观看| 草民午夜欧美限制a级福利片| 在线视频欧美性高潮| 91精品国产91久久| 日韩欧美999| 狠狠色噜噜狠狠狠狠97| 国产成人精品午夜| 日韩精品亚洲精品| 精品国产欧美成人夜夜嗨| 亚洲精品电影久久久| 亚洲人a成www在线影院| 国产精品电影在线观看| 色与欲影视天天看综合网| 国产福利精品在线|