import Ember from 'ember'; import ReadinessMixin from 'linx/mixins/readiness'; import WebAudioNodeMixin from 'linx/mixins/web-audio/node'; import { isValidNumber } from 'linx/lib/utils'; export default Ember.ObjectProxy.extend( WebAudioNodeMixin, ReadinessMixin('isAudioLoaded'), { // params audioBuffer: null, // WebAudioApi.AudioBuffer // implement web-audio/node node: null, outputNode: null, // implmement readiness isAudioLoaded: Ember.computed.bool('audioBuffer'), start(when, offset, duration) { // Ember.Logger.log('currentTime', this.get('audioContext.currentTime')); // Ember.Logger.log('startSource', when, offset); const args = [when, offset, duration].filter(isValidNumber); // web audio buffer sources can only be played once // therefore we must recreate source on each playback this.stop(); const node = this.createBufferSource(); node.start(...args); },
CONTROL_TYPE_MID_BAND, CONTROL_TYPE_HIGH_BAND, CONTROL_TYPE_DELAY_WET, CONTROL_TYPE_DELAY_CUTOFF, CONTROL_TYPE_FILTER_HIGHPASS_CUTOFF, CONTROL_TYPE_FILTER_HIGHPASS_Q, CONTROL_TYPE_FILTER_LOWPASS_CUTOFF, CONTROL_TYPE_FILTER_LOWPASS_Q, } from 'linx/mixins/playable-arrangement/automatable-clip/control'; import { isValidNumber } from 'linx/lib/utils'; export default DS.Model.extend( PlayableArrangementMixin, DependentRelationshipMixin('fromTrackAutomationClips'), DependentRelationshipMixin('toTrackAutomationClips'), ReadinessMixin('isTransitionReady'), { title: DS.attr('string'), description: DS.attr('string'), beatCount: DS.attr('number', { defaultValue: 16 }), transitionClip: DS.belongsTo('mix/transition-clip'), fromTrackClip: Ember.computed.reads('transitionClip.fromTrackClip'), toTrackClip: Ember.computed.reads('transitionClip.toTrackClip'), fromTrackAutomationClips: DS.hasMany('mix/transition/from-track-automation-clip'), toTrackAutomationClips: DS.hasMany('mix/transition/to-track-automation-clip'), // implementing PlayableArrangement audioContext: Ember.computed.reads('transitionClip.audioContext'), outputNode: Ember.computed.reads('transitionClip.outputNode.content'),