sono
Version:
A simple yet powerful JavaScript library for working with Web Audio
105 lines (94 loc) • 2.63 kB
JavaScript
;
exports.__esModule = true;
exports.default = SoundGroup;
var _group = require('../group');
var _group2 = _interopRequireDefault(_group);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function SoundGroup(context, destination) {
var group = new _group2.default(context, destination);
var sounds = group.sounds;
var playbackRate = 1,
loop = false,
src = void 0;
function getSource() {
if (!sounds.length) {
return;
}
src = sounds.slice(0).sort(function (a, b) {
return b.duration - a.duration;
})[0];
}
var add = group.add;
group.add = function (sound) {
add(sound);
getSource();
return group;
};
var remove = group.remove;
group.remove = function (soundOrId) {
remove(soundOrId);
getSource();
return group;
};
Object.defineProperties(group, {
currentTime: {
get: function get() {
return src ? src.currentTime : 0;
},
set: function set(value) {
this.stop();
this.play(0, value);
}
},
duration: {
get: function get() {
return src ? src.duration : 0;
}
},
// ended: {
// get: function() {
// return src ? src.ended : false;
// }
// },
loop: {
get: function get() {
return loop;
},
set: function set(value) {
loop = !!value;
sounds.forEach(function (sound) {
sound.loop = loop;
});
}
},
paused: {
get: function get() {
// return src ? src.paused : false;
return !!src && src.paused;
}
},
progress: {
get: function get() {
return src ? src.progress : 0;
}
},
playbackRate: {
get: function get() {
return playbackRate;
},
set: function set(value) {
playbackRate = value;
sounds.forEach(function (sound) {
sound.playbackRate = playbackRate;
});
}
},
playing: {
get: function get() {
// return src ? src.playing : false;
return !!src && src.playing;
}
}
});
return group;
}