다음 예제에서는
SoundMixer.computeSpectrum()
메서드를 사용하여 각 프레임과 함께 움직이는 사운드 파형 차트를 표시합니다.
import flash.display.Graphics;
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.net.URLRequest;
const PLOT_HEIGHT:int = 200;
const CHANNEL_LENGTH:int = 256;
var snd:Sound = new Sound();
var req:URLRequest = new URLRequest("bigSound.mp3");
snd.load(req);
var channel:SoundChannel;
channel = snd.play();
addEventListener(Event.ENTER_FRAME, onEnterFrame);
snd.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
var bytes:ByteArray = new ByteArray();
function onEnterFrame(event:Event):void
{
SoundMixer.computeSpectrum(bytes, false, 0);
var g:Graphics = this.graphics;
g.clear();
g.lineStyle(0, 0x6600CC);
g.beginFill(0x6600CC);
g.moveTo(0, PLOT_HEIGHT);
var n:Number = 0;
// left channel
for (var i:int = 0; i < CHANNEL_LENGTH; i++)
{
n = (bytes.readFloat() * PLOT_HEIGHT);
g.lineTo(i * 2, PLOT_HEIGHT - n);
}
g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
g.endFill();
// right channel
g.lineStyle(0, 0xCC0066);
g.beginFill(0xCC0066, 0.5);
g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
for (i = CHANNEL_LENGTH; i > 0; i--)
{
n = (bytes.readFloat() * PLOT_HEIGHT);
g.lineTo(i * 2, PLOT_HEIGHT - n);
}
g.lineTo(0, PLOT_HEIGHT);
g.endFill();
}
function onPlaybackComplete(event:Event)
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
이 예제는 사운드 파일을 로드하여 재생한 다음, 사운드 재생 동안
onEnterFrame()
메서드를 트리거할
Event.ENTER_FRAME
이벤트를 수신합니다.
onEnterFrame()
메서드는 사운드 웨이브 데이터를
bytes
ByteArray 객체에 저장하는
SoundMixer.computeSpectrum()
메서드를 호출하는 것으로 시작됩니다.
사운드 파형은 벡터 드로잉 API를 사용하여 그려집니다.
for
루프는 왼쪽 스테레오 채널을 나타내는 처음 256개 데이터 값을 찾은 후
Graphics.lineTo()
메서드를 사용하여 각각의 위치 사이에 차례로 선을 그립니다. 두 번째
for
루프는 다음 세트의 256개 값을 순환한 후 이 값들을 역순으로(오른쪽에서 왼쪽으로) 배치합니다. 결과 파형 형태는 다음 이미지와 같이 흥미로운 거울 이미지 효과를 나타낼 수 있습니다.