画布时间线不与音频同步

画布时间线不与音频同步

问题描述:

因此,我在Adobe Animate中的时间线与CreateJS中调用的音频不同步存在问题。问题在于将帧速率设置为24fps以匹配Adobe Animate时间轴fps。如果帧速率低于24fps,则音频将在时间轴之前完成,导致按钮和视觉效果出现的时间比他们应该晚得多。如果fps速度超过24fps,则音频将在时间线结束前截断。画布时间线不与音频同步

有谁知道为什么或有解决方案来解决这个问题?谢谢。

这没有真正的解决方案。最好的方法是在声音完成时调用可以移动时间范围(或动画片段)的函数。

您可以使用complete回调。 更多信息和样品可以在SoundJS documentation找到。

默认情况下,Animate设置ticker的帧率,但不设置movieclip本身的帧率,它将尝试遵循ticker rate,直到耗费太长时间才能绘制,此时它们变慢。

要解决此问题,除了在代码中设置framerate on the movieclip本身。

这将使影片剪辑掉落任何必要的帧,以保持视频的适当帧速率,这可能会导致动画稍微不连贯,但至少它们将以正确的速度并因此与任何音频播放相匹配。

如果您正在使用的HTML输出文件创建动画,可以在handleComplete功能加入这一行:

function handleComplete(evt) { 
    //This function is always called, irrespective of the content. You can use the variable "stage" after it is created in token create_stage. 
    var queue = evt.target; 
    var ssMetadata = lib.ssMetadata; 
    for(i=0; i<ssMetadata.length; i++) { 
     ss[ssMetadata[i].name] = new createjs.SpriteSheet({"images": [queue.getResult(ssMetadata[i].name)], "frames": ssMetadata[i].frames}) 
    } 
    exportRoot = new lib._MyAnimation_canvas(); 
    stage = new createjs.Stage(canvas); 
    stage.addChild(exportRoot); 
    stage.enableMouseOver();  

    exportRoot.framerate = lib.properties.fps; // <-- ADD THIS LINE 

    //Registers the "tick" event listener. 
    fnStartAnimation = function() { 
     createjs.Ticker.setFPS(lib.properties.fps); 
     createjs.Ticker.addEventListener("tick", stage); 
    } 

更复杂的动画,可能需要这在其他地方进行设置。如果您正在使用您自己的其他js代码,则需要查找哪些动画片段存在问题并将其设置在那里。