Continue implementing sample playback mode

This commit is contained in:
Kay Thomas
2022-08-20 03:02:24 -07:00
parent 3c738925bc
commit 55851a4cd0
2 changed files with 46 additions and 6 deletions

View File

@@ -775,6 +775,7 @@
> >
<v-radio-group <v-radio-group
v-model="sample.playbackMode" v-model="sample.playbackMode"
:disabled="playDisabled"
mandatory mandatory
> >
<v-radio <v-radio
@@ -799,8 +800,9 @@
type="number" type="number"
label="Sporadic Min" label="Sporadic Min"
class="mx-3" class="mx-3"
:disabled="sample.playbackMode != 'sporadic'" :disabled="sample.playbackMode != 'sporadic' || playDisabled"
:rules="[rules.gt(0)]" :rules="[validateSporadicRange(sample)]"
@change="updateSporadicPlayNext"
/> />
<v-text-field <v-text-field
@@ -808,8 +810,9 @@
type="number" type="number"
label="Sporadic Max" label="Sporadic Max"
class="mx-3" class="mx-3"
:disabled="sample.playbackMode != 'sporadic'" :disabled="sample.playbackMode != 'sporadic' || playDisabled"
:rules="[rules.gt(0)]" :rules="[validateSporadicRange(sample)]"
@change="updateSporadicPlayNext"
/> />
</v-row> </v-row>
</v-form> </v-form>

View File

@@ -217,9 +217,12 @@ export default {
this.loadedSamples.forEach(s => { this.loadedSamples.forEach(s => {
if (s.playbackMode === 'sporadic') { if (s.playbackMode === 'sporadic') {
const playNextTime = Math.floor(Math.random() * (s.sporadicMax - s.sporadicMin + 1) + s.sporadicMin) s.playNextTime = Math.floor(Math.random() * (s.sporadicMax - s.sporadicMin + 1) + s.sporadicMin)
this.sporadicInterval = setInterval(() => console.log('Test'), playNextTime) console.log('PLAY NEXT TIME: ', s.playNextTime)
this.players.player(s.id).loop = false
s.sporadicInterval = setInterval(() => this.playSporadicSample(), s.playNextTime * 1000)
} else { } else {
this.players.player(s.id).loop = true
this.players.player(s.id).unsync().sync().start(0) this.players.player(s.id).unsync().sync().start(0)
} }
}) })
@@ -227,6 +230,17 @@ export default {
Tone.Transport.start('+0.1') Tone.Transport.start('+0.1')
}, },
playSporadicSample () {
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)
s.sporadicInterval = setInterval(() => this.playSporadicSample(), s.playNextTime * 1000)
console.log('PLAY NEXT TIME: ', s.playNextTime)
}
})
},
stop () { stop () {
clearInterval(this.transportInterval) clearInterval(this.transportInterval)
Tone.Transport.stop() Tone.Transport.stop()
@@ -235,6 +249,12 @@ export default {
clearInterval(this.timeRemainingInterval) clearInterval(this.timeRemainingInterval)
this.timeRemaining = 0 this.timeRemaining = 0
this.duration = 0 this.duration = 0
this.loadedSamples.forEach(s => {
if (s.playbackMode === 'sporadic') {
clearInterval(s.sporadicInterval)
}
})
}, },
startTimer () { startTimer () {
this.timeRemaining -= 1 this.timeRemaining -= 1
@@ -837,6 +857,23 @@ export default {
this.selectedProfile = this.profileItems.find(p => p.text === this.activeProfile.name) this.selectedProfile = this.profileItems.find(p => p.text === this.activeProfile.name)
this.updateProfile() this.updateProfile()
this.confirmSwitchProfileDialog = false 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)
if (isNaN(min) || isNaN(max) || max <= min || min <= 0 || max <= 0) {
return 'Invalid'
} else {
return true
}
} }
} }
} }