Во-первых, «всего сэмплов»! = Sound.bytesLoaded! = Sound.length.Все они совершенно разные.
В приведенном ниже коде я включил несколько других слушателей событий, чтобы попытаться проиллюстрировать различия.Прослушивание «Event.SOUND_COMPLETE» мало что скажет вам, во-первых, потому что он будет срабатывать только тогда, когда звук перестал воспроизводиться, и во-вторых, потому что доказано, что он очень ненадежен.Использование Event.OPEN также мало о чем говорит, так как файл еще не начал загружаться, и никакая информация не может быть получена или рассчитана.
Вы можете использовать событие ProgressEvent или EnterFrame для мониторингазагрузка звука и чтение свойства length, но для определения общего количества сэмплов вам также необходимо знать, какая частота сэмплирования использовалась для создания MP3 и является ли она стереофонической или монофонической.Как только вы узнаете эти вещи, вы можете легко получить длину образца файла, умножив длину на частоту выборки.
Надеюсь, этот пример использования поможет -
import flash.net.URLRequest;
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
var sound:Sound;
var soundChannel:SoundChannel;
var sampleRate:Number = 44.1;
var totalSamples:int;
init();
function init( ):void {
sound = new Sound();
sound.load( new URLRequest( "http://bit.ly/GYSOYj") );
sound.addEventListener( Event.OPEN, soundOpen );
sound.addEventListener( Event.COMPLETE, soundComplete );
soundChannel = sound.play();
soundChannel.addEventListener(Event.SOUND_COMPLETE, scComplete);
}
function soundOpen( e:Event ):void{
trace( "OPEN:", sound.length );
}
function soundComplete( e:Event ):void{
trace( "COMPLETE:", sound.length );
totalSamples = sound.length * sampleRate;
trace( "SAMPLES", totalSamples);
}
function scComplete( e:Event):void{
trace( "sound is complete" );
}
edit: как предложеноможно использовать as3swf ( bit.ly / HdhVcW ) - но только вы можете решить, стоит оно того или нет.Не представляю, что ты пытаешься построить, что потребовало бы всего этого ..