Я никогда раньше этим не занимался, но, насколько я знаю, ситуация такова.
Если вы работаете с Flash Player 10, вам повезло, иначе может показаться, что вам придется вычислять спектр во время воспроизведения звука. Как и в ссылке Криса, вы можете получить звуковые данные из звукового объекта в ByteArray
с Sound.extract()
(только FP10). Затем вы читаете ByteArray
, читаете значения и рисуете что-то на экране в соответствии со значениями.
На FP9 вам придется воспроизводить звук на SoundChannel
и читать левый и правый пики канала во время его воспроизведения. Я нашел этот пример кода для этой ( ссылка )
var snd:Sound = new Sound();
var req:URLRequest = new URLRequest("your track url");
var channel:SoundChannel;
var bytes:ByteArray = new ByteArray();
snd.load(req);
this.addEventListener(Event.ENTER_FRAME, enterFrameEvent);
channel = snd.play(0,3);
function enterFrameEvent(event:Event):void {
SoundMixer.computeSpectrum(bytes, true,0);
// bytes has 512 values 0-255 leftchannel 256-512 right channel
for (var i:Number = 0; i < 256; i++) {
val = bytes.readFloat();
}
}
Короче, попробуйте придерживаться FP10, и если вы сможете это сделать (без ограничений клиента), вы сможете извлечь класс Waveform
прямо из ссылки Криса и использовать его. Похоже, что класс также рисует фактическую форму волны (поверх извлечения аудиоданных), но вы можете либо переместить чертеж в его собственный класс, либо изменить код, чтобы получить собственный вид формы волны.