[현재 접속자 현황]
액션스크립트 유저 갤러리 입니다.

액션스크립트 유저 갤러리 입니다.
글수 17
액션스크립트 3.0을 이용한 사운드 시각화
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
[SWF(width=800, height=600, backgroundColor = 0xffffff)]
public class AsExamSoundVisualize extends Sprite
{
private var soundChannel:SoundChannel;
private var soundObj:Sound = new Sound();
public function AsExamSoundVisualize()
{
loadSound();
addEventHandlers();
}
private function loadSound():void
{
var req:URLRequest = new URLRequest("http://okgosu.net/book/asbook/sound-exam.mp3");
soundObj.load(req);
soundChannel = soundObj.play();
}
private function addEventHandlers():void
{
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
soundChannel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
}
// 사운드가 플레이되는 동안 스펙프럼 데이터를 추출하여 화면에 그려줌
private function enterFrameHandler(event:Event):void
{
var bytes:ByteArray = new ByteArray();
SoundMixer.computeSpectrum(bytes, false, 0);
drawWaves(bytes);
}
// 사운드 스펙트럼 데이터를 바이트배열로 받아서 그래프로 그림
private function drawWaves(bytes:ByteArray):void
{
var WAVE_HEIGHT:int = 300;
var CHANNEL_COUNT:int = 512
var byteNumber:Number = 0;
this.graphics.clear();
this.graphics.moveTo(0, WAVE_HEIGHT);
for (var i:int = 0; i < CHANNEL_COUNT; i++)
{
if(i < 256) // 왼쪽 256개 채널은 파란색으로
{
this.graphics.lineStyle(1, 0x0000FF);
}
else // 오른쪽 256 개 채널은 빨간색으로
{
this.graphics.lineStyle(1, 0xFF0000);
}
byteNumber = (bytes.readFloat() * WAVE_HEIGHT);
this.graphics.lineTo(i , WAVE_HEIGHT - byteNumber);
}
}
private function soundCompleteHandler(event:Event):void
{
stage.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
}
}







okgosu
최근 답변 댓글