forked from external-repos/noisedash
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0bb814e763 | ||
|
|
621576db14 | ||
|
|
80969ca029 | ||
|
|
26fc54054f | ||
|
|
8a1fc99fb5 | ||
|
|
e6cc5b36c5 | ||
|
|
6c4c24c166 | ||
|
|
9466ed692b | ||
|
|
5ace3d9996 | ||
|
|
c4642df353 | ||
|
|
aca7fbd1e0 |
96
package-lock.json
generated
96
package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "noisedash",
|
||||
"version": "0.6.0",
|
||||
"version": "0.6.5",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -3183,6 +3183,38 @@
|
||||
"strip-ansi": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"@vue/vue-loader-v15": {
|
||||
"version": "npm:vue-loader@15.10.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.0.tgz",
|
||||
"integrity": "sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vue/component-compiler-utils": "^3.1.0",
|
||||
"hash-sum": "^1.0.2",
|
||||
"loader-utils": "^1.1.0",
|
||||
"vue-hot-reload-api": "^2.3.0",
|
||||
"vue-style-loader": "^4.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"hash-sum": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
|
||||
"integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
|
||||
"dev": true
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
|
||||
"integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
"emojis-list": "^3.0.0",
|
||||
"json5": "^1.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@webassemblyjs/ast": {
|
||||
"version": "1.11.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
|
||||
@@ -3495,6 +3527,15 @@
|
||||
"is-docker": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"json5": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
||||
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"minimist": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"jsonfile": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
@@ -3943,47 +3984,6 @@
|
||||
"eslint-import-resolver-webpack": "^0.13.1"
|
||||
}
|
||||
},
|
||||
"@vue/vue-loader-v15": {
|
||||
"version": "npm:vue-loader@15.10.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.0.tgz",
|
||||
"integrity": "sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vue/component-compiler-utils": "^3.1.0",
|
||||
"hash-sum": "^1.0.2",
|
||||
"loader-utils": "^1.1.0",
|
||||
"vue-hot-reload-api": "^2.3.0",
|
||||
"vue-style-loader": "^4.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"hash-sum": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
|
||||
"integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
|
||||
"dev": true
|
||||
},
|
||||
"json5": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
||||
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"minimist": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
|
||||
"integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
"emojis-list": "^3.0.0",
|
||||
"json5": "^1.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@vue/web-component-wrapper": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
|
||||
@@ -4282,7 +4282,7 @@
|
||||
"append-field": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
|
||||
"integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
|
||||
"integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw=="
|
||||
},
|
||||
"arch": {
|
||||
"version": "2.2.0",
|
||||
@@ -9175,7 +9175,7 @@
|
||||
"pause": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
|
||||
"integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
|
||||
"integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
|
||||
},
|
||||
"picocolors": {
|
||||
"version": "1.0.0",
|
||||
@@ -10935,7 +10935,7 @@
|
||||
"typedarray": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
||||
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
|
||||
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
|
||||
},
|
||||
"typedarray-to-buffer": {
|
||||
"version": "3.1.5",
|
||||
@@ -11308,9 +11308,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"vuetify": {
|
||||
"version": "2.6.6",
|
||||
"resolved": "https://registry.npmjs.org/vuetify/-/vuetify-2.6.6.tgz",
|
||||
"integrity": "sha512-H4KtxDFmDN8QiTRiGfBySyjMhVaHAJTKB0llGGKZT5jKxtnx9gvEtMWXKtVuRP0NJJP0H6xBPJHNOH7nT18qiQ=="
|
||||
"version": "2.6.10",
|
||||
"resolved": "https://registry.npmjs.org/vuetify/-/vuetify-2.6.10.tgz",
|
||||
"integrity": "sha512-fgUeRDDCwYkwu6WGEEKGe7IdfzOsXJCZGrqkn1pcS2ycuoDL8mR2/dejH5iFNnBY6MnsT365PAGn0J+9otjfQg=="
|
||||
},
|
||||
"vuetify-loader": {
|
||||
"version": "1.7.3",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "noisedash",
|
||||
"version": "0.6.0",
|
||||
"version": "0.6.5",
|
||||
"private": true,
|
||||
"author": "Kay Thomas <kaythomas@pm.me> (https://kaythomas.dev)",
|
||||
"scripts": {
|
||||
@@ -27,7 +27,7 @@
|
||||
"tone": "^14.7.77",
|
||||
"vue": "^2.6.11",
|
||||
"vue-router": "^3.5.4",
|
||||
"vuetify": "^2.6.6",
|
||||
"vuetify": "^2.6.10",
|
||||
"winston": "^3.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -36,7 +36,8 @@ app.use(session({
|
||||
store: new FileStore(fileStoreOptions),
|
||||
secret: sessionSecret,
|
||||
resave: true,
|
||||
saveUninitialized: true
|
||||
saveUninitialized: true,
|
||||
cookie: { sameSite: 'strict' }
|
||||
}))
|
||||
app.use((req, res, next) => {
|
||||
const msgs = req.session.messages || []
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
label="Profiles"
|
||||
class="mx-3 mb-5"
|
||||
:disabled="playDisabled"
|
||||
@change="loadProfile"
|
||||
@change="loadProfile(true)"
|
||||
/>
|
||||
</v-row>
|
||||
|
||||
@@ -297,7 +297,7 @@
|
||||
<v-card-text>
|
||||
<v-container>
|
||||
<v-row>
|
||||
<p>Select profile to record audio for. This is only supported on Chrome and Firefox.</p>
|
||||
<p>Select profile to record audio for. This is only supported on Chrome and Firefox. Current profile will be saved before recording.</p>
|
||||
</v-row>
|
||||
<v-row>
|
||||
<v-select
|
||||
@@ -788,7 +788,7 @@
|
||||
value="continuous"
|
||||
/>
|
||||
<v-radio
|
||||
label="Sporadic (Not Looped, Plays Randomly Within Interval"
|
||||
label="Sporadic (Not Looped, Plays Randomly Within Interval)"
|
||||
value="sporadic"
|
||||
/>
|
||||
</v-radio-group>
|
||||
@@ -1026,7 +1026,7 @@
|
||||
<v-text-field
|
||||
v-model="previewSampleFadeIn"
|
||||
type="number"
|
||||
label="Fade In Time"
|
||||
label="Fade In Time (In continuous mode, this only effects first playback)"
|
||||
:disabled="previewSamplePlaying"
|
||||
:rules="[rules.gt(-1)]"
|
||||
@change="updatePreviewSamplePlayerFadeIn"
|
||||
|
||||
@@ -188,6 +188,18 @@ export default {
|
||||
this.lfo.connect(this.filter.frequency).start()
|
||||
}
|
||||
|
||||
if (this.isTimerEnabled) {
|
||||
this.duration = parseInt((this.hours * 3600)) + parseInt((this.minutes * 60)) + parseInt(this.seconds)
|
||||
this.timeRemaining = this.duration
|
||||
this.transportInterval = setInterval(() => this.stop(), this.duration * 1000 + 100)
|
||||
this.timeRemainingInterval = setInterval(() => this.startTimer(), 1000)
|
||||
Tone.Transport.loopEnd = this.duration
|
||||
|
||||
this.noise.sync().start(0).stop(this.duration)
|
||||
} else {
|
||||
this.noise.sync().start(0)
|
||||
}
|
||||
|
||||
this.loadedSamples.forEach(s => {
|
||||
this.players.player(s.id).loop = true
|
||||
this.players.player(s.id).fadeIn = s.fadeIn
|
||||
@@ -206,39 +218,27 @@ export default {
|
||||
} else {
|
||||
this.players.player(s.id).toDestination()
|
||||
}
|
||||
})
|
||||
|
||||
if (this.isTimerEnabled) {
|
||||
this.duration = parseInt((this.hours * 3600)) + parseInt((this.minutes * 60)) + parseInt(this.seconds)
|
||||
this.noise.sync().start(0).stop(this.duration)
|
||||
Tone.Transport.loopEnd = this.duration
|
||||
this.timeRemaining = this.duration
|
||||
this.transportInterval = setInterval(() => this.stop(), this.duration * 1000 + 100)
|
||||
this.timeRemainingInterval = setInterval(() => this.startTimer(), 1000)
|
||||
if (s.playbackMode === 'sporadic') {
|
||||
this.players.player(s.id).loop = false
|
||||
|
||||
this.loadedSamples.forEach(s => {
|
||||
this.players.player(s.id).unsync().sync().start(0).stop(this.duration)
|
||||
})
|
||||
} else {
|
||||
this.noise.sync().start(0)
|
||||
const maxInt = parseInt(s.sporadicMax, 10)
|
||||
const minInt = parseInt(s.sporadicMin, 10)
|
||||
|
||||
this.loadedSamples.forEach(s => {
|
||||
if (s.playbackMode === 'sporadic') {
|
||||
this.players.player(s.id).loop = false
|
||||
if (minInt <= maxInt) {
|
||||
const rand = Math.floor(Math.random() * (maxInt - minInt + 1) + minInt)
|
||||
s.initialSporadicPlayInterval = setInterval(() => this.playSporadicSample(s.id), rand * 1000)
|
||||
}
|
||||
} else {
|
||||
this.players.player(s.id).loop = true
|
||||
|
||||
const maxInt = parseInt(s.sporadicMax, 10)
|
||||
const minInt = parseInt(s.sporadicMin, 10)
|
||||
|
||||
if (minInt <= maxInt) {
|
||||
const rand = Math.floor(Math.random() * (maxInt - minInt + 1) + minInt)
|
||||
s.initialSporadicPlayInterval = setInterval(() => this.playSporadicSample(s.id), rand * 1000)
|
||||
}
|
||||
if (this.isTimerEnabled) {
|
||||
this.players.player(s.id).unsync().sync().start(0).stop(this.duration)
|
||||
} else {
|
||||
this.players.player(s.id).loop = true
|
||||
this.players.player(s.id).unsync().sync().start(0)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Tone.Transport.start('+0.1')
|
||||
},
|
||||
@@ -344,7 +344,7 @@ export default {
|
||||
}
|
||||
this.exportedProfile = this.profileItems[0]
|
||||
this.recordedProfile = this.profileItems[0]
|
||||
this.loadProfile()
|
||||
this.loadProfile(true)
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -420,8 +420,8 @@ export default {
|
||||
this.errorSnackbar = true
|
||||
})
|
||||
},
|
||||
loadProfile () {
|
||||
if (this.unsavedWork) {
|
||||
loadProfile (checkForUnsavedWork) {
|
||||
if (checkForUnsavedWork && this.unsavedWork) {
|
||||
this.confirmSwitchProfileDialog = true
|
||||
} else {
|
||||
this.$http.get('/profiles/'.concat(this.selectedProfile.id))
|
||||
@@ -736,7 +736,16 @@ export default {
|
||||
}).then(response => {
|
||||
if (response.status === 200) {
|
||||
this.getSamples()
|
||||
this.loadProfile()
|
||||
|
||||
// Update sample if it's already loaded in current profile
|
||||
const sample = this.loadedSamples.find(s => s.id === this.selectedPreviewSample.id)
|
||||
if (sample) {
|
||||
sample.fadeIn = this.previewSampleFadeIn
|
||||
sample.loopPointsEnabled = this.previewSampleLoopPointsEnabled
|
||||
sample.loopStart = this.previewSampleLoopStart
|
||||
sample.loopEnd = this.previewSampleLoopEnd
|
||||
}
|
||||
|
||||
this.closeEditSampleForm()
|
||||
this.infoSnackbarText = 'Sample Saved'
|
||||
this.infoSnackbar = true
|
||||
@@ -760,6 +769,9 @@ export default {
|
||||
this.profileMoreDialog = false
|
||||
},
|
||||
startRecording () {
|
||||
// Save current profile before recording
|
||||
this.updateProfile()
|
||||
|
||||
this.$http.get('/profiles/'.concat(this.recordedProfile.id))
|
||||
.then(async response => {
|
||||
if (response.status === 200) {
|
||||
@@ -866,7 +878,7 @@ export default {
|
||||
const recording = await this.recorder.stop()
|
||||
|
||||
// Set active profile back to the selected one
|
||||
this.loadProfile()
|
||||
this.loadProfile(false)
|
||||
|
||||
const url = URL.createObjectURL(recording)
|
||||
const anchor = document.createElement('a')
|
||||
@@ -890,7 +902,7 @@ export default {
|
||||
await this.recorder.stop()
|
||||
|
||||
// Set active profile back to the selected one
|
||||
this.loadProfile()
|
||||
this.loadProfile(false)
|
||||
|
||||
clearInterval(this.recordingInterval)
|
||||
this.recordingDialog = false
|
||||
@@ -898,7 +910,7 @@ export default {
|
||||
},
|
||||
discardChanges () {
|
||||
this.unsavedWork = false
|
||||
this.loadProfile()
|
||||
this.loadProfile(true)
|
||||
this.confirmSwitchProfileDialog = false
|
||||
},
|
||||
saveChanges () {
|
||||
|
||||
Reference in New Issue
Block a user