Compare commits

...

55 Commits

Author SHA1 Message Date
Kay Thomas
1c3f09fcb8 Merge pull request #63 from kaythomas0/v0.6.13
v0.6.13
2023-12-11 15:36:03 -05:00
Kevin Thomas
98419b6248 Bump to v0.6.13 2023-12-03 19:33:57 -05:00
Kay Thomas
2d2f1810d1 Merge pull request #62 from kaythomas0/dependabot/npm_and_yarn/axios-1.6.0
Bump axios from 0.21.4 to 1.6.0
2023-12-03 19:24:40 -05:00
Kay Thomas
c9fcf06503 Merge pull request #61 from kaythomas0/dependabot/npm_and_yarn/babel/traverse-7.23.2
Bump @babel/traverse from 7.18.2 to 7.23.2
2023-12-03 19:19:26 -05:00
dependabot[bot]
53c05dfe56 Bump axios from 0.21.4 to 1.6.0
Bumps [axios](https://github.com/axios/axios) from 0.21.4 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.21.4...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-10 16:37:21 +00:00
dependabot[bot]
2dc54c7347 Bump @babel/traverse from 7.18.2 to 7.23.2
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.18.2 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-18 03:02:56 +00:00
Kay Thomas
bd73809ad9 Merge pull request #60 from kaythomas0/v0.6.12
v0.6.12
2023-07-25 03:22:19 +01:00
Kevin Thomas
3d7c3545ea Bump to v0.6.12 2023-07-19 09:58:18 -07:00
Kay Thomas
02c5fd9660 Merge pull request #59 from kaythomas0/dependabot/npm_and_yarn/word-wrap-1.2.4
Bump word-wrap from 1.2.3 to 1.2.4
2023-07-19 17:57:13 +01:00
dependabot[bot]
d98b23ed40 Bump word-wrap from 1.2.3 to 1.2.4
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-19 05:08:43 +00:00
Kay Thomas
d57ea01750 Merge pull request #58 from kaythomas0/dev
Update README.md
2023-04-17 01:42:51 -07:00
Kay Thomas
3cc060fdae Update README.md 2023-04-17 01:42:32 -07:00
Kay Thomas
2f21025d20 Merge pull request #57 from kaythomas0/v0.6.11
v0.6.11
2023-04-17 01:40:29 -07:00
Kay Thomas
bdbbdee48d Upgrade node to 16 2023-04-16 23:36:35 -07:00
Kay Thomas
f442d486a3 Merge pull request #56 from kaythomas0/v0.6.10
v0.6.10
2023-03-16 15:43:46 -07:00
Kevin Thomas
ef3eb1a70a Bump to v0.6.10 2023-03-16 13:41:21 -07:00
Kay Thomas
2bb67a9a22 Merge pull request #55 from kaythomas0/dependabot/npm_and_yarn/webpack-5.76.1
Bump webpack from 5.72.1 to 5.76.1
2023-03-16 13:39:47 -07:00
dependabot[bot]
af2384b790 Bump webpack from 5.72.1 to 5.76.1
Bumps [webpack](https://github.com/webpack/webpack) from 5.72.1 to 5.76.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.72.1...v5.76.1)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-15 01:24:57 +00:00
Kay Thomas
d83639b5c6 Merge pull request #54 from kaythomas0/v0.6.9
v0.6.9
2023-02-15 19:44:29 -08:00
Kevin Thomas
5d3a6fb912 Bump to v0.6.9 2023-02-15 16:56:11 -08:00
Kay Thomas
722e0600f1 Merge pull request #53 from kaythomas0/dependabot/npm_and_yarn/sideway/formula-3.0.1
Bump @sideway/formula from 3.0.0 to 3.0.1
2023-02-15 16:54:17 -08:00
dependabot[bot]
cd65c0b714 Bump @sideway/formula from 3.0.0 to 3.0.1
Bumps [@sideway/formula](https://github.com/sideway/formula) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/sideway/formula/releases)
- [Commits](https://github.com/sideway/formula/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: "@sideway/formula"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-09 04:23:55 +00:00
Kay Thomas
d73afdb68c Merge pull request #51 from kaythomas0/v0.6.8
v0.6.8
2023-01-09 12:07:01 -08:00
Kevin Thomas
e72503e91e Bump to v0.6.8 2023-01-09 11:26:07 -08:00
Kay Thomas
294a4e4dec Merge pull request #50 from kaythomas0/dependabot/npm_and_yarn/json5-1.0.2
Bump json5 from 1.0.1 to 1.0.2
2023-01-09 11:24:33 -08:00
dependabot[bot]
21fda5ce04 Bump json5 from 1.0.1 to 1.0.2
Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-08 08:05:24 +00:00
Kay Thomas
17301b5b31 Merge pull request #49 from kaythomas0/dev
Update dependabot.yml
2022-11-19 15:58:28 -08:00
Kay Thomas
923f5bb52e Update dependabot.yml 2022-11-19 15:57:32 -08:00
Kay Thomas
0cac4f2d5a Merge pull request #48 from kaythomas0/v0.6.7
v0.6.7
2022-11-17 18:00:01 -08:00
Kay Thomas
5b99b8cfc2 Upgrade Vue CLI 2022-11-17 01:38:35 -08:00
Kay Thomas
1ae403171e Merge pull request #46 from kaythomas0/dev
Disable version updates for npm dependencies
2022-11-10 10:32:29 -08:00
Kevin Thomas
c329f4f70a Disable version updates for npm dependencies 2022-11-10 10:31:43 -08:00
Kay Thomas
f1654d39ca Merge pull request #40 from kaythomas0/v0.6.6
v0.6.6
2022-11-10 10:24:29 -08:00
Kevin Thomas
a698934823 Fix loader-utils vulnerability 2022-11-10 09:27:29 -08:00
Kevin Thomas
0ec92bad85 Add dependabot.yml 2022-11-10 09:23:14 -08:00
Kay Thomas
0bb814e763 Merge pull request #37 from kaythomas0/v0.6.5
v0.6.5
2022-09-23 11:22:41 -07:00
Kay Thomas
621576db14 Bump vuetify from 2.6.6 to 2.6.10
Bumps [vuetify](https://github.com/vuetifyjs/vuetify/tree/HEAD/packages/vuetify) from 2.6.6 to 2.6.10.
- [Release notes](https://github.com/vuetifyjs/vuetify/releases)
- [Commits](https://github.com/vuetifyjs/vuetify/commits/v2.6.10/packages/vuetify)

---
updated-dependencies:
- dependency-name: vuetify
  dependency-type: direct:production
...
2022-09-21 22:58:38 -07:00
Kay Thomas
80969ca029 Merge pull request #35 from kaythomas0/v0.6.4
v0.6.4
2022-09-12 22:29:59 -07:00
Kevin Thomas
26fc54054f Fix bug that causes editing a sample to discard unsaved work 2022-09-11 21:17:45 -07:00
Kay Thomas
8a1fc99fb5 Merge pull request #34 from kaythomas0/v0.6.3
v0.6.3
2022-09-11 17:38:08 -07:00
Kevin Thomas
e6cc5b36c5 Fix typo 2022-09-11 15:11:17 -07:00
Kevin Thomas
6c4c24c166 Fix unwanted display of unsaved work dialog 2022-09-06 02:36:36 -07:00
Kevin Thomas
9466ed692b Use strict sameSite cookies 2022-09-06 02:36:19 -07:00
Kevin Thomas
5ace3d9996 Update package*.json 2022-09-06 02:35:54 -07:00
Kay Thomas
c4642df353 Merge pull request #33 from kaythomas0/v0.6.2
v0.6.2
2022-09-04 20:41:54 -07:00
Kevin Thomas
aca7fbd1e0 Fix sporadic playback with timer 2022-09-04 19:46:31 -07:00
Kay Thomas
90f4d50b7f Merge pull request #32 from kaythomas0/v0.6.1
v0.6.1
2022-08-31 17:01:57 -07:00
Kevin Thomas
66b23f39a6 Fix db migration 2022-08-31 15:37:04 -07:00
Kevin Thomas
4d22dab887 Fix sporadic validation, fix preferences bug 2022-08-31 11:16:23 -07:00
Kay Thomas
bc93b05c4e Merge pull request #31 from kaythomas0/dev
Add another screenshot
2022-08-30 13:29:35 -07:00
Kevin Thomas
60a01908c2 Add another screenshot 2022-08-30 13:28:00 -07:00
Kay Thomas
5879e6d327 Merge pull request #30 from kaythomas0/dev
Update README.md
2022-08-30 13:24:09 -07:00
Kay Thomas
88cbfe0bf1 Update README.md 2022-08-30 13:23:54 -07:00
Kay Thomas
74c7d543c0 Merge pull request #29 from kaythomas0/dev
Update README
2022-08-30 13:23:11 -07:00
Kevin Thomas
dc81a65c7a Update README 2022-08-30 13:22:53 -07:00
11 changed files with 15157 additions and 3509 deletions

8
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,8 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
# Disable version updates for npm dependencies
open-pull-requests-limit: 0

BIN
.github/noisedash-screenshot-4.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -1,8 +1,8 @@
FROM node:14
FROM node:16
LABEL maintainer="kaythomas@pm.me"
WORKDIR /var/noisedash
COPY package*.json ./
RUN npm install
RUN npm install --force
COPY . .
ENV NODE_ENV production
RUN npm run build

View File

@@ -11,7 +11,7 @@ Self-hostable web tool for generating ambient noises
* Generate and customize ambient noises and user-uploadable samples (leveraging [Tone.js](https://github.com/Tonejs/Tone.js/))
* Save "noise profiles" so you can easily switch between your created soundscapes. Import and export them for easy sharing, record them for use elsewhere
* Fine-tune your noises with audio processing tools like filters, LFOs, and effects
* Upload and edit audio samples (e.g rain, wind, thunder) to combine with your generated noises
* Upload and edit audio samples (e.g rain, wind, thunder) to combine with your generated noises. Add effects to them and set playback modes
* Use admin tools to manage multiple users
* Mobile friendly
@@ -36,7 +36,7 @@ docker-compose up -d
## From Source
Requires node 14 and npm
Requires node 16 and npm
* Clone the repo:

18432
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "noisedash",
"version": "0.6.0",
"version": "0.6.13",
"private": true,
"author": "Kay Thomas <kaythomas@pm.me> (https://kaythomas.dev)",
"scripts": {
@@ -12,11 +12,11 @@
},
"dependencies": {
"@vscode/sqlite3": "^5.0.8",
"axios": "^0.21.4",
"axios": "^1.6.0",
"config": "^3.3.6",
"connect-history-api-fallback": "^1.6.0",
"cookie-parser": "^1.4.5",
"core-js": "^3.22.7",
"core-js": "^3.23.5",
"express": "^4.18.1",
"express-session": "^1.17.3",
"multer": "^1.4.5-lts.1",
@@ -27,16 +27,16 @@
"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": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "^5.0.4",
"@vue/cli-plugin-eslint": "^5.0.4",
"@vue/cli-plugin-router": "^5.0.4",
"@vue/cli-service": "^5.0.4",
"@vue/cli-plugin-babel": "^5.0.8",
"@vue/cli-plugin-eslint": "^5.0.8",
"@vue/cli-plugin-router": "^5.0.8",
"@vue/cli-service": "^5.0.8",
"@vue/eslint-config-standard": "^6.1.0",
"eslint": "^7.32.0",
"eslint-plugin-html": "^6.2.0",
@@ -47,7 +47,7 @@
"eslint-plugin-vue": "^8.0.3",
"sass": "~1.32.0",
"sass-loader": "^10.0.0",
"vue-cli-plugin-vuetify": "^2.5.0",
"vue-cli-plugin-vuetify": "^2.5.8",
"vue-template-compiler": "^2.6.11",
"vuetify-loader": "^1.7.3"
},

View File

@@ -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 || []

View File

@@ -59,32 +59,46 @@ module.exports = function () {
} else {
const userVersion = row.user_version
if (userVersion < 1) {
db.run('ALTER TABLE samples ADD COLUMN fade_in REAL DEFAULT 0')
db.run('ALTER TABLE samples ADD COLUMN loop_points_enabled INTEGER DEFAULT 0')
db.run('ALTER TABLE samples ADD COLUMN loop_start REAL DEFAULT 0')
db.run('ALTER TABLE samples ADD COLUMN loop_end REAL DEFAULT 0')
db.serialize(() => {
if (userVersion < 1) {
db.run('ALTER TABLE samples ADD COLUMN fade_in REAL DEFAULT 0')
db.run('ALTER TABLE samples ADD COLUMN loop_points_enabled INTEGER DEFAULT 0')
db.run('ALTER TABLE samples ADD COLUMN loop_start REAL DEFAULT 0')
db.run('ALTER TABLE samples ADD COLUMN loop_end REAL DEFAULT 0')
db.run('PRAGMA user_version = 1')
}
db.run('PRAGMA user_version = 1')
}
if (userVersion < 2) {
db.run('ALTER TABLE users ADD COLUMN preferences TEXT DEFAULT "{}"')
if (userVersion < 2) {
db.run('ALTER TABLE users ADD COLUMN preferences TEXT DEFAULT "{}"')
db.run('PRAGMA user_version = 2')
}
db.run('PRAGMA user_version = 2')
}
if (userVersion < 3) {
db.run('ALTER TABLE profiles_samples ADD COLUMN reverb_enabled INTEGER DEFAULT 0')
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')
if (userVersion < 3) {
db.run('ALTER TABLE profiles_samples ADD COLUMN reverb_enabled INTEGER DEFAULT 0')
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')
}
db.run('PRAGMA user_version = 3')
}
if (userVersion < 4) {
db.run('UPDATE users SET preferences = ? WHERE preferences = ?',
['{"accentColor":{"alpha":1,"hex":"#607D8B","hexa":"#607D8BFF","hsla":{"h":200,"s":18,"l":46,"a":1},"hsva":{"h":200,"s":31,"v":55,"a":1},"hue":200,"rgba":{"r":96,"g":125,"b":139,"a":1}}}', '{}'],
(err) => {
if (err) {
logger.error(err)
} else {
db.run('PRAGMA user_version = 4')
}
})
}
})
}
})
})

View File

@@ -72,6 +72,8 @@ router.post('/users', (req, res) => {
return res.sendStatus(500)
}
const defaultPreferences = '{"accentColor":{"alpha":1,"hex":"#607D8B","hexa":"#607D8BFF","hsla":{"h":200,"s":18,"l":46,"a":1},"hsva":{"h":200,"s":31,"v":55,"a":1},"hue":200,"rgba":{"r":96,"g":125,"b":139,"a":1}}}'
if (row.count !== 0) {
if (!req.user) {
return res.sendStatus(401)
@@ -94,15 +96,16 @@ router.post('/users', (req, res) => {
return res.sendStatus(500)
}
db.run(`INSERT INTO users (username, hashed_password, salt, name, is_admin, dark_mode, can_upload)
VALUES (?, ?, ?, ?, ?, ?, ?)`, [
db.run(`INSERT INTO users (username, hashed_password, salt, name, is_admin, dark_mode, can_upload, preferences)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
req.body.username,
hashedPassword,
salt,
req.body.name,
req.body.isAdmin,
req.body.darkMode,
req.body.canUpload
req.body.canUpload,
defaultPreferences
], (err) => {
if (err) {
logger.error(err)
@@ -125,15 +128,16 @@ router.post('/users', (req, res) => {
return res.sendStatus(500)
}
db.run(`INSERT INTO users (username, hashed_password, salt, name, is_admin, dark_mode, can_upload)
VALUES (?, ?, ?, ?, ?, ?, ?)`, [
db.run(`INSERT INTO users (username, hashed_password, salt, name, is_admin, dark_mode, can_upload, preferences)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
req.body.username,
hashedPassword,
salt,
req.body.name,
req.body.isAdmin,
req.body.darkMode,
req.body.canUpload
req.body.canUpload,
defaultPreferences
], function (err) {
if (err) {
logger.error(err)

View File

@@ -14,7 +14,7 @@
<v-row justify="center">
<v-btn
:disabled="playDisabled || !isTimerValid || !isSporadicValid"
:disabled="playDisabled || !isTimerValid || (loadedSamples.length != 0 && !isSporadicValid)"
class="mx-3 mb-5"
fab
large
@@ -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
@@ -640,7 +640,7 @@
v-if="canUpload"
cols="12"
>
<h2 class="display-1 font-weight-bold mb-7">
<h2 class="display-1 font-weight-bold mb-5">
Samples
</h2>
@@ -776,7 +776,6 @@
</v-row>
<v-row
justify="center"
class="mb-5"
>
<v-radio-group
@@ -785,11 +784,11 @@
mandatory
>
<v-radio
label="Continuous"
label="Continuous (Looped)"
value="continuous"
/>
<v-radio
label="Sporadic"
label="Sporadic (Not Looped, Plays Randomly Within Interval)"
value="sporadic"
/>
</v-radio-group>
@@ -807,7 +806,7 @@
label="Sporadic Min"
class="mx-3"
:disabled="sample.playbackMode != 'sporadic' || playDisabled"
:rules="[validateSporadicRange(sample)]"
:rules="[rules.gt(-1)]"
/>
<v-text-field
@@ -816,30 +815,13 @@
label="Sporadic Max"
class="mx-3"
:disabled="sample.playbackMode != 'sporadic' || playDisabled"
:rules="[validateSporadicRange(sample)]"
:rules="[rules.gt(0)]"
/>
</v-row>
</v-form>
<v-row
justify="center"
class="my-7"
>
<p
v-if="sample.playbackMode != 'sporadic'"
class="text--disabled"
>
(Sample will play randomly, every {{ sample.sporadicMin }} to {{ sample.sporadicMax }} seconds)
</p>
<p
v-else
>
(Sample will play randomly, every {{ sample.sporadicMin }} to {{ sample.sporadicMax }} seconds)
</p>
</v-row>
<v-divider
class="mb-7"
class="mt-7"
/>
</v-container>
</v-row>
@@ -1044,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"

View File

@@ -155,11 +155,13 @@ export default {
this.stop()
},
methods: {
play () {
async play () {
if (!this.players.loaded) {
return
}
await Tone.start()
this.playDisabled = true
Tone.Transport.cancel()
@@ -186,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
@@ -204,37 +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
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)
}
} else {
this.players.player(s.id).loop = true
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')
},
@@ -340,7 +344,7 @@ export default {
}
this.exportedProfile = this.profileItems[0]
this.recordedProfile = this.profileItems[0]
this.loadProfile()
this.loadProfile(true)
}
}
})
@@ -416,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))
@@ -732,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
@@ -756,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) {
@@ -862,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')
@@ -886,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
@@ -894,7 +910,7 @@ export default {
},
discardChanges () {
this.unsavedWork = false
this.loadProfile()
this.loadProfile(true)
this.confirmSwitchProfileDialog = false
},
saveChanges () {
@@ -902,15 +918,6 @@ export default {
this.selectedProfile = this.profileItems.find(p => p.text === this.activeProfile.name)
this.updateProfile()
this.confirmSwitchProfileDialog = false
},
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
}
}
}
}