From 3c738925bc759cbb4bc9baea64def50b6016c96a Mon Sep 17 00:00:00 2001 From: Kevin Thomas Date: Fri, 19 Aug 2022 22:28:36 -0700 Subject: [PATCH] Start implementing sample playback mode --- server/boot/db.js | 3 + server/routes/profiles.js | 30 ++++-- src/components/NoisePage.vue | 203 ++++++++++++++++++++++++----------- src/components/noise.js | 17 ++- 4 files changed, 181 insertions(+), 72 deletions(-) diff --git a/server/boot/db.js b/server/boot/db.js index 85281f8..f4f653b 100644 --- a/server/boot/db.js +++ b/server/boot/db.js @@ -79,6 +79,9 @@ module.exports = function () { db.run('ALTER TABLE profiles_samples ADD COLUMN reverb_pre_delay REAL DEFAULT 0') db.run('ALTER TABLE profiles_samples ADD COLUMN reverb_decay REAL DEFAULT 0') db.run('ALTER TABLE profiles_samples ADD COLUMN reverb_wet INTEGER DEFAULT 0') + db.run('ALTER TABLE profiles_samples ADD COLUMN playback_mode TEXT DEFAULT "continuous"') + db.run('ALTER TABLE profiles_samples ADD COLUMN sporadic_min INTEGER DEFAULT 30') + db.run('ALTER TABLE profiles_samples ADD COLUMN sporadic_max INTEGER DEFAULT 300') db.run('PRAGMA user_version = 3') } diff --git a/server/routes/profiles.js b/server/routes/profiles.js index 9f76a55..b6532ef 100644 --- a/server/routes/profiles.js +++ b/server/routes/profiles.js @@ -66,15 +66,21 @@ router.post('/profiles', (req, res) => { reverb_enabled, reverb_pre_delay, reverb_decay, - reverb_wet) - VALUES (?, ?, ?, ?, ?, ?, ?)`, [ + reverb_wet, + playback_mode, + sporadic_min, + sporadic_max) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ profileID, s.id, s.volume, s.reverbEnabled, s.reverbPreDelay, s.reverbDecay, - s.reverbWet + s.reverbWet, + s.playbackMode, + s.sporadicMin, + s.sporadicMax ], (err) => { if (err) { @@ -223,15 +229,21 @@ router.put('/profiles/:profileId', (req, res) => { reverb_enabled, reverb_pre_delay, reverb_decay, - reverb_wet) - VALUES (?, ?, ?, ?, ?, ?, ?)`, [ + reverb_wet, + playback_mode, + sporadic_min, + sporadic_max) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [ req.params.profileId, s.id, s.volume, s.reverbEnabled, s.reverbPreDelay, s.reverbDecay, - s.reverbWet + s.reverbWet, + s.playbackMode, + s.sporadicMin, + s.sporadicMax ], (err) => { if (err) { @@ -383,6 +395,9 @@ router.get('/profiles/:profileId', (req, res) => { profiles_samples.reverb_pre_delay as reverbPreDelay, profiles_samples.reverb_decay as reverbDecay, profiles_samples.reverb_wet as reverbWet, + profiles_samples.playback_mode as playbackMode, + profiles_samples.sporadic_min as sporadicMin, + profiles_samples.sporadic_max as sporadicMax, fade_in as fadeIn, loop_points_enabled as loopPointsEnabled, loop_start as loopStart, @@ -414,6 +429,9 @@ router.get('/profiles/:profileId', (req, res) => { sample.reverbPreDelay = row.reverbPreDelay sample.reverbDecay = row.reverbDecay sample.reverbWet = row.reverbWet + sample.playbackMode = row.playbackMode + sample.sporadicMin = row.sporadicMin + sample.sporadicMax = row.sporadicMax samples.push(sample) }) diff --git a/src/components/NoisePage.vue b/src/components/NoisePage.vue index 57b1f63..8f6fe2c 100644 --- a/src/components/NoisePage.vue +++ b/src/components/NoisePage.vue @@ -14,7 +14,7 @@ -

+

Samples

@@ -652,7 +652,7 @@ -

+

{{ sample.name }}

@@ -685,80 +685,155 @@ -

+

Effects -

+
- - - + + + + Reverb + + + + + + + + +
+

{{ sample.reverbPreDelay }}

+
+
+ + + +
+

{{ sample.reverbDecay }}

+
+
+ + + +
+

{{ sample.reverbWet }}%

+
+
+
+
+
- -
+ Playback Mode + + + + + -

{{ sample.reverbPreDelay }}

-
+ + +
- - -
+ -

{{ sample.reverbDecay }}

-
-
+ - - -
+ + + + +

-

{{ sample.reverbWet }}%

-
+ (Sample will play randomly, every {{ sample.sporadicMin }} to {{ sample.sporadicMax }} seconds) +

+

+ (Sample will play randomly, every {{ sample.sporadicMin }} to {{ sample.sporadicMax }} seconds) +

- - - +
diff --git a/src/components/noise.js b/src/components/noise.js index 7b6b9b2..a9617af 100644 --- a/src/components/noise.js +++ b/src/components/noise.js @@ -75,6 +75,7 @@ export default { unwatch: null, confirmSwitchProfileDialog: false, activeProfile: {}, + isSporadicValid: false, errorSnackbar: false, errorSnackbarText: '', rules: { @@ -123,6 +124,10 @@ export default { this.loadedSamples.forEach(s => { settings.push(s.volume) + settings.push(s.reverbEnabled) + settings.push(s.reverbPreDelay) + settings.push(s.reverbDecay) + settings.push(s.reverbWet) }) return settings @@ -186,10 +191,13 @@ export default { } this.players.player(s.id).volume.value = s.volume + this.players.player(s.id).disconnect() if (s.reverbEnabled) { const reverb = new Tone.Reverb(s.reverbDecay).toDestination() reverb.set({ preDelay: s.reverbPreDelay, wet: s.reverbWet }) this.players.player(s.id).connect(reverb) + } else { + this.players.player(s.id).toDestination() } }) @@ -208,11 +216,16 @@ export default { this.noise.sync().start(0) this.loadedSamples.forEach(s => { - this.players.player(s.id).unsync().sync().start(0) + if (s.playbackMode === 'sporadic') { + const playNextTime = Math.floor(Math.random() * (s.sporadicMax - s.sporadicMin + 1) + s.sporadicMin) + this.sporadicInterval = setInterval(() => console.log('Test'), playNextTime) + } else { + this.players.player(s.id).unsync().sync().start(0) + } }) } - Tone.Transport.start() + Tone.Transport.start('+0.1') }, stop () { clearInterval(this.transportInterval)