From c0692b4701982ef90a8a820efc9f3ffa0915d917 Mon Sep 17 00:00:00 2001 From: Eliastik <26941242+Eliastik@users.noreply.github.com> Date: Sun, 31 Mar 2024 18:59:44 +0200 Subject: [PATCH] Version 2.2.0 --- README.md | 32 ++++++++- ROADMAP.md | 4 +- package-lock.json | 138 ++++++++++++++++++++++--------------- package.json | 10 +-- src/app/model/Constants.ts | 6 +- 5 files changed, 124 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index 8181be7..462af5a 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ This program uses the Web Audio API. A browser supporting this API is therefore ## About -* Version: 2.1.1 (2/8/2024) +* Version: 2.2.0 (3/31/2024) * Made in France by Eliastik - [eliastiksofts.com](http://eliastiksofts.com) - Contact : [eliastiksofts.com/contact](http://eliastiksofts.com/contact) * License: GNU GPLv3 (see the LICENCE.txt file) @@ -37,6 +37,20 @@ This program uses the Web Audio API. A browser supporting this API is therefore ## Changelog +* Version 2.2.0 (3/31/2024): + - The percentage of audio processing as well as the estimated remaining audio processing time is now displayed in the "Audio processing in progress" popup; + - It's now possible to cancel audio processing in progress; + - When opening an audio file, no initial processing is now performed at the beginning, to speed up application use. This behavior can be reactivated from the settings; + - Modified audio can now be saved in MP3 format; + - It's now possible to pause or play audio by pressing the Space key; + - Small adjustments have been made to the user interface (larger buttons on larger screens, for example); + - Bug fixes: + - An error message is now displayed if no microphone has been found when clicking on the "Record via microphone" button from the application's home screen; + - Fixed a rare crash with the 8-bit Effect filter; + - Fixed a bug in the audio player when compatibility mode was disabled and audio processing launched, or when the sampling frequency was modified; + - Minor code improvements; + - Dependencies updated. + * Version 2.1.1 (08/02/2024) : - Enhanced filters: - It's now possible to import a custom environment for the Reverb filter; @@ -168,7 +182,7 @@ Ce programme utilise la Web Audio API. Un navigateur supportant cette API est do ## À propos du programme -* Version du programme : 2.1.1 (08/02/2024) +* Version du programme : 2.2.0 (31/03/2024) * Made in France by Eliastik - [eliastiksofts.com](http://eliastiksofts.com) - Contact : [eliastiksofts.com/contact](http://eliastiksofts.com/contact) * Licence : GNU GPLv3 (voir le fichier LICENCE.txt) @@ -190,6 +204,20 @@ Ce programme utilise la Web Audio API. Un navigateur supportant cette API est do ## Journal des changements +* Version 2.2.0 (31/03/2024) : + - Le pourcentage de traitement audio ainsi que le temps de traitement audio restant estimé s'affiche désormais dans la popup "Traitement audio en cours" ; + - Il est désormais possible d'annuler un traitement audio en cours ; + - Lors de l'ouverture d'un fichier audio, aucun traitement initial n'est désormais effectué au début pour accélérer l'utilisation de l'application. Ce comportement peut être réactivé depuis les paramètres ; + - Il est désormais possible de sauvegarder l'audio modifié au format MP3 ; + - Il est désormais possible de mettre en pause ou de jouer l'audio en appuyant sur la touche Espace ; + - Des petits ajustements de l'interface utilisateur ont été apportés (boutons plus gros sur les grands écrans par exemple) ; + - Correction de bugs : + - Un message d'erreur s'affiche désormais si aucun microphone n'a été trouvé lors du clic sur le bouton "Enregistrer via le micro" depuis l'écran d'accueil de l'application ; + - Correction d'un plantage rare avec le filtre Effet 8-bit ; + - Correction d'un bug du lecteur audio lorsque le mode de compatibilité était désactivé puis un traitement audio lancé, ou lorsque la fréquence d'échantillonage était modifiée ; + - Petites améliorations mineures du code ; + - Mise à jour des dépendances. + * Version 2.1.1 (08/02/2024) : - Amélioration de certains filtres : - Il est désormais possible d'importer un environnement personnalisé pour le filtre Reverbération ; diff --git a/ROADMAP.md b/ROADMAP.md index 8837fd5..ee76fb2 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -64,11 +64,11 @@ * [x] - (Minor) 8-bit effect randomly crash in compatibility mode when changing filter settings * [x] - (Minor) No error message when no microphone is found for the recorder. Display an error message to fix the issue * [x] - (Minor) Enable reverb filter when choosing custom environment, and no other environment was downloaded (network error) -* [ ] - (Medium) Bug when changing recorder settings on Chrome mobile -* [ ] - (Very minor) Fix sourcemaps for libraries + worklets copy (cache) * [ ] - (Major) Fix Soundtouch Worklet audio speed adjustment not working (as now, fallback to classic script processor node, not working in Firefox) - use another library for time stretch? * [ ] - If fixed: enable Soundtouch Worklet in compatibility/direct mode +* [ ] - (Medium) Bug when changing recorder settings on Chrome mobile * [ ] - (Medium) Vocoder doesn't work well on sample rate > 96,000 Hz +* [ ] - (Very minor) Fix sourcemaps for libraries + worklets copy (cache) ### Would be good but not important diff --git a/package-lock.json b/package-lock.json index 653a82a..ac7c76b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "simple-voice-changer", - "version": "2.1.1", + "version": "2.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "simple-voice-changer", - "version": "2.1.1", + "version": "2.2.0", "dependencies": { - "@eliastik/simple-sound-studio-components": "^2.1.1", - "@eliastik/simple-sound-studio-lib": "^2.1.1", + "@eliastik/simple-sound-studio-components": "^2.2.0", + "@eliastik/simple-sound-studio-lib": "^2.2.0", "i18next": "^23.10.1", "lodash": "^4.17.21", "next": "^14.1.4", @@ -19,9 +19,9 @@ "semver": "^7.6.0" }, "devDependencies": { - "@types/audioworklet": "^0.0.53", + "@types/audioworklet": "^0.0.54", "@types/lodash": "^4.17.0", - "@types/node": "^20.11.30", + "@types/node": "^20.12.2", "@types/react": "^18.2.70", "@types/react-dom": "^18.2.22", "@types/semver": "^7.5.8", @@ -1863,38 +1863,38 @@ } }, "node_modules/@eliastik/simple-sound-studio-components": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@eliastik/simple-sound-studio-components/-/simple-sound-studio-components-2.1.1.tgz", - "integrity": "sha512-Fs6k4AWuLFfcxiQAYkiRcobFSYshRwwSE2SkuX/anGWKxgL3YezEGOHuWjOAiWngewBh9KaVXoAcEjy/kunzOw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@eliastik/simple-sound-studio-components/-/simple-sound-studio-components-2.2.0.tgz", + "integrity": "sha512-U2WqJdX52LACXVNn2mral+5O/5dT/mX5zahONzxpb+r4ssdG/Sf8AeOZT2ag97HqoDDLmkJOjlO/MC/kPb+iCw==", "dependencies": { - "@eliastik/simple-sound-studio-lib": "^2.1.1", - "i18next": "^23.8.2", + "@eliastik/simple-sound-studio-lib": "^2.2.0", + "i18next": "^23.10.1", "lodash": "^4.17.21", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-i18next": "^14.0.5" + "react-i18next": "^14.1.0" }, "peerDependencies": { "@eliastik/simple-sound-studio-lib": "^2.1.1", - "@types/audioworklet": "^0.0.53", - "i18next": "^23.8.2", + "@types/audioworklet": "^0.0.54", + "i18next": "^23.10.1", "lodash": "^4.17.21", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-i18next": "^14.0.5" + "react-i18next": "^14.1.0" } }, "node_modules/@eliastik/simple-sound-studio-lib": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@eliastik/simple-sound-studio-lib/-/simple-sound-studio-lib-2.1.1.tgz", - "integrity": "sha512-IsHV2+gscD8MxiUSR/FJBCfGOFNCg/oPauC0pdiO4pg52C4b4cnt5PhdEHgnP4XJiD+TvEJl4wuPyUztX9P6vQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@eliastik/simple-sound-studio-lib/-/simple-sound-studio-lib-2.2.0.tgz", + "integrity": "sha512-hatB8JfH7pFxswbRSJHf/wVyCTIvXUB0CpdglMsH7VBD4yJi15RaLqAczAnGB1ziKjODnbpg2iRSgeDiP4ZBCQ==", "dependencies": { - "inline-worker": "^1.1.0", + "lamejs": "^1.2.1", "lodash": "^4.17.21", "soundtouchjs": "^0.1.30" }, "peerDependencies": { - "@types/audioworklet": "^0.0.53" + "@types/audioworklet": "^0.0.54" } }, "node_modules/@eslint-community/eslint-utils": { @@ -2146,6 +2146,28 @@ "glob": "10.3.10" } }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@next/swc-darwin-arm64": { "version": "14.1.4", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz", @@ -2406,9 +2428,9 @@ "dev": true }, "node_modules/@rushstack/eslint-patch": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.9.0.tgz", - "integrity": "sha512-AAWymnpvHbGty1BmgbdfbqQDboXs6xN6h2yAacO4yKVyyUUBnpYkp+P9jjPrV9zrAGw7JVVriRtGOHPInnfjZQ==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz", + "integrity": "sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==", "dev": true }, "node_modules/@sindresorhus/merge-streams": { @@ -2444,9 +2466,9 @@ } }, "node_modules/@types/audioworklet": { - "version": "0.0.53", - "resolved": "https://registry.npmjs.org/@types/audioworklet/-/audioworklet-0.0.53.tgz", - "integrity": "sha512-glsfnbwNb3Iom3Qkvd8c8Aj4N0X+UVVGuCK/X8Qci1hfV+gsY8C72ud6ScJfJYE3g1GYY2Jq3kihjXo5WuH6qw==" + "version": "0.0.54", + "resolved": "https://registry.npmjs.org/@types/audioworklet/-/audioworklet-0.0.54.tgz", + "integrity": "sha512-WR1XcwT2LhCaUiKDDgHdTjrVjoBZnTz6FhszeIKgY9i2UYfIRKtnNvqToUDnbCPXBpVuu4Qo5+mMJt+wDphRew==" }, "node_modules/@types/eslint": { "version": "8.56.6", @@ -2512,9 +2534,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "version": "20.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz", + "integrity": "sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -2537,9 +2559,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.22", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz", - "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==", + "version": "18.2.23", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz", + "integrity": "sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==", "dev": true, "dependencies": { "@types/react": "*" @@ -3596,9 +3618,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001600", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", - "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "version": "1.0.30001603", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001603.tgz", + "integrity": "sha512-iL2iSS0eDILMb9n5yKQoTBim9jMZ0Yrk8g0N9K7UzYyWnfIKzXBZD5ngpM37ZcL/cv0Mli8XtVMRYMQAfFpi5Q==", "funding": [ { "type": "opencollective", @@ -4221,9 +4243,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.719", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.719.tgz", - "integrity": "sha512-FbWy2Q2YgdFzkFUW/W5jBjE9dj+804+98E4Pup78JBPnbdb3pv6IneY2JCPKdeKLh3AOKHQeYf+KwLr7mxGh6Q==", + "version": "1.4.722", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.722.tgz", + "integrity": "sha512-5nLE0TWFFpZ80Crhtp4pIp8LXCztjYX41yUcV6b+bKR2PqzjskTMOOlBi1VjBHlvHwS+4gar7kNKOrsbsewEZQ==", "dev": true }, "node_modules/emoji-regex": { @@ -4255,9 +4277,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", - "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -4299,11 +4321,11 @@ "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.7", + "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.5", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.15" }, @@ -5391,16 +5413,16 @@ } }, "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -5671,11 +5693,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/inline-worker": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/inline-worker/-/inline-worker-1.1.0.tgz", - "integrity": "sha512-2nlxBGg5Uoop6IRco9wMzlAz62690ylokrUDg3IaCi9bJaq0HykbWlRtRXgvSKiBNmCBGXnOCFBkIFjaSGJocA==" - }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", @@ -6364,6 +6381,14 @@ "json-buffer": "3.0.1" } }, + "node_modules/lamejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/lamejs/-/lamejs-1.2.1.tgz", + "integrity": "sha512-s7bxvjvYthw6oPLCm5pFxvA84wUROODB8jEO2+CE1adhKgrIvVOlmMgY8zyugxGrvRaDHNJanOiS21/emty6dQ==", + "dependencies": { + "use-strict": "1.0.1" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", @@ -8891,6 +8916,11 @@ "punycode": "^2.1.0" } }, + "node_modules/use-strict": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/use-strict/-/use-strict-1.0.1.tgz", + "integrity": "sha512-IeiWvvEXfW5ltKVMkxq6FvNf2LojMKvB2OCeja6+ct24S1XOmQw2dGr2JyndwACWAGJva9B7yPHwAmeA9QCqAQ==" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 8a19e9c..e4ec2fc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "simple-voice-changer", - "version": "2.1.1", + "version": "2.2.0", "private": true, "scripts": { "dev": "next dev", @@ -9,8 +9,8 @@ "lint": "next lint" }, "dependencies": { - "@eliastik/simple-sound-studio-components": "^2.1.1", - "@eliastik/simple-sound-studio-lib": "^2.1.1", + "@eliastik/simple-sound-studio-components": "^2.2.0", + "@eliastik/simple-sound-studio-lib": "^2.2.0", "i18next": "^23.10.1", "lodash": "^4.17.21", "next": "^14.1.4", @@ -20,9 +20,9 @@ "semver": "^7.6.0" }, "devDependencies": { - "@types/audioworklet": "^0.0.53", + "@types/audioworklet": "^0.0.54", "@types/lodash": "^4.17.0", - "@types/node": "^20.11.30", + "@types/node": "^20.12.2", "@types/react": "^18.2.70", "@types/react-dom": "^18.2.22", "@types/semver": "^7.5.8", diff --git a/src/app/model/Constants.ts b/src/app/model/Constants.ts index 4e5c8db..554bd07 100644 --- a/src/app/model/Constants.ts +++ b/src/app/model/Constants.ts @@ -3,13 +3,13 @@ const Constants = { APP_BY: "By Eliastik's Softs", DEFAULT_LANGUAGE: "en", FILES_DOWNLOAD_NAME: "simple_voice_changer", - APP_VERSION: "2.1.1", - APP_VERSION_DATE: "2/8/2024", + APP_VERSION: "2.2.0", + APP_VERSION_DATE: "3/31/2024", UPDATER_URI: process.env.NEXT_PUBLIC_UPDATER_URI || "https://www.eliastiksofts.com/simple-voice-changer/update.json", OFFICIAL_WEBSITE: "https://www.eliastiksofts.com/simple-voice-changer/", SOURCE_CODE: "https://github.com/Eliastik/simple-voice-changer", APP_LICENSE: "GNU GPL v3", - RELEASE_LINK: "https://github.com/Eliastik/simple-voice-changer/releases/tag/2.1.1", + RELEASE_LINK: "https://github.com/Eliastik/simple-voice-changer/releases/tag/2.2.0", AUDIO_BUFFERS_TO_FETCH: ["impulse_response.wav","modulator.mp3"], SERVICE_WORKER_SCOPE: process.env.NEXT_PUBLIC_BASE_PATH, PREFERENCES_KEYS: {