尝试访问 Actionscript 3 中数组的第一个实例



>我正在尝试在动作脚本 3 中进行 deat 检测。我的想法是在x轴上创建一个点(MovieClips)数组,它代表频谱,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);
   }

}

我不确定你要做什么。

但是如果你想做一个声谱可视化工具,我认为你的方向是正确的。

我跟随你所做的,得到这样的结果:(http://www.imageupload.co.uk/5M3n)这些点会随着音乐跳舞

只需在dot = new Dot();后移动dot.cacheAsBitmap = true;,也可以将其删除。

在 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
}

在点类中:

flash.utils.setTimeout(this.parent.removeChild, 100, this);
// Run this just after added on Stage

相关内容

  • 没有找到相关文章

最新更新