Continue edit sample implementation

This commit is contained in:
Kevin Thomas
2022-04-11 21:38:46 -07:00
parent d59bb03b13
commit 37dc916dcc
3 changed files with 142 additions and 33 deletions

View File

@@ -81,7 +81,6 @@ router.get('/samples', (req, res) => {
id, id,
name, name,
fade_in as fadeIn, fade_in as fadeIn,
fade_out as fadeOut,
loop_points_enabled as loopPointsEnabled, loop_points_enabled as loopPointsEnabled,
loop_start as loopStart, loop_start as loopStart,
loop_end as loopEnd loop_end as loopEnd
@@ -97,7 +96,6 @@ router.get('/samples', (req, res) => {
sample.id = row.id sample.id = row.id
sample.name = row.name sample.name = row.name
sample.fadeIn = row.fadeIn sample.fadeIn = row.fadeIn
sample.fadeOut = row.fadeOut
sample.loopPointsEnabled = row.loopPointsEnabled === 1 sample.loopPointsEnabled = row.loopPointsEnabled === 1
sample.loopStart = row.loopStart sample.loopStart = row.loopStart
sample.loopEnd = row.loopEnd sample.loopEnd = row.loopEnd
@@ -119,7 +117,6 @@ router.get('/samples/:sampleId', (req, res) => {
id, id,
name, name,
fade_in as fadeIn, fade_in as fadeIn,
fade_out as fadeOut,
loop_points_enabled as loopPointsEnabled, loop_points_enabled as loopPointsEnabled,
loop_start as loopStart, loop_start as loopStart,
loop_end as loopEnd loop_end as loopEnd
@@ -134,7 +131,6 @@ router.get('/samples/:sampleId', (req, res) => {
sample.id = row.id sample.id = row.id
sample.name = row.name sample.name = row.name
sample.fadeIn = row.fadeIn sample.fadeIn = row.fadeIn
sample.fadeOut = row.fadeOut
sample.loopPointsEnabled = row.loopPointsEnabled === 1 sample.loopPointsEnabled = row.loopPointsEnabled === 1
sample.loopStart = row.loopStart sample.loopStart = row.loopStart
sample.loopEnd = row.loopEnd sample.loopEnd = row.loopEnd
@@ -144,4 +140,47 @@ router.get('/samples/:sampleId', (req, res) => {
}) })
}) })
router.put('/samples/:sampleId', (req, res) => {
if (!req.user) {
return res.sendStatus(401)
}
db.serialize(() => {
db.get('SELECT user FROM samples WHERE id = ?', [req.params.sampleId], (err, row) => {
if (err) {
logger.error(err)
return res.sendStatus(500)
}
if (row.user.toString() !== req.user.id) {
return res.sendStatus(401)
}
})
db.run(`UPDATE samples SET
name = ?,
fade_in = ?,
fade_out = ?,
loop_points_enabled = ?,
loop_start = ?,
loop_end = ?,
WHERE id = ?`, [
req.body.name,
req.body.fadeIn,
req.body.loopPointsEnabled,
req.body.loopStart,
req.body.loopEnd,
req.params.sampleId
],
(err) => {
if (err) {
logger.error(err)
return res.sendStatus(500)
}
return res.sendStatus(200)
})
})
})
module.exports = router module.exports = router

View File

@@ -691,7 +691,7 @@
class="mx-3 my-3 mb-5" class="mx-3 my-3 mb-5"
:disabled="playDisabled || allSamples.length === 0" :disabled="playDisabled || allSamples.length === 0"
v-on="on" v-on="on"
@click="resetEditSampleForm" @click="openEditSampleForm"
> >
Edit Samples Edit Samples
</v-btn> </v-btn>
@@ -714,13 +714,18 @@
return-object return-object
label="Samples" label="Samples"
class="mx-3" class="mx-3"
@change="loadEditSample"
/> />
</v-row> </v-row>
<v-row>
<p>Sample Length (Seconds): {{ previewSampleLength }} </p>
</v-row>
<v-row> <v-row>
<v-checkbox <v-checkbox
v-model="useLoopPoints" v-model="useLoopPoints"
:disabled="playDisabled" :disabled="samplePreviewPlaying"
label="Use Loop Points" label="Use Loop Points"
class="mx-3" class="mx-3"
/> />
@@ -730,28 +735,43 @@
<v-text-field <v-text-field
v-model="loopStart" v-model="loopStart"
type="number" type="number"
label="Loop Start" label="Loop Start Time"
class="mx-3" class="mx-3"
:disabled="!useLoopPoints" :disabled="!useLoopPoints || samplePreviewPlaying"
:rules="[rules.gt(-1)]" :rules="[rules.gt(-1)]"
@change="updatePreviewSamplePlayerLoopPoints"
/> />
<v-text-field <v-text-field
v-model="loopEnd" v-model="loopEnd"
type="number" type="number"
label="Loop End" label="Loop End Time"
class="mx-3" class="mx-3"
:disabled="!useLoopPoints" :disabled="!useLoopPoints || samplePreviewPlaying"
:rules="[rules.gt(-1), rules.lt(previewSampleLength)]"
@change="updatePreviewSamplePlayerLoopPoints"
/>
</v-row>
<v-row>
<v-text-field
v-model="fadeIn"
type="number"
label="Fade In Time"
class="mx-3"
:disabled="samplePreviewPlaying"
:rules="[rules.gt(-1)]" :rules="[rules.gt(-1)]"
@change="updatePreviewSamplePlayerFadeIn"
/> />
</v-row> </v-row>
<v-row justify="center"> <v-row justify="center">
<v-btn <v-btn
class="mx-3 mt-3" class="mx-3 mt-3"
:loading="previewSampleLoading"
@click="previewSample" @click="previewSample"
> >
Preview Sample {{ previewSampleButtonText }}
</v-btn> </v-btn>
</v-row> </v-row>
</v-container> </v-container>
@@ -760,7 +780,7 @@
<v-spacer /> <v-spacer />
<v-btn <v-btn
text text
@click="editSampleDialog = false" @click="closeEditSampleForm"
> >
Cancel Cancel
</v-btn> </v-btn>

View File

@@ -47,13 +47,18 @@ export default {
uploadSampleDialog: false, uploadSampleDialog: false,
addSampleDialog: false, addSampleDialog: false,
editSampleDialog: false, editSampleDialog: false,
editSampleName: '',
useLoopPoints: false, useLoopPoints: false,
loopStart: 0, loopStart: 0,
loopEnd: 0, loopEnd: 0,
fadeIn: 0,
samplePreviewPlaying: false, samplePreviewPlaying: false,
selectedEditSample: {}, selectedEditSample: {},
sampleItems: [], sampleItems: [],
isEditSampleValid: false, isEditSampleValid: false,
previewSampleButtonText: 'Preview Sample',
previewSampleLoading: true,
previewSampleLength: 0,
checkedSamples: [], checkedSamples: [],
sampleName: '', sampleName: '',
isSampleUploadValid: false, isSampleUploadValid: false,
@@ -89,7 +94,8 @@ export default {
this.filter = new Filter() this.filter = new Filter()
this.tremolo = new Tremolo() this.tremolo = new Tremolo()
this.lfo = new LFO() this.lfo = new LFO()
this.samplePreviewPlayer = new Player() this.samplePreviewPlayer = new Player().toDestination()
this.samplePreviewPlayer.loop = true
this.players = new Players() this.players = new Players()
this.populateProfileItems(0) this.populateProfileItems(0)
this.populateSampleItems() this.populateSampleItems()
@@ -130,7 +136,6 @@ export default {
this.loadedSamples.forEach(s => { this.loadedSamples.forEach(s => {
this.players.player(s.id).loop = true this.players.player(s.id).loop = true
this.players.player(s.id).fadeIn = s.fadeIn this.players.player(s.id).fadeIn = s.fadeIn
this.players.player(s.id).fadeOut = s.fadeOut
if (s.loopPointEnabled) { if (s.loopPointEnabled) {
this.players.player(s.id).setLoopPoints(s.loopStart, s.loopEnd) this.players.player(s.id).setLoopPoints(s.loopStart, s.loopEnd)
} }
@@ -444,10 +449,16 @@ export default {
this.$refs.uploadSampleForm.reset() this.$refs.uploadSampleForm.reset()
} }
}, },
resetEditSampleForm () { openEditSampleForm () {
if (this.$refs.editSampleForm) { if (this.sampleItems.length > 0) {
this.$refs.editSampleForm.reset() this.selectedEditSample = this.sampleItems[0]
} }
this.loadEditSample()
},
closeEditSampleForm () {
this.editSampleDialog = false
this.previewSampleLoading = true
}, },
openImportDialog () { openImportDialog () {
this.profileMoreDialog = false this.profileMoreDialog = false
@@ -545,28 +556,67 @@ export default {
this.exportDialog = false this.exportDialog = false
}, },
previewSample () { updatePreviewSamplePlayerFadeIn () {
this.samplePreviewPlayer.toDestination() this.samplePreviewPlayer.fadeIn = this.fadeIn
},
updatePreviewSamplePlayerLoopPoints () {
if (this.loopStart >= 0 && this.loopEnd <= this.previewSampleLength) {
this.samplePreviewPlayer.setLoopPoints(this.loopStart, this.loopEnd)
}
},
loadEditSample () {
this.previewSampleLoading = true
this.$http.get('/samples/'.concat(this.selectedEditSample.id))
.then(async response => {
if (response.status === 200) {
const sample = response.data.sample
if (this.samplePreviewPlaying) { this.fadeIn = sample.fadeIn
this.samplePreviewPlayer.stop() if (sample.loopPointsEnabled) {
this.samplePreviewPlaying = false this.loopStart = sample.loopStart
} else { this.loopEnd = sample.loopEnd
this.$http.get('/samples/'.concat(this.selectedEditSample.id))
.then(async response => {
if (response.status === 200) {
const sample = response.data.sample
await this.samplePreviewPlayer.load('/samples/' + sample.user + '_' + sample.name) this.samplePreviewPlayer.setLoopPoints(this.loopStart, this.loopEnd)
this.samplePreviewPlayer.loop = true
this.samplePreviewPlayer.start()
this.samplePreviewPlaying = true
} }
})
this.samplePreviewPlayer.fadeIn = this.fadeIn
await this.samplePreviewPlayer.load('/samples/' + sample.user + '_' + sample.name)
this.previewSampleLength = this.samplePreviewPlayer.buffer.duration
this.previewSampleLoading = false
}
})
},
previewSample () {
if (this.samplePreviewPlaying) {
this.samplePreviewPlaying = false
this.previewSampleButtonText = 'Preview Sample'
this.samplePreviewPlayer.stop()
} else {
this.samplePreviewPlaying = true
this.previewSampleButtonText = 'Stop'
this.samplePreviewPlayer.start()
} }
}, },
editSample () { editSample () {
this.$http.put('/samples/'.concat(this.selectedEditSample.id), {
name: this.editSampleName,
fadeIn: this.fadeIn,
loopPointsEnabled: this.loopPointEnabled,
loopStart: this.loopStart,
loopEnd: this.loopEnd
}).then(response => {
if (response.status === 200) {
this.infoSnackbarText = 'Sample Saved'
this.infoSnackbar = true
}
})
.catch(() => {
this.errorSnackbarText = 'Error Saving Sample'
this.errorSnackbar = true
})
} }
} }
} }