From d37cd773f87ba01ebf44b31f19f3a083f6be80bb Mon Sep 17 00:00:00 2001 From: michalcourson Date: Sun, 1 Mar 2026 13:48:31 -0500 Subject: [PATCH] proper closing, metadata file locations moved --- audio-service/src/main.py | 2 +- audio-service/src/metadata_manager.py | 8 +- audio-service/src/settings.py | 8 +- electron-ui/package-lock.json | 54 +-- electron-ui/package.json | 13 +- electron-ui/release/app/package-lock.json | 4 +- electron-ui/release/app/package.json | 2 +- electron-ui/src/main/main.ts | 9 +- electron-ui/src/main/service.ts | 2 + electron-ui/test_meta.json | 421 ++++++++++++++++++++++ 10 files changed, 483 insertions(+), 40 deletions(-) create mode 100644 electron-ui/test_meta.json diff --git a/audio-service/src/main.py b/audio-service/src/main.py index 4fe8f4f..5a3f6ec 100644 --- a/audio-service/src/main.py +++ b/audio-service/src/main.py @@ -75,7 +75,7 @@ def main(): app.register_blueprint(settings_bp) print(f"Starting Flask server on port {settings.get_settings('http_port')}") # app.run(host='127.0.0.1', port=settings.get_settings('http_port'), debug=False, use_reloader=True) - socketio.run(app, host='127.0.0.1', port=settings.get_settings('http_port'), debug=False, use_reloader=True, allow_unsafe_werkzeug=True) + socketio.run(app, host='127.0.0.1', port=settings.get_settings('http_port'), debug=False, use_reloader=False, allow_unsafe_werkzeug=True) diff --git a/audio-service/src/metadata_manager.py b/audio-service/src/metadata_manager.py index 8c2a4c6..91b5eb6 100644 --- a/audio-service/src/metadata_manager.py +++ b/audio-service/src/metadata_manager.py @@ -1,5 +1,6 @@ import os import json +from platformdirs import user_data_dir class MetaDataManager: _instance = None @@ -12,12 +13,15 @@ class MetaDataManager: def init(self): self.socket = None # read metadata file from executing directory - self.metadata_file = os.path.join(os.getcwd(), "metadata.json") + file_path = user_data_dir("ClipTrim") + os.makedirs(file_path, exist_ok=True) + print(file_path) + self.metadata_file = os.path.join(file_path, "metadata.json") if os.path.exists(self.metadata_file): with open(self.metadata_file, "r") as f: self.collections = json.load(f) else: - self.collections = {} + self.collections = [] if(collections := next((c for c in self.collections if c.get("name") == "Uncategorized"), None)) is None: self.collections.append({"name": "Uncategorized", "id": 0, "clips": []}) self.save_metadata() diff --git a/audio-service/src/settings.py b/audio-service/src/settings.py index 580cdc3..2b11fed 100644 --- a/audio-service/src/settings.py +++ b/audio-service/src/settings.py @@ -1,5 +1,7 @@ import os import json + +from platformdirs import user_data_dir from audio_io import AudioIO from windows_audio import WindowsAudioManager @@ -14,7 +16,9 @@ class SettingsManager: def init(self): # read settings file from executing directory print("Initializing SettingsManager", os.getcwd()) - self.settings_file = os.path.join(os.getcwd(), "settings.json") + file_path = user_data_dir("ClipTrim") + os.makedirs(file_path, exist_ok=True) + self.settings_file = os.path.join(file_path, "settings.json") if os.path.exists(self.settings_file): with open(self.settings_file, "r") as f: self.settings = json.load(f) @@ -22,7 +26,7 @@ class SettingsManager: self.settings = { "input_device": None, "output_device": None, - "save_path": os.path.join(os.getcwd(), "recordings"), + "save_path": os.path.join(file_path, "recordings"), "recording_length": 15 } audio_manager = WindowsAudioManager() diff --git a/electron-ui/package-lock.json b/electron-ui/package-lock.json index a603849..2b9025f 100644 --- a/electron-ui/package-lock.json +++ b/electron-ui/package-lock.json @@ -32,7 +32,6 @@ "socket.io": "^4.8.3", "socket.io-client": "^4.8.3", "socketio": "^1.0.0", - "tailwindcss": "^4.1.18", "wavesurfer.js": "^7.12.1" }, "devDependencies": { @@ -51,7 +50,7 @@ "@types/webpack-bundle-analyzer": "^4.7.0", "@typescript-eslint/eslint-plugin": "^8.26.1", "@typescript-eslint/parser": "^8.26.1", - "autoprefixer": "^10.4.24", + "autoprefixer": "^10.4.27", "browserslist-config-erb": "^0.0.3", "chalk": "^4.1.2", "concurrently": "^9.1.2", @@ -83,7 +82,7 @@ "jest-environment-jsdom": "^29.7.0", "mini-css-extract-plugin": "^2.9.2", "postcss": "^8.5.6", - "postcss-loader": "^8.2.0", + "postcss-loader": "^8.2.1", "prettier": "^3.5.3", "react-refresh": "^0.16.0", "react-test-renderer": "^19.0.0", @@ -91,6 +90,7 @@ "sass": "^1.86.0", "sass-loader": "^16.0.5", "style-loader": "^4.0.0", + "tailwindcss": "^4.2.1", "terser-webpack-plugin": "^5.3.14", "ts-jest": "^29.2.6", "ts-loader": "^9.5.2", @@ -6129,13 +6129,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@tailwindcss/cli/node_modules/tailwindcss": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz", - "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==", - "dev": true, - "license": "MIT" - }, "node_modules/@tailwindcss/node": { "version": "4.1.18", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", @@ -6164,6 +6157,12 @@ "node": ">=10.13.0" } }, + "node_modules/@tailwindcss/node/node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "license": "MIT" + }, "node_modules/@tailwindcss/oxide": { "version": "4.1.18", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", @@ -6405,6 +6404,12 @@ "tailwindcss": "4.1.18" } }, + "node_modules/@tailwindcss/postcss/node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "license": "MIT" + }, "node_modules/@teamsupercell/typings-for-css-modules-loader": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/@teamsupercell/typings-for-css-modules-loader/-/typings-for-css-modules-loader-2.5.2.tgz", @@ -8890,9 +8895,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.24", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz", - "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", "dev": true, "funding": [ { @@ -8911,7 +8916,7 @@ "license": "MIT", "dependencies": { "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001766", + "caniuse-lite": "^1.0.30001774", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -9826,9 +9831,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001767", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz", - "integrity": "sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==", + "version": "1.0.30001775", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz", + "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==", "dev": true, "funding": [ { @@ -20340,9 +20345,9 @@ } }, "node_modules/postcss-loader": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.2.0.tgz", - "integrity": "sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.2.1.tgz", + "integrity": "sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow==", "dev": true, "license": "MIT", "dependencies": { @@ -20358,7 +20363,7 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "@rspack/core": "0.x || 1.x", + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", "postcss": "^7.0.0 || ^8.0.1", "webpack": "^5.0.0" }, @@ -23780,9 +23785,10 @@ "license": "MIT" }, "node_modules/tailwindcss": { - "version": "4.1.18", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", - "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz", + "integrity": "sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==", + "dev": true, "license": "MIT" }, "node_modules/tapable": { diff --git a/electron-ui/package.json b/electron-ui/package.json index 813fa6d..275a8e0 100644 --- a/electron-ui/package.json +++ b/electron-ui/package.json @@ -22,7 +22,7 @@ "postinstall": "ts-node .erb/scripts/check-native-dep.js && electron-builder install-app-deps && npm run build:dll", "lint": "cross-env NODE_ENV=development eslint . --ext .js,.jsx,.ts,.tsx", "lint:fix": "cross-env NODE_ENV=development eslint . --ext .js,.jsx,.ts,.tsx --fix", - "package": "ts-node ./.erb/scripts/clean.js dist && npm run build && electron-builder --win", + "package": "npm run build && electron-builder build --publish never && npm run build:dll", "rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir release/app", "prestart": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true NODE_OPTIONS=\"-r ts-node/register --no-warnings\" webpack --config ./.erb/configs/webpack.config.main.dev.ts", "start": "ts-node ./.erb/scripts/check-port-in-use.js && npm run prestart && npm run start:renderer", @@ -104,7 +104,6 @@ "socket.io": "^4.8.3", "socket.io-client": "^4.8.3", "socketio": "^1.0.0", - "tailwindcss": "^4.1.18", "wavesurfer.js": "^7.12.1" }, "devDependencies": { @@ -123,7 +122,7 @@ "@types/webpack-bundle-analyzer": "^4.7.0", "@typescript-eslint/eslint-plugin": "^8.26.1", "@typescript-eslint/parser": "^8.26.1", - "autoprefixer": "^10.4.24", + "autoprefixer": "^10.4.27", "browserslist-config-erb": "^0.0.3", "chalk": "^4.1.2", "concurrently": "^9.1.2", @@ -155,7 +154,7 @@ "jest-environment-jsdom": "^29.7.0", "mini-css-extract-plugin": "^2.9.2", "postcss": "^8.5.6", - "postcss-loader": "^8.2.0", + "postcss-loader": "^8.2.1", "prettier": "^3.5.3", "react-refresh": "^0.16.0", "react-test-renderer": "^19.0.0", @@ -163,6 +162,7 @@ "sass": "^1.86.0", "sass-loader": "^16.0.5", "style-loader": "^4.0.0", + "tailwindcss": "^4.2.1", "terser-webpack-plugin": "^5.3.14", "ts-jest": "^29.2.6", "ts-loader": "^9.5.2", @@ -239,7 +239,10 @@ "from": "../audio-service", "to": "audio-service", "filter": [ - "**/*" + "**/*", + "!**/*.json", + "!**/recordings/*", + "!**/src/__pycache__/*" ] }, "./assets/**" diff --git a/electron-ui/release/app/package-lock.json b/electron-ui/release/app/package-lock.json index 9a12e9d..dc9d7e6 100644 --- a/electron-ui/release/app/package-lock.json +++ b/electron-ui/release/app/package-lock.json @@ -1,12 +1,12 @@ { "name": "cliptrim", - "version": "2.0.0", + "version": "2.0.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "cliptrim", - "version": "2.0.0", + "version": "2.0.2", "hasInstallScript": true, "license": "MIT" } diff --git a/electron-ui/release/app/package.json b/electron-ui/release/app/package.json index 54953aa..1cbf63e 100644 --- a/electron-ui/release/app/package.json +++ b/electron-ui/release/app/package.json @@ -1,6 +1,6 @@ { "name": "cliptrim", - "version": "2.0.0", + "version": "2.0.2", "description": "Clip and trim", "license": "MIT", "main": "./dist/main/main.js", diff --git a/electron-ui/src/main/main.ts b/electron-ui/src/main/main.ts index 0c15cbc..0e5ab27 100644 --- a/electron-ui/src/main/main.ts +++ b/electron-ui/src/main/main.ts @@ -132,6 +132,9 @@ const createWindow = async () => { label: 'Quit', click: () => { pythonManager.stop(); + tray?.destroy(); + mainWindow.close(); + mainWindow.destroy(); app.quit(); }, }, @@ -160,9 +163,9 @@ app.on('window-all-closed', () => { app .whenReady() .then(() => { - if (app.isPackaged) { - pythonManager.start(); - } + // if (app.isPackaged) { + pythonManager.start(); + // } createWindow(); app.on('activate', () => { // On macOS it's common to re-create a window in the app when the diff --git a/electron-ui/src/main/service.ts b/electron-ui/src/main/service.ts index 7759355..1274ca3 100644 --- a/electron-ui/src/main/service.ts +++ b/electron-ui/src/main/service.ts @@ -63,6 +63,8 @@ export default class PythonSubprocessManager { stop(): void { if (this.process) { + // for some reason, process.kill() doens't work well with flask. todo: investigate further + // spawn('taskkill', ['/pid', `${this.process.pid}`, '/f', '/t']); this.process.kill(); this.process = null; } diff --git a/electron-ui/test_meta.json b/electron-ui/test_meta.json new file mode 100644 index 0000000..c5894d2 --- /dev/null +++ b/electron-ui/test_meta.json @@ -0,0 +1,421 @@ +[ + { + "name": "Uncategorized", + "id": 0, + "clips": [] + }, + { + "name": "mason", + "id": 1, + "clips": [ + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250105_131700.wav", + "name": "lich", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 27.371372936207585, + "endTime": 30 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250119_173448.wav", + "name": "nic", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 9.897134459955918, + "endTime": 10.62821454812639 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250119_173654.wav", + "name": "racist", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 7.92372881355932, + "endTime": 9.682203389830498 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250120_210843.wav", + "name": "dildo", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 11.227565151875025, + "endTime": 13.20035827476919 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250121_223502.wav", + "name": "latter", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 11.440677966101688, + "endTime": 12.499999999999996 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250124_214433.wav", + "name": "ahh", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 10, + "endTime": 10.656779661016953 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250131_204903.wav", + "name": "tight", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 9.7457627118644, + "endTime": 11.52542372881357 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250308_104030.wav", + "name": "rape", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 3.7923728813559365, + "endTime": 5.677966101694913 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250328_212948.wav", + "name": "wig", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 10.31779661016946, + "endTime": 11.038135593220328 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250419_140818.wav", + "name": "queef", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 12.47881355932203, + "endTime": 13.347457627118642 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250503_183629.wav", + "name": "wood", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 10.82627118644066, + "endTime": 11.546610169491522 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250707_213558.wav", + "name": "bam", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 13.728813559321997, + "endTime": 14.300847457627134 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250707_222904.wav", + "name": "uhh", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 13.199152542372879, + "endTime": 14.830508474576275 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250808_194926.wav", + "name": "rights", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 9.131355932203387, + "endTime": 10.69915254237289 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250809_193435.wav", + "name": "u r wet", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 8.983050847457612, + "endTime": 10.14830508474577 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250809_222039.wav", + "name": "run", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 4.216101694915256, + "endTime": 11.038135593220332 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250814_215842.wav", + "name": "suprise", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 11.927966101694913, + "endTime": 14.300847457627116 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250920_174822.wav", + "name": "my", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 5.736975857687425, + "endTime": 6.202880135535784 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250920_174950.wav", + "name": "whatsup", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 2.870606674248936, + "endTime": 3.3193015062831197 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20251018_211620.wav", + "name": "cheeks", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 10.338983050847464, + "endTime": 12.394067796610184 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20251031_211310.wav", + "name": "michal", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 8.516949152542374, + "endTime": 12.415254237288133 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20251107_222607.wav", + "name": "blegh", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 9.216101694915253, + "endTime": 9.957627118644073 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20251115_201357.wav", + "name": "bohemian", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 9.618644067796604, + "endTime": 11.274508356463695 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20251213_114932.wav", + "name": "electro", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 9.915254237288137, + "endTime": 13.771186440677946 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20260201_111049.wav", + "name": "nword", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 8.834745762711867, + "endTime": 10.911016949152565 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20260206_230124.wav", + "name": "fist", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 12.458333333333336, + "endTime": 13.708333333333327 + } + ] + }, + { + "name": "jake", + "id": 2, + "clips": [ + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250117_194006.wav", + "name": "do it", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 14.152542372881365, + "endTime": 14.936440677966102 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250121_223258.wav", + "name": "cooch", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 8.538135593220337, + "endTime": 10.656779661016952 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250215_214039.wav", + "name": "domestic", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 10.40254237288135, + "endTime": 13.05084745762703 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250412_134821.wav", + "name": "god", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 11.927966101694915, + "endTime": 13.834745762711863 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250606_212121.wav", + "name": "poop\nmyself", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 7.881355932203395, + "endTime": 12.055084745762716 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250719_120451.wav", + "name": "tasmania", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 11.038135593220334, + "endTime": 13.686440677966088 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250822_205916.wav", + "name": "jews", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 11.122881355932197, + "endTime": 12.097457627118638 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20251026_211500.wav", + "name": "terror", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 10.572033898305074, + "endTime": 11.588983050847439 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20251108_170721.wav", + "name": "toon\ntown", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 5.148305084745765, + "endTime": 8.411016949152545 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20260103_222442.wav", + "name": "whooping", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 7.309322033898307, + "endTime": 9.046610169491542 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20260107_210712.wav", + "name": "no head", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 8.050847457627118, + "endTime": 9.279661016949134 + } + ] + }, + { + "name": "isaac", + "id": 3, + "clips": [ + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250121_203752.wav", + "name": "blow", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 10.800018422991895, + "endTime": 11.453804347826084 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250125_002323.wav", + "name": "frying", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 9.337093249867106, + "endTime": 11.49862694147519 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250125_230923.wav", + "name": "cum", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 8.728813559322031, + "endTime": 9.894067796610173 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250126_131833.wav", + "name": "liquid", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 10.487288135593221, + "endTime": 11.86440677966102 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250131_220452.wav", + "name": "nuts", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 8.135593220338984, + "endTime": 8.983050847457633 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20251101_205146.wav", + "name": "hard", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 8.283898305084744, + "endTime": 10.720338983050835 + } + ] + }, + { + "name": "nat", + "id": 4, + "clips": [ + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250125_171754.wav", + "name": "hot dog", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 8.644067796610168, + "endTime": 11.05932203389828 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250131_212540.wav", + "name": "plink", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 10.40254237288135, + "endTime": 12.012711864406779 + } + ] + }, + { + "name": "misc", + "id": 5, + "clips": [ + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250223_110900.wav", + "name": "bounce", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 2.521186440677966, + "endTime": 7.4152542372881225 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20250228_221700.wav", + "name": "avada", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 1.8220338983050826, + "endTime": 5.338983050847453 + }, + { + "filename": "C:\\Users\\mickl\\Music\\clips\\original\\audio_capture_20251212_192830.wav", + "name": "sandler", + "playbackType": "playOverlap", + "volume": 1, + "startTime": 9.576271186440678, + "endTime": 12.394067796610187 + } + ] + } +]