Попытка получить доступ к первому экземпляру массива в Actionscript 3
Я пытаюсь сделать обнаружение мертвых в ActionScript 3. Моя идея состоит в том, чтобы создать массив точек (MovieClips) на оси x, который представляет частотный спектр, SoundMixer.computeSpectrum(bytes, true, 0); установлен в true. Как мне получить доступ к первому точечному экземпляру моего массива. Затем я хочу проверить его максимальное значение в каждом текущем кадре и сравнить его с последним значением. Я думаю, что мне нужно установить порог, и когда значение находится в пределах порога, вызовите ритм.... Я потерян, кто-нибудь может направить меня в правильном направлении...
Заранее спасибо.
var snd: Sound = new Sound();
var req: URLRequest = new URLRequest("mySong.mp3");
snd.load(req);
var channel: SoundChannel;
channel = snd.play();
addEventListener(Event.ENTER_FRAME, onEnterFrame);
snd.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
const CHANNEL_LENGTH: int = 256;
const BUFFER_LENGTH: int = 512;
var dot:Dot;
dot.cacheAsBitmap = true;
var myArray:Array = new Array();
var bytes:ByteArray = new ByteArray();
function onEnterFrame(event: Event): void
{
SoundMixer.computeSpectrum(bytes, true, 0);
for (var i:int = 0; i < CHANNEL_LENGTH; i+=8) // channel_length = 256
{
var sampleValue:Number = bytes.readFloat();
dot = new Dot();
dot.x = i * 2;
dot.y = sampleValue * 250; //50 + (i * 30)
addChild(dot);
myArray.push(dot);
}
}
1 ответ
Я не уверен, что именно ты собираешься делать.
Но если вы хотите сделать визуализатор спектра звука, я думаю, что ваше направление верное.
Я следую за тем, что ты делаешь, и получаю такой результат: ( http://www.imageupload.co.uk/5M3n) Эти точки будут танцевать под музыку
просто двигайся dot.cacheAsBitmap = true;
после dot = new Dot();
или вы можете удалить его.
и в классе Dot, не забудьте избавиться от себя через некоторое время.
Но на самом деле мне не нужно использовать myArray
совсем.
Вот мой код:
import flash.events.Event;
var snd: Sound = new Sound();
var req: URLRequest = new URLRequest("mySong.mp3");
snd.load(req);
var channel: SoundChannel;
channel = snd.play();
addEventListener(Event.ENTER_FRAME, onEnterFrame);
snd.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
const CHANNEL_LENGTH: int = 256;
const BUFFER_LENGTH: int = 512;
var dot:Dot;
var myArray:Array;
var bytes:ByteArray = new ByteArray();
function onEnterFrame(event: Event): void
{
SoundMixer.computeSpectrum(bytes, true, 0);
myArray = [];
for (var i:int = 0; i < CHANNEL_LENGTH; i+=8) // channel_length = 256
{
var sampleValue:Number = bytes.readFloat();
dot = new Dot();
dot.cacheAsBitmap = true;
dot.x = i * 2;
dot.y = sampleValue * stage.StageHeight;
addChild(dot);
myArray.push(dot);
}
var firstElement:Dot = myArray.length>0?myArray[0]:null;
if(firstElement)
{
handleWithFirstElement(firstElement);
}
}
function onPlaybackComplete(e:Event):void
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
function handleWithFirstElement(ele:Dot):void
{
//your code
}
И в классе Dot:
flash.utils.setTimeout(this.parent.removeChild, 100, this);
// Run this just after added on Stage