diff --git a/src/components/NoisePage.vue b/src/components/NoisePage.vue index 5695979..96e21f3 100644 --- a/src/components/NoisePage.vue +++ b/src/components/NoisePage.vue @@ -802,7 +802,6 @@ class="mx-3" :disabled="sample.playbackMode != 'sporadic' || playDisabled" :rules="[validateSporadicRange(sample)]" - @change="updateSporadicPlayNext" /> @@ -1009,7 +1007,7 @@ diff --git a/src/components/noise.js b/src/components/noise.js index 4a00322..ba21f94 100644 --- a/src/components/noise.js +++ b/src/components/noise.js @@ -128,6 +128,9 @@ export default { settings.push(s.reverbPreDelay) settings.push(s.reverbDecay) settings.push(s.reverbWet) + settings.push(s.playbackMode) + settings.push(s.sporadicMin) + settings.push(s.sporadicMax) }) return settings @@ -188,6 +191,8 @@ export default { this.players.player(s.id).fadeIn = s.fadeIn if (s.loopPointsEnabled) { this.players.player(s.id).setLoopPoints(s.loopStart, s.loopEnd) + } else { + this.players.player(s.id).setLoopPoints(0, this.players.player(s.id).buffer.duration) } this.players.player(s.id).volume.value = s.volume @@ -217,10 +222,13 @@ export default { this.loadedSamples.forEach(s => { if (s.playbackMode === 'sporadic') { - s.playNextTime = Math.floor(Math.random() * (s.sporadicMax - s.sporadicMin + 1) + s.sporadicMin) - console.log('PLAY NEXT TIME: ', s.playNextTime) this.players.player(s.id).loop = false - s.sporadicInterval = setInterval(() => this.playSporadicSample(), s.playNextTime * 1000) + + const maxInt = parseInt(s.sporadicMax, 10) + const minInt = parseInt(s.sporadicMin, 10) + const rand = Math.floor(Math.random() * (maxInt - minInt + 1) + minInt) + + this.initialSporadicPlayInterval = setInterval(() => this.playSporadicSample(), rand * 1000) } else { this.players.player(s.id).loop = true this.players.player(s.id).unsync().sync().start(0) @@ -231,13 +239,19 @@ export default { Tone.Transport.start('+0.1') }, playSporadicSample () { + clearInterval(this.initialSporadicPlayInterval) + this.loadedSamples.forEach(s => { if (s.playbackMode === 'sporadic') { - this.players.player(s.id).unsync().sync().start() clearInterval(s.sporadicInterval) - s.playNextTime = Math.floor(Math.random() * (s.sporadicMax - s.sporadicMin + 1) + s.sporadicMin) + + this.players.player(s.id).unsync().sync().start() + + const maxInt = parseInt(s.sporadicMax, 10) + const minInt = parseInt(s.sporadicMin, 10) + s.playNextTime = Math.floor(Math.random() * (maxInt - minInt + 1) + minInt) + s.sporadicInterval = setInterval(() => this.playSporadicSample(), s.playNextTime * 1000) - console.log('PLAY NEXT TIME: ', s.playNextTime) } }) }, @@ -250,6 +264,7 @@ export default { this.timeRemaining = 0 this.duration = 0 + clearInterval(this.initialSporadicPlayInterval) this.loadedSamples.forEach(s => { if (s.playbackMode === 'sporadic') { clearInterval(s.sporadicInterval) @@ -858,14 +873,6 @@ export default { this.updateProfile() this.confirmSwitchProfileDialog = false }, - updateSporadicPlayNext () { - this.loadedSamples.forEach(s => { - if (s.playbackMode === 'sporadic') { - clearInterval(s.sporadicInterval) - s.playNextTime = Math.floor(Math.random() * (s.sporadicMax - s.sporadicMin + 1) + s.sporadicMin) - } - }) - }, validateSporadicRange (sample) { const min = parseInt(sample.sporadicMin, 10) const max = parseInt(sample.sporadicMax, 10)