Files
JiboSDK/lib/animation-editor/audio/audio-playback.js
2026-03-22 03:21:45 +02:00

1 line
2.4 KiB
JavaScript

"use strict";var t=function(t){return t&&t.__esModule?t["default"]:t},i=function(){function t(t,i){for(var a in i){var e=i[a];e.configurable=!0,e.value&&(e.writable=!0)}Object.defineProperties(t,i)}return function(i,a,e){return a&&t(i.prototype,a),e&&t(i,e),i}}(),a=function(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")},e=t(require("./pid-audio-controller.js")),s=t(require("path")),n=function(){function t(i,n,o){a(this,t),this.model=i,this.handleDown=!1,this.wasInRange=!1,this.startTime=o.time/this.model.state.keyframes.framerate;var h=s.resolve(n,"audio",o.value.AudioEvent.file);this.audio=new e(h),this.audio.load(this.onLoaded.bind(this))}return i(t,{startUpdateLoop:{value:function(){this.doUpdate=!0,this.lastUpdate=(new Date).getTime(),this.update()}},stopUpdateLoop:{value:function(){this.doUpdate=!1}},target:{get:function(){var t=this.model.uiState.currentKeyframe/this.model.state.keyframes.framerate;return t-this.startTime}},isInRange:{get:function(){return this.target>-.5&&this.target<this.audio.duration+.5}},onLoaded:{value:function(){this.loaded=!0,this.startUpdateLoop()}},onToggleTimeScrub:{value:function(t){this.handleDown=t,this.loaded&&(t&&this.isInRange?(this.wasInRange=!0,this.audio.playAtTime(this.target),this.audio.reset()):(this.wasInRange=!1,this.audio.stop()))}},onTogglePlay:{value:function(t){this.isPlaying=t,this.loaded&&(this.lastTarget=this.target,t&&this.isInRange?(this.wasInRange=!0,this.audio.playAtTime(this.target)):t||(this.wasInRange=!1,this.audio.stop(this.target)))}},onTimeScrub:{value:function(){if(this.loaded&&this.handleDown){var t=this.isInRange;t&&!this.wasInRange?(this.audio.playAtTime(this.target),this.audio.reset()):!t&&this.wasInRange&&this.audio.stop(),this.wasInRange=t}}},onDataChanged:{value:function(){if(this.loaded&&this.isPlaying){var t=this.isInRange;t&&!this.wasInRange?this.audio.playAtTime(this.target):!t&&this.wasInRange?this.audio.stop():t&&this.lastTarget>this.target&&this.audio.playAtTime(this.target),this.lastTarget=this.target,this.wasInRange=t}}},update:{value:function(){if(this.doUpdate){requestAnimationFrame(this.update.bind(this));var t=(new Date).getTime();if(t-this.lastUpdate<100)return;this.lastUpdate=t,this.handleDown&&this.isInRange&&this.wasInRange?this.audio.target=this.target:this.audio&&this.audio.reset()}}},dispose:{value:function(){this.stopUpdateLoop(),this.audio.dispose(),this.audio=null,this.model=null}}}),t}();module.exports=n;