UNPKG

sono

Version:

A simple yet powerful JavaScript library for working with Web Audio

96 lines (88 loc) 2.35 kB
import Group from '../group'; export default function SoundGroup(context, destination) { const group = new Group(context, destination); const sounds = group.sounds; let playbackRate = 1, loop = false, src; function getSource() { if (!sounds.length) { return; } src = sounds.slice(0) .sort((a, b) => b.duration - a.duration)[0]; } const add = group.add; group.add = function(sound) { add(sound); getSource(); return group; }; const remove = group.remove; group.remove = function(soundOrId) { remove(soundOrId); getSource(); return group; }; Object.defineProperties(group, { currentTime: { get: function() { return src ? src.currentTime : 0; }, set: function(value) { this.stop(); this.play(0, value); } }, duration: { get: function() { return src ? src.duration : 0; } }, // ended: { // get: function() { // return src ? src.ended : false; // } // }, loop: { get: function() { return loop; }, set: function(value) { loop = !!value; sounds.forEach(function(sound) { sound.loop = loop; }); } }, paused: { get: function() { // return src ? src.paused : false; return !!src && src.paused; } }, progress: { get: function() { return src ? src.progress : 0; } }, playbackRate: { get: function() { return playbackRate; }, set: function(value) { playbackRate = value; sounds.forEach(function(sound) { sound.playbackRate = playbackRate; }); } }, playing: { get: function() { // return src ? src.playing : false; return !!src && src.playing; } } }); return group; }