Различия между Sound.length и SoundChannel.position в ActionScript 3 - PullRequest
0 голосов
/ 20 января 2010

Может кто-нибудь сказать мне, почему или что я должен сделать, чтобы решить следующую проблему?

Я загружаю песню, и когда я получаю длину, песня никогда не достигает этого значения.

Вот документ, выданный другим парнем AS3 - SoundChannel.position никогда не достигает Sound.length

А вот и мой код


import flash.display.Sprite;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.events.Event;
import flash.events.IOErrorEvent;


var snd:Sound = new Sound();
var channel:SoundChannel;
var statusTextField:TextField  = new TextField();


    statusTextField.autoSize=TextFieldAutoSize.LEFT;

    var req:URLRequest=new URLRequest("http://localhost/chance_teaser.mp3");

    try {
        snd.load(req);

        channel=snd.play();
    } catch (err:Error) {
        trace(err.message);
    }

    snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
    addEventListener(Event.ENTER_FRAME, enterFrameHandler);
    channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);

    this.addChild(statusTextField);


function enterFrameHandler(event:Event):void {
    var loadTime:Number=snd.bytesLoaded/snd.bytesTotal;
    var loadPercent:uint=Math.round(100*loadTime);
    var estimatedLength:int = Math.ceil(snd.length / (loadTime));
    var playbackPercent:uint = Math.round(100 * (channel.position / estimatedLength));

    statusTextField.text = "Sound file's size is " + snd.bytesTotal + " bytes.\n" 
                                       + "Bytes being loaded: " + snd.bytesLoaded + "\n" 
                                       + "Percentage of sound file that is loaded " + loadPercent + "%.\n"
                                       + "Sound playback is " + playbackPercent + "% complete. \n"
                                       + "Lengh of sound is " + snd.length + "\n"
                                       + "Pos of sound is " + channel.position + "\n";
}

function errorHandler(errorEvent:IOErrorEvent):void {
    statusTextField.text="The sound could not be loaded: "+errorEvent.text;
}

function soundCompleteHandler(event:Event):void {
    statusTextField.text = statusTextField.text + "\n The sound has finished playing.";
    removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
}

1 Ответ

0 голосов
/ 21 января 2010

Это известная проблема во Flash, если вы гуглите вокруг, вы найдете несколько веток по этому вопросу. Насколько я знаю, вам придется либо катиться самостоятельно, либо найти библиотеку, которая сделает это за вас.

Есть несколько проектов, которые обрабатывают аудио (правильно). Вот список из них.

Первое, на что вы можете обратить внимание - это аудио-библиотека с открытым исходным кодом popforge.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...