diff --git a/.circleci/config.yml b/.circleci/config.yml index 63fa3e80..ad5b7f54 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,14 +2,18 @@ version: 2.1 orbs: # adds orbs to your configuration jira: circleci/jira@1.0.5 # invokes the Jira orb, making its commands accessible branches: - ignore: i10n-develop + ignore: feature/i10n jobs: build: working_directory: ~/Cider docker: - image: circleci/node:16 + steps: - checkout + - run: + name: Set App Version + command: echo "export APP_VERSION=$(grep '"version":.*' package.json | cut -d '"' -f 4 | head -1)" >> $BASH_ENV - run: name: Update Package Managers command: sudo npm update -g npm yarn @@ -29,26 +33,32 @@ jobs: name: Install system build dependencies command: | sudo apt-get update -y + curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null sudo apt-get install -y dpkg fakeroot wine64 sudo dpkg --add-architecture i386 sudo apt-get update -y sudo apt-get install -y wine32 + sudo apt install -y gh - run: - name: Append Commit BuildID to Version - command: yarn circle:append-bid + name: Fix Versioning and Add Channel + command: yarn circle:script + - run: + name: TypeScript Compile + command: yarn build - run: name: Generate Builds (Linux) - command: yarn dist -l -p never + command: yarn electron-builder -l -p never post-steps: - jira/notify - run: name: Generate Builds (Windows) - command: yarn dist -w --x64 -p never + command: yarn electron-builder -w --x64 -p never post-steps: - jira/notify - run: name: Generate Builds (Winget) - command: yarn winget -p never + command: yarn electron-builder --win -c winget.json -p never post-steps: - jira/notify - run: @@ -62,14 +72,8 @@ jobs: mv ~/Cider/dist/*.yml ~/Cider/dist/artifacts mv ~/Cider/dist/*.blockmap ~/Cider/dist/artifacts - store_artifacts: - path: ~/Cider/dist/artifacts - publish-github-release: - docker: - - image: cibuilds/github:0.10 - steps: - - attach_workspace: - at: ~/Cider/dist/artifacts + path: ~/Cider/dist/artifacts - run: - name: "Publish Release on GitHub" + name: Publish Release command: | - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r "cider-releases" -c ${CIRCLE_SHA1} -n "${CIRCLE_BRANCH} build #${CIRCLE_BUILD_NUM}" -b "This release is made automatically from [this commit](https://github.com/ciderapp/Cider/commit/${CIRCLE_SHA1}) using [this CircleCI job.](${CIRCLE_BUILD_URL})" ~/Cider/dist/artifacts + gh release create "v${APP_VERSION}.${CIRCLE_BUILD_NUM}" --title "Cider Version ${APP_VERSION} - Build ${CIRCLE_BUILD_NUM} (${CIRCLE_BRANCH})" --generate-notes -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap diff --git a/README.md b/README.md index ae322b4d..1966f643 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,8 @@ [![Get it from Windows Package Manager](https://custom-icon-badges.herokuapp.com/badge/Get_It_via_Winget-100000?style=for-the-badge&logo=winstall)](https://winstall.app/apps/CiderCollective.Cider.Nightly) +[![Get it from Flathub](https://img.shields.io/badge/Get_It_From_Flathub-100000?style=for-the-badge&logo=flathub)](https://flathub.org/apps/details/sh.cider.Cider) + [![Get it from the AUR](https://img.shields.io/badge/Get_It_From_The_AUR-100000?style=for-the-badge&logo=archlinux)](https://aur.archlinux.org/packages/cider) +[![Get it from Flathub](https://img.shields.io/badge/Get_It_From_Flathub-100000?style=for-the-badge&logo=flathub)](https://flathub.org/apps/details/sh.cider.Cider) + ### Compiling and Configuration For more information surrounding configuration, compiling and other developer documentation, see the [compilation docs](https://cider.sh/compile.html). diff --git a/package.json b/package.json index 893aca7c..3dbf52fc 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "license": "AGPL-3.0", "main": "./build/index.js", "author": "Cider Collective (https://cider.sh)", - "repository": "https://github.com/ciderapp/Cider.git", + "repository": "github:ciderapp/Cider", "bugs": { "url": "https://github.com/ciderapp/Cider/issues?q=is%3Aopen+is%3Aissue+label%3Abug" }, @@ -32,7 +32,7 @@ "winget": "yarn build && electron-builder --win -c winget.json", "msft": "yarn build && electron-builder -c msft-package.json", "postinstall": "electron-builder install-app-deps", - "circle:append-bid": "node resources/appendCommitToVersion" + "circle:script": "node resources/circle" }, "dependencies": { "@sentry/electron": "^3.0.2", @@ -69,7 +69,7 @@ "youtube-search-without-api-key": "^1.0.7" }, "devDependencies": { - "@types/discord-rpc": "^4.0.0", + "@types/discord-rpc": "4.0.0", "@types/express": "^4.17.13", "@types/qrcode-terminal": "^0.12.0", "@types/ws": "^8.5.1", @@ -105,9 +105,9 @@ } ], "build": { - "electronVersion": "16.0.10+wvcus", + "electronVersion": "16.0.7", "electronDownload": { - "version": "16.0.10+wvcus", + "version": "16.0.7+wvcus", "mirror": "https://github.com/castlabs/electron-releases/releases/download/v" }, "appId": "cider", diff --git a/resources/appendCommitToVersion.js b/resources/appendCommitToVersion.js deleted file mode 100644 index ef40f330..00000000 --- a/resources/appendCommitToVersion.js +++ /dev/null @@ -1,21 +0,0 @@ -if (!process.env['CIRCLECI']) { - console.log(`[CIRCLECI SCRIPT] CircleCI not found... Aborting script`) - return -} - -let fs = require('fs') - -var data = fs.readFileSync('package.json'); -var package = JSON.parse(data); - -pvers = package.version.match(/\d+\./g) - -// https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables -package.version = `${pvers[0]}${pvers[1]}${process.env['CIRCLE_BUILD_NUM']}` - - -fs.writeFile('package.json', JSON.stringify(package), err => { - // error checking - if(err) throw err; - console.log("VERSION CHANGED"); -}); diff --git a/resources/circle.js b/resources/circle.js new file mode 100644 index 00000000..dcf1d0ef --- /dev/null +++ b/resources/circle.js @@ -0,0 +1,53 @@ + + +if (!process.env['CIRCLECI']) { + console.log(`[CIRCLECI SCRIPT] CircleCI not found... Aborting script`) + return +} + +let fs = require('fs') + + +var data = fs.readFileSync('package.json'); +var package = JSON.parse(data); + + + +let channel; +if (process.env['CIRCLE_BRANCH'] === 'lts') { + channel = 'latest' +} else if (process.env['CIRCLE_BRANCH'] === 'main') { + channel = 'beta' +} else if (process.env['CIRCLE_BRANCH'] === 'develop') { + channel = 'alpha' +} else { + channel = process.env['CIRCLE_BRANCH'] // It won't have auto update support +} + + + +// https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables +var pvers = package.version.split('.') +package.version = `${pvers[0]}.${pvers[1]}.${pvers[2]}-${channel}.${process.env['CIRCLE_BUILD_NUM']}` +// package.build.channel = channel +package.publish = { + "provider": "github", + "repo": "cider-releases", + "owner": "ciderapp", + "vPrefixedTagName": true, + "tag": `v${package.version}`, + "channel": channel, + "releaseType": "release" +} + +let {exec} = require('child_process') +exec('echo $APP_VERSION', {env: {'APP_VERSION': package.version}}, function (error, stdout, stderr) +{ + console.log(stdout, stderr, error); +}); +fs.writeFile('package.json', JSON.stringify(package), err => { + // error checking + if(err) throw err; + console.log(`VERSION CHANGED TO ${package.version}`); +}); + diff --git a/resources/license.json b/resources/license.json index 0451b856..8274931d 100644 --- a/resources/license.json +++ b/resources/license.json @@ -8,4 +8,4 @@ ] -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/i18n/README.md b/src/i18n/README.md index 7adfdddd..8689d0b4 100644 --- a/src/i18n/README.md +++ b/src/i18n/README.md @@ -193,4 +193,7 @@ Update 10/3/2022 14:00 UTC * `settings.header.window`: Added for `en_US` * `settings.header.window.description`: Added for `en_US` * `settings.option.window.openOnStartup`: Added for `en_US` -* `settings.option.window.openOnStartup.hidden`: Added for `en_US` \ No newline at end of file +* `settings.option.window.openOnStartup.hidden`: Added for `en_US` + +Update 20/3/2022 00:01 UTC +* `term.creditDesignedBy`: Added for `en_US` \ No newline at end of file diff --git a/src/i18n/cz_CZ.json b/src/i18n/cz_CZ.json index b94d4f8c..64c0e9b5 100644 --- a/src/i18n/cz_CZ.json +++ b/src/i18n/cz_CZ.json @@ -225,7 +225,7 @@ "settings.option.audio.enableAdvancedFunctionality": "Povolit pokročilé funkce", "settings.option.audio.enableAdvancedFunctionality.description": "Povolení funkce AudioContext umožní rozšířené zvukové funkce, jako je normalizace zvuku, ekvalizéry a vizualizéry, ale na některých systémech to může způsobit zadrhávání ve zvukových stopách.", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoakustická vylepšení, díky nimž vše zní bohatěji a živěji | Navrhl Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoakustická vylepšení, díky nimž vše zní bohatěji a živěji.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Síla CAP", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Změní sílu zpracování zvuku. (Agresivita může vést k nežádoucím výsledkům)", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard", diff --git a/src/i18n/de_DE.json b/src/i18n/de_DE.json index 85ceac31..e1c1a708 100644 --- a/src/i18n/de_DE.json +++ b/src/i18n/de_DE.json @@ -230,7 +230,7 @@ "settings.option.audio.enableAdvancedFunctionality": "Akiviere erweiterte Funktionalität", "settings.option.audio.enableAdvancedFunctionality.description": "Das Aktivieren der erweiterten Funktionalität ermöglicht spezielle Features wie Audio-Normalisierung, Equalizer und Visualizer, jedoch könnte dies auf einigen Systemen zu Aussetzern in der Musik führen.", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoakustische Verbesserungen die die Musik lebensechter erscheinen lassen | Designed by Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoakustische Verbesserungen die die Musik lebensechter erscheinen lassen.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP ist nicht mit räumlichem Audio kompatibel. Bitte deaktiviere räumliches Audio zuerst.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP-Stärke", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Ändert die Stärke der Nachbearbeitung. (Aggressiv könnte zu ungewünschten Änderungen führen)", diff --git a/src/i18n/en_OWO.json b/src/i18n/en_OWO.json index 1a599cd1..442023e5 100644 --- a/src/i18n/en_OWO.json +++ b/src/i18n/en_OWO.json @@ -293,7 +293,7 @@ "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Smooth", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Wawm", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cidew Adwenyawinye Pwocessow\u2122\ufe0f", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes evewything sound both wichew and mowe wivewy | Designyed by Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes evewything sound both wichew and mowe wivewy.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is nyot compatibwe with Spatiawization. Pwease disabwe Spatiawization to continyue.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Stwength", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the stwength of the pwocessing donye to the audio. (Aggwessive may yiewd undesiwabwe wesuwts)", diff --git a/src/i18n/en_QUK.json b/src/i18n/en_QUK.json index d0d12691..4a61b170 100644 --- a/src/i18n/en_QUK.json +++ b/src/i18n/en_QUK.json @@ -233,7 +233,7 @@ "settings.option.audio.enableAdvancedFunctionality": "Enable Advanced Functionality", "settings.option.audio.enableAdvancedFunctionality.description": "Enabling AudioContext functionality will allow for extended audio features like Audio Normalization , Equalizers and Visualizers, however on some systems this may cause stuttering in audio tracks.", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively | Designed by Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is not compatible with Spatialization. Please disable Spatialization to continue.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)", diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index 2e0f5e81..27c766a8 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -174,6 +174,7 @@ "term.plays": "Plays", "term.topGenres": "Top Genres", "term.confirmLogout": "Are you sure you want to logout?", + "term.creditDesignedBy": "Designed by ${authorUsername}", "home.title": "Home", "home.recentlyPlayed": "Recently Played", "home.recentlyAdded": "Recently Added", @@ -293,7 +294,7 @@ "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Smooth", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Warm", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively | Designed by Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is not compatible with Spatialization. Please disable Spatialization to continue.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)", @@ -301,6 +302,7 @@ "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggressive", "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalization", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience.", + "settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Managed by Audio Lab", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialization", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialize audio and make audio more 3-dimensional (note: This is not Dolby Atmos)", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization", diff --git a/src/i18n/hi_IN.json b/src/i18n/hi_IN.json index 2837fd31..a0d77dde 100644 --- a/src/i18n/hi_IN.json +++ b/src/i18n/hi_IN.json @@ -225,7 +225,7 @@ "settings.option.audio.enableAdvancedFunctionality": "Enable Advanced Functionality", "settings.option.audio.enableAdvancedFunctionality.description": "Enabling AudioContext functionality will allow for extended audio features like Audio Normalization , Equalizers and Visualizers, however on some systems this may cause stuttering in audio tracks.", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively | Designed by Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard", diff --git a/src/i18n/hu_HU.json b/src/i18n/hu_HU.json index 21853616..7a791f07 100644 --- a/src/i18n/hu_HU.json +++ b/src/i18n/hu_HU.json @@ -265,7 +265,7 @@ "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Smooth", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Warm", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Pszichoakusztikus Módosítások amik minden hangot felerősítenek és ütősebbé tesznek | Készítette Maikiwi", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Pszichoakusztikus Módosítások amik minden hangot felerősítenek és ütősebbé tesznek", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "A CAP nem kompatibilis a Térbeli Hanggal. Kapcsold ki a Térbeli Hangot a folytatáshoz.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Erősség", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Megváltoztatja a hangra végzett feldolgozás erősségét. (Az Agresszív mód nemkívánatos eredményeket hozhat!)", diff --git a/src/i18n/in_ID.json b/src/i18n/in_ID.json index d6b5ea25..8f257626 100644 --- a/src/i18n/in_ID.json +++ b/src/i18n/in_ID.json @@ -225,7 +225,7 @@ "settings.option.audio.enableAdvancedFunctionality": "Aktifkan Fungsi Lanjutan", "settings.option.audio.enableAdvancedFunctionality.description": "Mengaktifkan fungsionalitas AudioContext memungkinkan fitur audio lanjutan seperti Normalisasi Audio, Equalizer dan Visualizer. Namun pada beberapa perangkat dapat menyebabkan tersendatnya audio.", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Peningkatan Psikoakustik yang membuat semuanya terdengar lebih jelas dan lebih hidup | Dirancang oleh Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Peningkatan Psikoakustik yang membuat semuanya terdengar lebih jelas dan lebih hidup.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Kekuatan CAP", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Mengubah kekuatan pemrosesan yang dilakukan pada audio. (Agresif dapat menghasilkan hasil yang tidak diinginkan)", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standar", diff --git a/src/i18n/ko_KR.json b/src/i18n/ko_KR.json index 821b2a55..4c8aea89 100644 --- a/src/i18n/ko_KR.json +++ b/src/i18n/ko_KR.json @@ -279,7 +279,7 @@ "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "부드러움", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "따뜻함", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "모든 소리를 더욱 풍부하고 생생하게 만드는 음향 심리학적 향상입니다. | Designed by Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "모든 소리를 더욱 풍부하고 생생하게 만드는 음향 심리학적 향상입니다.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP는 공간화와 호환되지 않습니다. 계속하려면 공간화를 비활성화하십시오.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP 강도", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "오디오 처리 강도를 변경합니다. (적극적으로 설정 시 바람직하지 않은 결과를 초래할 수 있습니다.)", diff --git a/src/i18n/pt_BR.json b/src/i18n/pt_BR.json index 4559219f..4203ec94 100644 --- a/src/i18n/pt_BR.json +++ b/src/i18n/pt_BR.json @@ -219,7 +219,7 @@ "settings.option.audio.enableAdvancedFunctionality": "Ativar configurações avancadas", "settings.option.audio.enableAdvancedFunctionality.description": "Habilitar a funcionalidade AudioContext permitirá recursos de áudio estendidos, como Normalização de Áudio , Equalizadores e Visualizadores. No entanto, em alguns sistemas, isso pode causar travamentos nas faixas de áudio.", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Melhoras psicoacusticas que fazem com que tudo soe mais vivo | feito por Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Melhoras psicoacusticas que fazem com que tudo soe mais vivo.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP não é compativel com Áudio Espacial. Por favor, desative-o para continuar.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Potência do CAP", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Muda a potência do processamento feito no áudio. (a função Agressiva pode levar a resultados não desejados.)", diff --git a/src/i18n/ru_RU.json b/src/i18n/ru_RU.json index 3b686a5b..fbd5e1df 100644 --- a/src/i18n/ru_RU.json +++ b/src/i18n/ru_RU.json @@ -249,7 +249,7 @@ "settings.option.audio.enableAdvancedFunctionality": "Включить расширенный функционал", "settings.option.audio.enableAdvancedFunctionality.description": "Включение функции AudioContext позволит использовать расширенные функции звука, такие как нормализация звука, эквалайзеры и визуализаторы, однако в некоторых системах это может вызвать заикание звуковых дорожек.", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Психоакустические улучшения, благодаря которым все звучит богаче и живее | Разработано Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Психоакустические улучшения, благодаря которым все звучит богаче и живее.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP не совместим с пространственным звучанием. Пожалуйста, отключите пространственное звучание, чтобы продолжить.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Режим CAP", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Изменяет режим обработки звука. (Режим агрессии может привести к нежелаемым результатам)", diff --git a/src/i18n/sk_SK.json b/src/i18n/sk_SK.json index a16df361..718e7148 100644 --- a/src/i18n/sk_SK.json +++ b/src/i18n/sk_SK.json @@ -196,7 +196,7 @@ "settings.option.audio.enableAdvancedFunctionality": "Zapnút Pokročilé Nastavenia Zvuku", "settings.option.audio.enableAdvancedFunctionality.description": "Zapnutie AudioContext funkcionality dovolí rozšírené funkcie zvuku ako Zvuková Normalizávia , Equalizéry a Visualízery, ale na niektorých systémoch to može spôsobiť problémy so zvukom.", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoakustické Vylepšenia ktoré urobia zvuk viac bohatý a živý | Urobil Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoakustické Vylepšenia ktoré urobia zvuk viac bohatý a živý.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Sila", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Zmení silu CAP (Agresívná môže spôsobiť nežiadané výsledky)", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Štandardná", diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index 73966b24..73656dc8 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -174,6 +174,7 @@ "term.plays": "Plays", "term.topGenres": "Top Genres", "term.confirmLogout": "Are you sure you want to logout?", + "term.creditDesignedBy": "Designed by ${authorUsername}", "home.title": "Home", "home.recentlyPlayed": "Recently Played", "home.recentlyAdded": "Recently Added", @@ -293,7 +294,7 @@ "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Smooth", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Warm", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively | Designed by Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoacoustic Enhancements that makes everything sound both richer and more lively.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is not compatible with Spatialization. Please disable Spatialization to continue.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)", @@ -301,6 +302,7 @@ "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggressive", "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalization", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience.", + "settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Managed by Audio Lab", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialization", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialize audio and make audio more 3-dimensional (note: This is not Dolby Atmos)", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization", diff --git a/src/i18n/vi_VN.json b/src/i18n/vi_VN.json index 7a3f53a2..fc3b667b 100644 --- a/src/i18n/vi_VN.json +++ b/src/i18n/vi_VN.json @@ -228,7 +228,7 @@ "settings.option.audio.enableAdvancedFunctionality": "Kích hoạt chính năng nâng cao", "settings.option.audio.enableAdvancedFunctionality.description": "Bật các chức năng nâng cao sẽ kích hoạt các chức năng như EQ, Chuẩn hoá âm lượng hay Visualizer, tuy nhiên có thể sẽ ảnh hưởng tới chất lượng âm thanh", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Các tinh chỉnh về âm thanh giúp cho nhạc của bạn ấm và rõ hơn | Tạo bởi Maikiwi.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Các tinh chỉnh về âm thanh giúp cho nhạc của bạn ấm và rõ hơn.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP không tương thích với Âm thanh đa chiều. Hãy tắt Âm thanh đa chiều để kích hoạt.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Chỉnh mức độ ảnh hưởng của CAP đến âm thanh. (Chế độ Mạnh có thể ảnh hưởng đến âm thanh của bạn)", diff --git a/src/i18n/zh_HK.json b/src/i18n/zh_HK.json index 87fee92d..b89a8b42 100644 --- a/src/i18n/zh_HK.json +++ b/src/i18n/zh_HK.json @@ -231,7 +231,7 @@ "settings.option.audio.enableAdvancedFunctionality": "進階功能", "settings.option.audio.enableAdvancedFunctionality.description": "啟用 AudioContext 將解鎖類似音量平衡和均衡器的進階功能。但是會在一些電腦造成音樂卡頓。", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 數碼音訊增強處理™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "能夠欺騙你的大腦讓你感受到近似無損壓縮的音質 | 由 Maikiwi 設計", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "能夠欺騙你的大腦讓你感受到近似無損壓縮的音質。", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "音訊增強處理不兼容於空間音訊,請先停用空間音訊。", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "數碼音訊增強處理設定", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "將更改音訊處理的激進程度(激進型選項有可能會引起雜訊)", diff --git a/src/i18n/zh_TW.json b/src/i18n/zh_TW.json index 61af0424..00380ef4 100644 --- a/src/i18n/zh_TW.json +++ b/src/i18n/zh_TW.json @@ -237,7 +237,7 @@ "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "溫和", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "溫暖", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 數位增強音訊處理™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "將欺騙您的大腦讓您感受到近似保真壓縮的音質。| 由 Maikiwi 設計", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "將欺騙您的大腦讓您感受到近似保真壓縮的音質。", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "數位增強音訊處理設定", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "將更改音訊處理的激進/振奮程度(增強選項有可能會引起雜訊)。", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "標準", diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index d922ad0d..4569f1e8 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -185,7 +185,7 @@ export class BrowserWindow { page: "library-albums", component: ``, condition: `page == 'library-albums'`, - onEnter: `getLibraryAlbumsFull(null, 1); getAlbumSort(); searchLibraryAlbums(1);` + onEnter: `getLibraryAlbumsFull(null, 1); getAlbumSort(); searchLibraryAlbums(1); getLibrarySongsFull() ;searchLibraryAlbums(1);` }, { page: "appleCurator", component: ``, diff --git a/src/main/base/store.ts b/src/main/base/store.ts index 23721801..7e2aa3b2 100644 --- a/src/main/base/store.ts +++ b/src/main/base/store.ts @@ -55,11 +55,11 @@ export class Store { "normalization": false, "maikiwiAudio": { "ciderPPE": false, - "ciderPPE_value": 0.5, + "ciderPPE_value": "NATURAL", "analogWarmth": false, - "analogWarmth_value": 1.25, + "analogWarmth_value": "SMOOTH", "spatial": false, - "spatialType": 0, + "spatialProfile": "420signature-B", "vibrantBass": { // Hard coded into the app. Don't include any of this config into exporting presets in store.ts 'frequencies': [17.182, 42.169, 53.763, 112.69, 119.65, 264.59, 336.57, 400.65, 505.48, 612.7, 838.7, 1155.3, 1175.6, 3406.8, 5158.6, 5968.1, 6999.9, 7468.6, 8862.9, 9666, 10109], 'Q': [2.5, 0.388, 5, 5, 2.5, 7.071, 14.14, 10, 7.071, 14.14, 8.409, 0.372, 7.071, 10, 16.82, 7.071, 28.28, 20, 8.409, 40, 40], diff --git a/src/main/base/utils.ts b/src/main/base/utils.ts index 900e0531..337e6f79 100644 --- a/src/main/base/utils.ts +++ b/src/main/base/utils.ts @@ -134,24 +134,13 @@ export class utils { bw.win.webContents.send('update-response', "update-error") return; } - // Get the artifacts - const response = await fetch(`https://circleci.com/api/v1.1/project/gh/ciderapp/Cider/latest/artifacts?branch=${utils.getStoreValue('general.update_branch')}&filter=successful`) - if (response.status != 200) { - bw.win.webContents.send('update-response', 'update-timeout') - return; - } - - // Get the urls - const jsonResponse = await response.json() - let base_url = jsonResponse[0].url - base_url = base_url.substring(0, base_url.lastIndexOf('/')) - const options: any = { - provider: 'generic', - url: base_url, + provider: 'github', + protocol: 'https', + owner: 'ciderapp', + repo: 'cider-releases', allowDowngrade: true, } - let autoUpdater: any = null if (process.platform === 'win32') { //Windows autoUpdater = await new NsisUpdater(options) diff --git a/src/main/plugins/menubar.ts b/src/main/plugins/menubar.ts index ff915800..857d9461 100644 --- a/src/main/plugins/menubar.ts +++ b/src/main/plugins/menubar.ts @@ -149,6 +149,12 @@ export default class Thumbar { label: 'Volume Down', accelerator: 'CommandOrControl+Down', click: () => this._win.webContents.executeJavaScript(`app.volumeDown()`) + }, + {type: 'separator'}, + { + label: 'Cast To Devices', + accelerator: 'CommandOrControl+Shift+C', + click: () => this._win.webContents.executeJavaScript(`app.modals.castMenu = true`) } ] }, diff --git a/src/renderer/assets/audiolabs/classic.png b/src/renderer/assets/audiolabs/classic.png new file mode 100644 index 00000000..18d4808c Binary files /dev/null and b/src/renderer/assets/audiolabs/classic.png differ diff --git a/src/renderer/assets/audiolabs/expansive.png b/src/renderer/assets/audiolabs/expansive.png new file mode 100644 index 00000000..ff20768d Binary files /dev/null and b/src/renderer/assets/audiolabs/expansive.png differ diff --git a/src/renderer/assets/audiolabs/focused.png b/src/renderer/assets/audiolabs/focused.png new file mode 100644 index 00000000..dce2836f Binary files /dev/null and b/src/renderer/assets/audiolabs/focused.png differ diff --git a/src/renderer/assets/audiolabs/minimal.png b/src/renderer/assets/audiolabs/minimal.png new file mode 100644 index 00000000..62dea0cd Binary files /dev/null and b/src/renderer/assets/audiolabs/minimal.png differ diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index ce57ee12..cf4d3578 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -1,11 +1,11 @@ const CiderAudio = { - context : null, - source : null, - audioNodes : { - gainNode : null, - spatialNode : null, + context: null, + source: null, + audioNodes: { + gainNode: null, + spatialNode: null, spatialInput: null, - audioBands : null, + audioBands: null, vibrantbassNode: null, llpw: null, analogWarmth: null, @@ -16,84 +16,103 @@ const CiderAudio = { init: function (cb = function () { }) { //AudioOutputs.fInit = true; let searchInt = setInterval(function () { - if (document.getElementById("apple-music-player")) { - //AudioOutputs.eqReady = true; - document.getElementById("apple-music-player").crossOrigin = "anonymous"; - CiderAudio.connectContext(document.getElementById("apple-music-player"), 0); - - cb(); - clearInterval(searchInt); - } + if (document.getElementById("apple-music-player")) { + //AudioOutputs.eqReady = true; + document.getElementById("apple-music-player").crossOrigin = "anonymous"; + CiderAudio.connectContext(document.getElementById("apple-music-player"), 0); + + cb(); + clearInterval(searchInt); + } }, 1000); }, - off: function(){ - try{ + off: function () { + try { CiderAudio.hierarchical_unloading(); - try{ - CiderAudio.audioNodes = { - gainNode : null, - spatialNode : null, - spatialInput: null, - audioBands : null, - vibrantbassNode: null, - llpw: null, - analogWarmth: null - } - } catch (e) {} - CiderAudio.source.connect(CiderAudio.context.destination);} catch(e){} + try { + CiderAudio.audioNodes = { + gainNode: null, + spatialNode: null, + spatialInput: null, + audioBands: null, + vibrantbassNode: null, + llpw: null, + analogWarmth: null + } + } catch (e) { } + CiderAudio.source.connect(CiderAudio.context.destination); + } catch (e) { } }, - connectContext: function (mediaElem){ - if (!CiderAudio.context){ - CiderAudio.context = new (window.AudioContext || window.webkitAudioContext); + connectContext: function (mediaElem) { + if (!CiderAudio.context) { + CiderAudio.context = new (window.AudioContext || window.webkitAudioContext); } - if (!CiderAudio.source){ - CiderAudio.source = CiderAudio.context.createMediaElementSource(mediaElem); - } else {try{CiderAudio.source.disconnect(CiderAudio.context.destination)}catch(e){}} + if (!CiderAudio.source) { + CiderAudio.source = CiderAudio.context.createMediaElementSource(mediaElem); + } else { try { CiderAudio.source.disconnect(CiderAudio.context.destination) } catch (e) { } } CiderAudio.audioNodes.gainNode = CiderAudio.context.createGain() CiderAudio.source.connect(CiderAudio.audioNodes.gainNode); - if(app.cfg.audio.normalization){ + if (app.cfg.audio.normalization) { CiderAudio.normalizerOn() } - if (app.cfg.audio.spatial){ + if (app.cfg.audio.spatial) { CiderAudio.spatialOn() - } + } CiderAudio.hierarchical_loading(); }, - normalizerOn: function (){ + normalizerOn: function () { }, - normalizerOff: function (){ - CiderAudio.audioNodes.gainNode.gain.setTargetAtTime(1, CiderAudio.context.currentTime+ 1, 0.5); + normalizerOff: function () { + CiderAudio.audioNodes.gainNode.gain.setTargetAtTime(1, CiderAudio.context.currentTime + 1, 0.5); }, - - spatialOn: function (){ + spatialProfiles: [ + { + "id": "420signature", + "file": './audio/impulses/CiderSpatial_v69.420_Audiophile.wav', + "name": "Signature (Classic)", + "description": "", + "img": "./assets/audiolabs/classic.png", + }, + { + "id": "420signature-B", + "file": './audio/impulses/CiderSpatial_v69.420_Audiophile_B.wav', + "name": "Signature (Focused)", + "description": "", + "img": "./assets/audiolabs/focused.png", + }, + { + "id": "standard", + "file": './audio/impulses/CiderSpatial_v69_Standard.wav', + "name": "Minimal", + "description": "", + "img": "./assets/audiolabs/minimal.png", + }, + { + "id": "audiophile", + "file": './audio/impulses/CiderSpatial_v69_Audiophile.wav', + "name": "Expansive", + "description": "", + "img": "./assets/audiolabs/expansive.png", + } + ], + spatialOn: function () { CiderAudio.audioNodes.spatialNode = null; - if (app.cfg.audio.maikiwiAudio.spatial === true) { - CiderAudio.audioNodes.spatialNode = CiderAudio.context.createConvolver(); - CiderAudio.audioNodes.spatialNode.normalize = true; - switch (app.cfg.audio.maikiwiAudio.spatialType) { - case 0: - fetch('./audio/impulses/CiderSpatial_v69_Standard.wav').then(async (impulseData) => { - let bufferedImpulse = await impulseData.arrayBuffer(); - CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse); - - }); - break; - case 1: - fetch('./audio/impulses/CiderSpatial_v69_Audiophile.wav').then(async (impulseData) => { - let bufferedImpulse = await impulseData.arrayBuffer(); - CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse); - - }); - break; - default: - fetch('./audio/impulses/CiderSpatial_v69_Standard.wav').then(async (impulseData) => { - let bufferedImpulse = await impulseData.arrayBuffer(); - CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse); - - }); - app.cfg.audio.maikiwiAudio.spatialType = 0; - break; - } + if (app.cfg.audio.maikiwiAudio.spatial === true) { + CiderAudio.audioNodes.spatialNode = CiderAudio.context.createConvolver(); + CiderAudio.audioNodes.spatialNode.normalize = false; + + let spatialProfile = CiderAudio.spatialProfiles.find(function (profile) { + return profile.id === app.cfg.audio.maikiwiAudio.spatialProfile; + }); + + if (spatialProfile === undefined) { + spatialProfile = CiderAudio.spatialProfiles[0]; + } + fetch(spatialProfile.file).then(async (impulseData) => { + let bufferedImpulse = await impulseData.arrayBuffer(); + CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse); + }); + } else { CiderAudio.audioNodes.spatialNode = new ResonanceAudio(CiderAudio.context); @@ -112,12 +131,13 @@ const CiderAudio = { up: 'acoustic-ceiling-tiles', }; CiderAudio.audioNodes.spatialNode.setRoomProperties(roomDimensions, roomMaterials); - CiderAudio.audioNodes.spatialInput = CiderAudio.audioNodes.spatialNode.createSource();} - }, - spatialOff: function (){ + CiderAudio.audioNodes.spatialInput = CiderAudio.audioNodes.spatialNode.createSource(); + } + }, + spatialOff: function () { CiderAudio.hierarchical_loading(); }, - sendAudio: function (){ + sendAudio: function () { if (!CiderAudio.ccON) { CiderAudio.ccON = true let searchInt = setInterval(async function () { @@ -236,89 +256,120 @@ const CiderAudio = { registerProcessor('recorder-worklet', RecorderWorkletProcessor);` let blob = new Blob([worklet], { type: 'application/javascript' }); await CiderAudio.context.audioWorklet.addModule(URL.createObjectURL(blob)) - .then(() => { - - const channels = 2; - CiderAudio.audioNodes.recorderNode = new window.AudioWorkletNode(CiderAudio.context, - 'recorder-worklet', - { parameterData: { numberOfChannels: channels } }); - CiderAudio.audioNodes.recorderNode.port.onmessage = (e) => { - const data = e.data; - switch (data.eventType) { - case "data": - const audioData = data.audioBuffer; - const bufferSize = data.bufferSize; - if((audioData[0]).some(item => item !== 0) || (audioData[0]).some(item => item !== 0)){ - ipcRenderer.send('writeWAV', audioData[0], audioData[1], bufferSize);} - break; - case "stop": - break; - } - } - CiderAudio.audioNodes.recorderNode.parameters.get('isRecording').setValueAtTime(1, CiderAudio.context.currentTime); - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.recorderNode); + .then(() => { - }); + const channels = 2; + CiderAudio.audioNodes.recorderNode = new window.AudioWorkletNode(CiderAudio.context, + 'recorder-worklet', + { parameterData: { numberOfChannels: channels } }); + CiderAudio.audioNodes.recorderNode.port.onmessage = (e) => { + const data = e.data; + switch (data.eventType) { + case "data": + const audioData = data.audioBuffer; + const bufferSize = data.bufferSize; + if ((audioData[0]).some(item => item !== 0) || (audioData[0]).some(item => item !== 0)) { + ipcRenderer.send('writeWAV', audioData[0], audioData[1], bufferSize); + } + break; + case "stop": + break; + } + } + CiderAudio.audioNodes.recorderNode.parameters.get('isRecording').setValueAtTime(1, CiderAudio.context.currentTime); + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.recorderNode); + + }); clearInterval(searchInt); } }, 1000); - } else {if (CiderAudio.audioNodes.recorderNode != null && CiderAudio.context != null) { - CiderAudio.audioNodes.recorderNode.parameters.get('isRecording').setValueAtTime(1, CiderAudio.context.currentTime); - // CiderAudio.audioNodes.recorderNode = null; - // CiderAudio.ccON = false; - }} - + } else { + if (CiderAudio.audioNodes.recorderNode != null && CiderAudio.context != null) { + CiderAudio.audioNodes.recorderNode.parameters.get('isRecording').setValueAtTime(1, CiderAudio.context.currentTime); + // CiderAudio.audioNodes.recorderNode = null; + // CiderAudio.ccON = false; + } + } + }, - stopAudio(){ + stopAudio() { if (CiderAudio.audioNodes.recorderNode != null && CiderAudio.context != null) { CiderAudio.audioNodes.recorderNode.parameters.get('isRecording').setValueAtTime(0, CiderAudio.context.currentTime); // CiderAudio.audioNodes.recorderNode = null; // CiderAudio.ccON = false; } }, - analogWarmth_h2_3: function (status, hierarchy){ + analogWarmth_h2_3: function (status, hierarchy) { if (status === true) { // 23 Band Adjustment let WARMTH_FREQUENCIES = [10.513, 15.756, 224.01, 677.77, 1245.4, 2326.8, 2847.3, 4215.3, 11057, 12793, 16235, 16235, 17838, 18112, 18112, 19326, 19372, 19372, 20061, 20280, 20280, 20853, 22276]; let WARMTH_GAIN = [-4.81, 0.74, 0.55, -0.84, -1.52, 0.84, 0.66, -0.29, 0.29, 0.94, 1.67, 1.62, -0.53, -0.81, -4.98, 1.43, 0.86, 1.13, -1.06, -0.95, -1.13, 1.78, -3.86]; let WARMTH_Q = [0.442, 3.536, 2.102, 8.409, 0.625, 16.82, 5, 2.973, 3.536, 2.5, 2.5, 11.89, 0.625, 1.487, 1.153, 5, 5.453, 5, 2.973, 3.386, 3.386, 14.14, 8.409]; CiderAudio.audioNodes.analogWarmth = [] - - - for (let i = 0; i < WARMTH_FREQUENCIES.length; i++) { - CiderAudio.audioNodes.analogWarmth[i] = CiderAudio.context.createBiquadFilter(); - CiderAudio.audioNodes.analogWarmth[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i]; - CiderAudio.audioNodes.analogWarmth[i].Q.value = WARMTH_Q[i]; - CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * app.cfg.audio.maikiwiAudio.analogWarmth_value; - } - - for (let i = 1; i < WARMTH_FREQUENCIES.length; i ++) { - CiderAudio.audioNodes.analogWarmth[i-1].connect(CiderAudio.audioNodes.analogWarmth[i]); + + switch (app.cfg.audio.maikiwiAudio.analogWarmth_value) { + case "SMOOTH": + for (let i = 0; i < WARMTH_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.analogWarmth[i] = CiderAudio.context.createBiquadFilter(); + CiderAudio.audioNodes.analogWarmth[i].type = 'peaking'; // 'peaking'; + CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i]; + CiderAudio.audioNodes.analogWarmth[i].Q.value = WARMTH_Q[i]; + CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * 1.25; + } + break; + + case "WARM": + for (let i = 0; i < WARMTH_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.analogWarmth[i] = CiderAudio.context.createBiquadFilter(); + CiderAudio.audioNodes.analogWarmth[i].type = 'peaking'; // 'peaking'; + CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i]; + CiderAudio.audioNodes.analogWarmth[i].Q.value = WARMTH_Q[i]; + CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * 1.75; + } + break; + + default: + for (let i = 0; i < WARMTH_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.analogWarmth[i] = CiderAudio.context.createBiquadFilter(); + CiderAudio.audioNodes.analogWarmth[i].type = 'peaking'; // 'peaking'; + CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i]; + CiderAudio.audioNodes.analogWarmth[i].Q.value = WARMTH_Q[i]; + CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * 1.25; + } + app.cfg.audio.maikiwiAudio.analogWarmth_value = "SMOOTH"; + break; } - switch (hierarchy) { + + for (let i = 1; i < WARMTH_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.analogWarmth[i - 1].connect(CiderAudio.audioNodes.analogWarmth[i]); + } + + switch (hierarchy) { case 3: - try{ - CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.llpw[0]);} catch(e){} + try { + CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length - 1].connect(CiderAudio.audioNodes.llpw[0]); + } catch (e) { } break; case 2: - try{ - CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){} + try { + CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length - 1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); + } catch (e) { } break; case 1: - try{ - CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){} + try { + CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length - 1].connect(CiderAudio.audioNodes.audioBands[0]); + } catch (e) { } break; - case 0: - try{CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length-1].connect(CiderAudio.context.destination);} catch(e){} + case 0: + try { CiderAudio.audioNodes.analogWarmth[WARMTH_FREQUENCIES.length - 1].connect(CiderAudio.context.destination); } catch (e) { } break; - } - - + } + + } }, - llpw_h2_2: function (status, hierarchy){ - if (status === true) { + llpw_h2_2: function (status, hierarchy) { + if (status === true) { let c_LLPW_Q = [1.250, 0.131, 10, 2.5, 2.293, 0.110, 14.14, 1.552, 28.28, 7.071, 2.847, 5, 0.625, 7.071, 3.856, 3.856, 20, 28.28, 20, 14.14, 2.102, 6.698, 3.536, 10]; let c_LLPW_GAIN = [-0.11, 0.27, -0.8, 0.57, 1.84, -0.38, 0.47, -1.56, 0.83, 1.58, -1.79, -0.45, 0.48, 1.22, -1.58, -1.59, -2.03, 2.56, -2.2, -2.48, 4.75, 10.5, 1.43, 3.76]; let c_LLPW_FREQUENCIES = [400.83, 5812.8, 8360, 10413, 10658, 12079, 12899, 13205, 14848, 15591, 15778, 15783, 16716, 16891, 17255, 17496, 18555, 18622, 19219, 19448, 19664, 21341, 21353, 22595]; @@ -326,76 +377,122 @@ const CiderAudio = { let LLPW_GAIN = [0.38, -1.81, -0.23, -0.51, 0.4, 0.84, 0.36, -0.34, 0.27, -1.2, -0.42, -0.67, 0.81, 1.31, -0.71, 0.68, -1.04, 0.79, -0.73, -1.33, 1.17, 0.57, 0.35, 6.33]; let LLPW_FREQUENCIES = [16.452, 24.636, 37.134, 74.483, 159.54, 308.18, 670.21, 915.81, 1200.7, 2766.4, 2930.6, 4050.6, 4409.1, 5395.2, 5901.6, 6455.5, 7164.1, 7724.1, 8449, 10573, 12368, 14198, 17910, 18916]; CiderAudio.audioNodes.llpw = [] - - if (app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.55) { - for (let i = 0; i < c_LLPW_FREQUENCIES.length; i++) { - CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); - CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.llpw[i].frequency.value = c_LLPW_FREQUENCIES[i]; - CiderAudio.audioNodes.llpw[i].Q.value = c_LLPW_Q[i]; - CiderAudio.audioNodes.llpw[i].gain.value = c_LLPW_GAIN[i]; + + switch (app.cfg.audio.maikiwiAudio.ciderPPE_value) { + case "NATURAL": + CiderAudio.audioNodes.llpw[0] = CiderAudio.context.createConvolver(); + CiderAudio.audioNodes.llpw[0].normalize = false; + fetch('./audio/impulses/CAP_Natural.wav').then(async (impulseData) => { + let bufferedImpulse = await impulseData.arrayBuffer(); + CiderAudio.audioNodes.llpw[0].buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse); + }); + + switch (hierarchy) { + case 2: + try { CiderAudio.audioNodes.llpw[0].connect(CiderAudio.audioNodes.vibrantbassNode[0]); } catch (e) { } + break; + case 1: + try { CiderAudio.audioNodes.llpw[0].connect(CiderAudio.audioNodes.audioBands[0]); } catch (e) { } + break; + case 0: + try { CiderAudio.audioNodes.llpw[0].connect(CiderAudio.context.destination); } catch (e) { } + break; + + } + + console.debug("[Cider][Audio] CAP - Natural Mode"); + break; + + case "STANDARD": // Standard + for (let i = 0; i < LLPW_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); + CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; + CiderAudio.audioNodes.llpw[i].frequency.value = LLPW_FREQUENCIES[i]; + CiderAudio.audioNodes.llpw[i].Q.value = LLPW_Q[i]; + CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i]; + } + for (let i = 1; i < LLPW_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.llpw[i - 1].connect(CiderAudio.audioNodes.llpw[i]); + } + + switch (hierarchy) { + case 2: + try { CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length - 1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); } catch (e) { } + break; + case 1: + try { CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length - 1].connect(CiderAudio.audioNodes.audioBands[0]); } catch (e) { } + break; + case 0: + try { CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length - 1].connect(CiderAudio.context.destination); } catch (e) { } + break; + + } + + console.debug("[Cider][Audio] CAP - Classic Mode"); + break; + + case "AGGRESSIVE": // Aggressive + for (let i = 0; i < c_LLPW_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); + CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; + CiderAudio.audioNodes.llpw[i].frequency.value = c_LLPW_FREQUENCIES[i]; + CiderAudio.audioNodes.llpw[i].Q.value = c_LLPW_Q[i]; + CiderAudio.audioNodes.llpw[i].gain.value = c_LLPW_GAIN[i]; + } + for (let i = 1; i < c_LLPW_FREQUENCIES.length; i++) { + CiderAudio.audioNodes.llpw[i - 1].connect(CiderAudio.audioNodes.llpw[i]); + } + + switch (hierarchy) { + case 2: + try { CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length - 1].connect(CiderAudio.audioNodes.vibrantbassNode[0]); } catch (e) { } + break; + case 1: + try { CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length - 1].connect(CiderAudio.audioNodes.audioBands[0]); } catch (e) { } + break; + case 0: + try { CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length - 1].connect(CiderAudio.context.destination); } catch (e) { } + break; + + } + + console.debug("[Cider][Audio] CAP - Clarity Mode"); + break; + + default: + CiderAudio.audioNodes.llpw[0] = CiderAudio.context.createConvolver(); + CiderAudio.audioNodes.llpw[0].normalize = false; + fetch('./audio/impulses/CAP_Natural.wav').then(async (impulseData) => { + let bufferedImpulse = await impulseData.arrayBuffer(); + CiderAudio.audioNodes.llpw[0].buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse); + }); + + switch (hierarchy) { + case 2: + try { CiderAudio.audioNodes.llpw[0].connect(CiderAudio.audioNodes.vibrantbassNode[0]); } catch (e) { } + break; + case 1: + try { CiderAudio.audioNodes.llpw[0].connect(CiderAudio.audioNodes.audioBands[0]); } catch (e) { } + break; + case 0: + try { CiderAudio.audioNodes.llpw[0].connect(CiderAudio.context.destination); } catch (e) { } + break; + + } + app.cfg.audio.maikiwiAudio.ciderPPE_value = "NATURAL"; + console.debug("[Cider][Audio] CAP - Natural Mode (Defaulted from broki config)"); + break; } - - - for (let i = 1; i < c_LLPW_FREQUENCIES.length; i ++) { - CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]); - } - - switch (hierarchy) { - case 2: - try{ - CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){} - break; - case 1: - try{CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){} - break; - case 0: - try{CiderAudio.audioNodes.llpw[c_LLPW_FREQUENCIES.length-1].connect(CiderAudio.context.destination);} catch(e){} - break; - - } - - console.debug("[Cider][Audio] CAP - Clarity Mode"); } - else if (app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.5) { - for (let i = 0; i < LLPW_FREQUENCIES.length; i++) { - CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); - CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.llpw[i].frequency.value = LLPW_FREQUENCIES[i]; - CiderAudio.audioNodes.llpw[i].Q.value = LLPW_Q[i]; - CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i]; - } - - - for (let i = 1; i < LLPW_FREQUENCIES.length; i ++) { - CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]); - } - - switch (hierarchy) { - case 2: - try{CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){} - break; - case 1: - try{CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){} - break; - case 0: - try{CiderAudio.audioNodes.llpw[LLPW_FREQUENCIES.length-1].connect(CiderAudio.context.destination);} catch(e){} - break; - - } - console.debug("[Cider][Audio] CAP - Classic Mode"); - } - } - }, - vibrantbass_h2_1: function (status, hierarchy){ - if (status === true) { + vibrantbass_h2_1: function (status, hierarchy) { + if (status === true) { let VIBRANTBASSBANDS = app.cfg.audio.maikiwiAudio.vibrantBass.frequencies; let VIBRANTBASSGAIN = app.cfg.audio.maikiwiAudio.vibrantBass.gain; let VIBRANTBASSQ = app.cfg.audio.maikiwiAudio.vibrantBass.Q; CiderAudio.audioNodes.vibrantbassNode = [] - + for (let i = 0; i < VIBRANTBASSBANDS.length; i++) { CiderAudio.audioNodes.vibrantbassNode[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.vibrantbassNode[i].type = 'peaking'; // 'peaking'; @@ -404,58 +501,59 @@ const CiderAudio = { CiderAudio.audioNodes.vibrantbassNode[i].gain.value = VIBRANTBASSGAIN[i] * (app.cfg.audio.equalizer.vibrantBass / 10); } - for (let i = 1; i < VIBRANTBASSBANDS.length; i ++) { - CiderAudio.audioNodes.vibrantbassNode[i-1].connect(CiderAudio.audioNodes.vibrantbassNode[i]); + for (let i = 1; i < VIBRANTBASSBANDS.length; i++) { + CiderAudio.audioNodes.vibrantbassNode[i - 1].connect(CiderAudio.audioNodes.vibrantbassNode[i]); } - switch (hierarchy) { - case 0: - try{ - CiderAudio.audioNodes.vibrantbassNode[0].connect(CiderAudio.context.destination);} catch(e){} + switch (hierarchy) { + case 0: + try { + CiderAudio.audioNodes.vibrantbassNode[0].connect(CiderAudio.context.destination); + } catch (e) { } break; case 1: - try{CiderAudio.audioNodes.vibrantbassNode[0].connect(CiderAudio.audioNodes.audioBands[0]);} catch(e){} + try { CiderAudio.audioNodes.vibrantbassNode[0].connect(CiderAudio.audioNodes.audioBands[0]); } catch (e) { } break; } } }, - hierarchical_unloading: function (){ - try {CiderAudio.audioNodes.spatialNode.output.disconnect();} catch(e){} - try {CiderAudio.audioNodes.spatialNode.disconnect();} catch(e){} - try {CiderAudio.audioNodes.gainNode.disconnect();} catch(e){} - try {for (var i of CiderAudio.audioNodes.analogWarmth){i.disconnect();} CiderAudio.audioNodes.analogWarmth = null} catch(e){} - try {for (var i of CiderAudio.audioNodes.llpw){i.disconnect();} CiderAudio.audioNodes.llpw = null} catch(e){} - try {for (var i of CiderAudio.audioNodes.vibrantbassNode){i.disconnect();} CiderAudio.audioNodes.vibrantbassNode = null} catch(e){} - try {for (var i of CiderAudio.audioNodes.audioBands) {i.disconnect();} CiderAudio.audioNodes.audioBands = null} catch(e){} + hierarchical_unloading: function () { + try { CiderAudio.audioNodes.spatialNode.output.disconnect(); } catch (e) { } + try { CiderAudio.audioNodes.spatialNode.disconnect(); } catch (e) { } + try { CiderAudio.audioNodes.gainNode.disconnect(); } catch (e) { } + try { for (var i of CiderAudio.audioNodes.analogWarmth) { i.disconnect(); } CiderAudio.audioNodes.analogWarmth = null } catch (e) { } + try { for (var i of CiderAudio.audioNodes.llpw) { i.disconnect(); } CiderAudio.audioNodes.llpw = null } catch (e) { } + try { for (var i of CiderAudio.audioNodes.vibrantbassNode) { i.disconnect(); } CiderAudio.audioNodes.vibrantbassNode = null } catch (e) { } + try { for (var i of CiderAudio.audioNodes.audioBands) { i.disconnect(); } CiderAudio.audioNodes.audioBands = null } catch (e) { } console.debug("[Cider][Audio] Finished hierarchical unloading"); - + }, - hierarchical_loading: function (){ + hierarchical_loading: function () { CiderAudio.hierarchical_unloading(); - + if (Math.max(...app.cfg.audio.equalizer.gain) != 0) { CiderAudio.equalizer(true, 0); - if (app.cfg.audio.equalizer.vibrantBass !== '0') { + if (app.cfg.audio.equalizer.vibrantBass !== '0') { CiderAudio.vibrantbass_h2_1(true, 1); - + if (app.cfg.audio.maikiwiAudio.ciderPPE === true) { // Vibrant Bass, CAP CiderAudio.llpw_h2_2(true, 2); - + if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { // Vibrant Bass, CAP, Analog Warmth CiderAudio.analogWarmth_h2_3(true, 3); - - if (app.cfg.audio.spatial === true) { + + if (app.cfg.audio.spatial === true) { if (app.cfg.audio.maikiwiAudio.spatial === true) { // Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial app.cfg.audio.normalization = true; CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); console.debug('[Cider][Audio] Equalizer, Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial') } else { // Vibrant Bass, CAP, Analog Warmth, Spatial - app.cfg.audio.normalization = true; + app.cfg.audio.normalization = true; CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); console.debug('[Cider][Audio] Equalizer, Vibrant Bass, CAP, Analog Warmth, Spatial') @@ -469,7 +567,7 @@ const CiderAudio = { } else { if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]); app.cfg.audio.normalization = true @@ -489,17 +587,17 @@ const CiderAudio = { } } else { - if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { + if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { CiderAudio.analogWarmth_h2_3(true, 2); app.cfg.audio.normalization = true; - - if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); console.debug('[Cider][Audio] Equalizer, Vibrant Bass, Analog Warmth, Maikiwi Spatial') } - else { + else { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); console.debug('[Cider][Audio] Equalizer, Vibrant Bass, Analog Warmth, Spatial') @@ -512,8 +610,8 @@ const CiderAudio = { } } else { - if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { app.cfg.audio.normalization = true; CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]); @@ -525,7 +623,7 @@ const CiderAudio = { console.debug('[Cider][Audio] Equalizer, Vibrant Bass, Spatial') } } - else { + else { app.cfg.audio.normalization = true; CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]); console.debug('[Cider][Audio] Equalizer, Vibrant Bass') @@ -537,15 +635,15 @@ const CiderAudio = { else { // if (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier) === 0 if (app.cfg.audio.maikiwiAudio.ciderPPE === true) { CiderAudio.llpw_h2_2(true, 1); - + if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { CiderAudio.analogWarmth_h2_3(true, 3); - + if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - app.cfg.audio.normalization = true; + app.cfg.audio.normalization = true; console.debug('[Cider][Audio] Equalizer, CAP, Analog Warmth, Maikiwi Spatial') } else { @@ -561,10 +659,10 @@ const CiderAudio = { } else { if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]); - app.cfg.audio.normalization = true; + app.cfg.audio.normalization = true; console.debug('[Cider][Audio] Equalizer, CAP, Maikiwi Spatial') } else { @@ -582,12 +680,12 @@ const CiderAudio = { else { if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { CiderAudio.analogWarmth_h2_3(true, 1); - + if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - app.cfg.audio.normalization = true; + app.cfg.audio.normalization = true; console.debug('[Cider][Audio] Equalizer, Analog Warmth, Maikiwi Spatial') } else { @@ -603,10 +701,10 @@ const CiderAudio = { } else { if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.audioBands[0]); - app.cfg.audio.normalization = true; + app.cfg.audio.normalization = true; console.debug('[Cider][Audio] Equalizer, Maikiwi Spatial') } else { @@ -616,7 +714,7 @@ const CiderAudio = { } } else { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]); + CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]); console.debug('[Cider][Audio] Equalizer') } } @@ -626,22 +724,22 @@ const CiderAudio = { else { //if (Math.max(...app.cfg.audio.equalizer.gain) == 0) if (app.cfg.audio.equalizer.vibrantBass !== '0') { // Vibrant Bass CiderAudio.vibrantbass_h2_1(true, 0) - + if (app.cfg.audio.maikiwiAudio.ciderPPE === true) { // Vibrant Bass, CAP CiderAudio.llpw_h2_2(true, 2); - + if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { // Vibrant Bass, CAP, Analog Warmth CiderAudio.analogWarmth_h2_3(true, 3); - - if (app.cfg.audio.spatial === true) { + + if (app.cfg.audio.spatial === true) { if (app.cfg.audio.maikiwiAudio.spatial === true) { // Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial app.cfg.audio.normalization = true; CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial') } else { // Vibrant Bass, CAP, Analog Warmth, Spatial - app.cfg.audio.normalization = true; + app.cfg.audio.normalization = true; CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth, Spatial') @@ -655,7 +753,7 @@ const CiderAudio = { } else { // if (app.cfg.audio.maikiwiAudio.analogWarmth) !== true if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]); app.cfg.audio.normalization = true @@ -675,17 +773,17 @@ const CiderAudio = { } } else { - if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { + if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { CiderAudio.analogWarmth_h2_3(true, 2); app.cfg.audio.normalization = true; - - if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); - CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); + CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); console.debug('[Cider][Audio] Vibrant Bass, Analog Warmth, Maikiwi Spatial') } - else { + else { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input); CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]); console.debug('[Cider][Audio] Vibrant Bass, Analog Warmth, Spatial') @@ -698,8 +796,8 @@ const CiderAudio = { } } else { - if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { app.cfg.audio.normalization = true; CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]); @@ -711,7 +809,7 @@ const CiderAudio = { console.debug('[Cider][Audio] Vibrant Bass, Spatial') } } - else { + else { app.cfg.audio.normalization = true; CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]); console.debug('[Cider][Audio] Vibrant Bass') @@ -721,17 +819,17 @@ const CiderAudio = { } // Vibrant Bass ends here else { - if (app.cfg.audio.maikiwiAudio.ciderPPE === true) { + if (app.cfg.audio.maikiwiAudio.ciderPPE === true) { CiderAudio.llpw_h2_2(true, 0); - + if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { CiderAudio.analogWarmth_h2_3(true, 3); - + if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - app.cfg.audio.normalization = true; + app.cfg.audio.normalization = true; console.debug('[Cider][Audio] CAP, Analog Warmth, Maikiwi Spatial') } else { @@ -747,10 +845,10 @@ const CiderAudio = { } else { if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.llpw[0]); - app.cfg.audio.normalization = true; + app.cfg.audio.normalization = true; console.debug('[Cider][Audio] CAP, Maikiwi Spatial') } else { @@ -768,12 +866,12 @@ const CiderAudio = { else { if (app.cfg.audio.maikiwiAudio.analogWarmth === true) { CiderAudio.analogWarmth_h2_3(true, 0); - + if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]); - app.cfg.audio.normalization = true; + app.cfg.audio.normalization = true; console.debug('[Cider][Audio] Analog Warmth, Maikiwi Spatial') } else { @@ -789,10 +887,10 @@ const CiderAudio = { } else { if (app.cfg.audio.spatial === true) { - if (app.cfg.audio.maikiwiAudio.spatial === true) { + if (app.cfg.audio.maikiwiAudio.spatial === true) { CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode); CiderAudio.audioNodes.spatialNode.connect(CiderAudio.context.destination); - app.cfg.audio.normalization = true; + app.cfg.audio.normalization = true; console.debug('[Cider][Audio] Maikiwi Spatial') } else { @@ -802,7 +900,7 @@ const CiderAudio = { } } else { - CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination); + CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination); console.debug('[Cider][Audio] Literal Nothing') } } @@ -810,16 +908,16 @@ const CiderAudio = { } } console.debug("[Cider][Audio] Finished hierarchical loading"); - + }, - equalizer: function (status, hierarchy){ // h1_1 - if (status === true) { + equalizer: function (status, hierarchy) { // h1_1 + if (status === true) { let BANDS = app.cfg.audio.equalizer.frequencies; let GAIN = app.cfg.audio.equalizer.gain; let Q = app.cfg.audio.equalizer.Q; - CiderAudio.audioNodes.audioBands = []; + CiderAudio.audioNodes.audioBands = []; for (let i = 0; i < BANDS.length; i++) { CiderAudio.audioNodes.audioBands[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.audioBands[i].type = 'peaking'; // 'peaking'; @@ -827,19 +925,20 @@ const CiderAudio = { CiderAudio.audioNodes.audioBands[i].Q.value = Q[i]; CiderAudio.audioNodes.audioBands[i].gain.value = GAIN[i] * app.cfg.audio.equalizer.mix; } - - for (let i = 1; i < BANDS.length; i ++) { - CiderAudio.audioNodes.audioBands[i-1].connect(CiderAudio.audioNodes.audioBands[i]); - } - - switch (hierarchy) { - case 0: - try{ - CiderAudio.audioNodes.audioBands[BANDS.length-1].connect(CiderAudio.context.destination);} catch(e){} - break; - } + for (let i = 1; i < BANDS.length; i++) { + CiderAudio.audioNodes.audioBands[i - 1].connect(CiderAudio.audioNodes.audioBands[i]); } + + switch (hierarchy) { + case 0: + try { + CiderAudio.audioNodes.audioBands[BANDS.length - 1].connect(CiderAudio.context.destination); + } catch (e) { } + break; + } + } + } } -export {CiderAudio} \ No newline at end of file +export { CiderAudio } \ No newline at end of file diff --git a/src/renderer/audio/impulses/CAP_Natural.wav b/src/renderer/audio/impulses/CAP_Natural.wav new file mode 100644 index 00000000..945069e8 Binary files /dev/null and b/src/renderer/audio/impulses/CAP_Natural.wav differ diff --git a/src/renderer/audio/impulses/CiderSpatial_v69.420_Audiophile.wav b/src/renderer/audio/impulses/CiderSpatial_v69.420_Audiophile.wav new file mode 100644 index 00000000..59fc21a7 Binary files /dev/null and b/src/renderer/audio/impulses/CiderSpatial_v69.420_Audiophile.wav differ diff --git a/src/renderer/audio/impulses/CiderSpatial_v69.420_Audiophile_B.wav b/src/renderer/audio/impulses/CiderSpatial_v69.420_Audiophile_B.wav new file mode 100644 index 00000000..9ddb6127 Binary files /dev/null and b/src/renderer/audio/impulses/CiderSpatial_v69.420_Audiophile_B.wav differ diff --git a/src/renderer/audio/impulses/CiderSpatial_v69_Audiophile.wav b/src/renderer/audio/impulses/CiderSpatial_v69_Audiophile.wav index fb2b7716..982d9d46 100644 Binary files a/src/renderer/audio/impulses/CiderSpatial_v69_Audiophile.wav and b/src/renderer/audio/impulses/CiderSpatial_v69_Audiophile.wav differ diff --git a/src/renderer/audio/impulses/CiderSpatial_v69_Standard.wav b/src/renderer/audio/impulses/CiderSpatial_v69_Standard.wav index 0c1f6186..947d6f65 100644 Binary files a/src/renderer/audio/impulses/CiderSpatial_v69_Standard.wav and b/src/renderer/audio/impulses/CiderSpatial_v69_Standard.wav differ diff --git a/src/renderer/index.js b/src/renderer/index.js index f59c67af..879b017a 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -105,7 +105,7 @@ function fallbackinitMusicKit() { }) setTimeout(() => { app.init() - if(app.cfg.visual.window_background_style == "mica") { + if(app.cfg.visual.window_background_style == "mica" && !app.isDev) { app.spawnMica() } }, 1000) @@ -134,7 +134,7 @@ document.addEventListener('musickitloaded', function () { function waitForApp() { if (typeof app.init !== "undefined") { app.init() - if(app.cfg.visual.window_background_style == "mica") { + if(app.cfg.visual.window_background_style == "mica" && !app.isDev) { app.spawnMica() } } diff --git a/src/renderer/less/bootstrap.less b/src/renderer/less/bootstrap.less index 04ada027..e2ec3b64 100644 --- a/src/renderer/less/bootstrap.less +++ b/src/renderer/less/bootstrap.less @@ -7768,3 +7768,208 @@ fieldset:disabled .btn { padding: 1rem 1rem; color : #212529; } + +// carousel +.carousel { + position: relative; +} + +.carousel.pointer-event { + -ms-touch-action: pan-y; + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: -webkit-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-left), +.active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-right), +.active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + -webkit-transform: none; + transform: none; +} + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; + opacity: 1; +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; + } +} + +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: 50% / 100% 100% no-repeat; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 15; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + box-sizing: content-box; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + transition: opacity 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + transition: none; + } +} + +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} diff --git a/src/renderer/less/pages.less b/src/renderer/less/pages.less index 823c85f9..b2ff7c4e 100644 --- a/src/renderer/less/pages.less +++ b/src/renderer/less/pages.less @@ -515,7 +515,7 @@ display : flex; justify-content: center; align-items : center; - z-index : 6; + z-index : 10; position : sticky; margin-top : calc(var(--navigationBarHeight) * -1); @@ -841,6 +841,139 @@ } } +// AudioLabs page +.audiolabs-page { + padding: 0px; + + .md-option-header { + padding : 1.25em 1.25em; + border-bottom: unset; + border-top : unset; + font-weight : 600; + font-size : 1.0em; + background : rgb(255 255 255 / 3%); + } + + .carousel-item>img { + object-fit: cover; + width:100%; + } + + .spprofile-line { + height: 300px; + width: 100%; + max-width: 1024px; + padding: 16px; + margin: 0 auto; + + .spprofile-viewport { + height: 100%; + position: relative; + border-radius: var(--mediaItemRadius); + overflow: hidden; + box-shadow: var(--mediaItemShadow-Shadow); + background: black; + + .spprev, .nextprev { + position: absolute; + height: 100%; + width: 64px; + top: 0; + background: rgb(0 0 0 / 20%); + z-index: 1; + border: 0px; + transition: background 0.2s var(--appleEase), transform 0.2s var(--appleEase); + &:hover { + background: var(--selected); + transform: scale(1.1); + } + + &:active { + transition: background 0s var(--appleEase); + background: var(--selected-click); + } + + &:before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #eee; + opacity: 1; + -webkit-mask-position: center; + -webkit-mask-repeat: no-repeat; + -webkit-mask-size: 1em; + } + } + + .spprev { + left: 0; + &:before { + -webkit-mask-image: url("./views/svg/chevron-left.svg"); + } + + } + + .nextprev { + right: 0; + &:before { + -webkit-mask-image: url("./views/svg/chevron-right.svg"); + } + + } + + .spslide { + position: absolute; + width: 100%; + height: 100%; + overflow: hidden; + background: black; + + >img { + WIDTH: 100%; + height: 100%; + object-fit: cover; + } + + .sptitle { + position: absolute; + bottom: 0px; + left: 0; + width: 100%; + text-align: center; + font-size: 18px; + text-shadow: 0px 2px 4px #00000033; + } + } + + .spfade-enter-active, + .spfade-leave-active { + --transitionTime: 0.2s; + transition: opacity var(--transitionTime) var(--appleEase), transform var(--transitionTime) var(--appleEase); + will-change: opacity, transform; + } + + .spfade-enter { + opacity: 0; + transform: scale(1.2) translate3d(0,0,0); + will-change: opacity, transform; + } + .spfade-leave-to { + opacity: 1; + transform: scale(1) translate3d(0,0,0); + will-change: opacity, transform; + } + } + } + + .settings-option-body { + margin: 16px; + } +} + + //Home .home-page { top : 0; diff --git a/src/renderer/main/mica.js b/src/renderer/main/mica.js index 225ae8b0..a27161f7 100644 --- a/src/renderer/main/mica.js +++ b/src/renderer/main/mica.js @@ -1,4 +1,9 @@ async function spawnMica() { + if(typeof window.micaSpawned !== "undefined") { + return + }else{ + window.micaSpawned = true + } const micaDiv = document.createElement('div'); const blurIterations = 6 micaDiv.id = 'micaEffect'; diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 2573e87a..18b3d606 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -2324,7 +2324,7 @@ const app = new Vue({ try { if (app.showingPlaylist.relationships.tracks.data.length === 0) return "" const timeInSeconds = Math.round([].concat(...app.showingPlaylist.relationships.tracks.data).reduce((a, {attributes: {durationInMillis}}) => a + durationInMillis, 0) / 1000); - return `${app.showingPlaylist.relationships.tracks.data.length} ${app.getLz(`term.${app.showingPlaylist.relationships.tracks.data.length === 1 ? "track" : "tracks"}`)}, ${app.convertTime(timeInSeconds, 'long')}` + return `${app.showingPlaylist.relationships.tracks.data.length} ${app.getLz("term.track", {"count": app.showingPlaylist.relationships.tracks.data.length})}, ${app.convertTime(timeInSeconds, 'long')}` } catch (err) { return "" } diff --git a/src/renderer/style.css b/src/renderer/style.css index 6d602da3..81ec3918 100644 --- a/src/renderer/style.css +++ b/src/renderer/style.css @@ -9889,7 +9889,7 @@ input[type=checkbox][switch]:checked:active::before { display: flex; justify-content: center; align-items: center; - z-index: 6; + z-index: 10; position: sticky; margin-top: calc(var(--navigationBarHeight) * -1); } diff --git a/src/renderer/style.less b/src/renderer/style.less index 71192df8..1ad5ba32 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -142,8 +142,8 @@ body.notransparency::before { } #app { - --color1: rgba(30, 30, 30, 30%); - --color2: rgba(15, 15, 15, 30%); + --color1: rgba(15, 15, 15, 30%); + --color2: rgba(30, 30, 30, 50%); --bgColor: transparent; --bgWidth: 0px; --bgHeight: 0px; @@ -799,25 +799,28 @@ input[type=range].web-slider::-webkit-slider-runnable-track { opacity: 0.6; } } + } .app-sidebar-item:hover { - border: 1px solid rgb(200 200 200 / 5%); - background: rgb(200 200 200 / 15%); + border: 1px solid rgb(200 200 200 / 0%); + background: rgb(180 180 180 / 15%); + // cursor: pointer; } .app-sidebar-item:active { - border: 1px solid rgb(200 200 200 / 5%); - background: rgb(200 200 200 / 15%); - transform: scale(0.98); + border: 1px solid rgb(200 200 200 / 0%); + background: rgb(150 150 150 / 15%); + // transform: scale(0.98); transition: transform 0s; } .app-sidebar-item.active { - border: 1px solid rgb(200 200 200 / 5%); + border: 1px solid rgb(200 200 200 / 0%); background: rgb(200 200 200 / 15%); transform: scale(1); transition: transform 0s; + cursor: default; } .app-sidebar-item.active::after { @@ -830,6 +833,17 @@ input[type=range].web-slider::-webkit-slider-runnable-track { border-radius: 10px; left: 0px; background: var(--keyColor); + animation: expandIndicator .2s cubic-bezier(0.25, 1, 0.5, 1); + + @keyframes expandIndicator { + 0% { + transform: scaleY(0); + } + + 100% { + transform: scaleY(1); + } + } } .app-chrome { @@ -1535,6 +1549,14 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { filter: none !important; } + +.lyric-body:hover > .lyric-line:not(.active) { + filter: none !important; +} +.lyric-body > .lyric-line:not(.active) { + transition: filter var(--appleEase) 0.5s ease; +} + .lyricWaiting { margin-top: 8px; display: none; diff --git a/src/renderer/views/components/castmenu.ejs b/src/renderer/views/components/castmenu.ejs index ce3c554d..8fa0a61e 100644 --- a/src/renderer/views/components/castmenu.ejs +++ b/src/renderer/views/components/castmenu.ejs @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/src/renderer/views/pages/home.ejs b/src/renderer/views/pages/home.ejs index d4a4169d..b5b47d6e 100644 --- a/src/renderer/views/pages/home.ejs +++ b/src/renderer/views/pages/home.ejs @@ -9,6 +9,7 @@
+
@@ -120,12 +121,19 @@ this.getListenNowData() await this.getArtistFeed() await this.getFavorites() + await this.getRecentlyPlayed() if (new Date().getMonth() == 11) { this.seenReplay = false localStorage.setItem('seenReplay', false) } }, methods: { + async seeAllRecentlyPlayed() { + let hist = await app.mk.api.v3.music(`/v1/me/recent/played`, { + l: this.$root.mklang + }) + app.showCollection(hist.data, app.getLz('home.recentlyPlayed')) + }, async seeAllHistory() { let hist = await app.mk.api.v3.music(`/v1/me/recent/played/tracks`, { l: this.$root.mklang @@ -199,8 +207,11 @@ }) } catch (error) { } }, - getRecentlyPlayed() { - + async getRecentlyPlayed() { + let hist = await app.mk.api.v3.music(`/v1/me/recent/played`, { + l: this.$root.mklang + }) + this.recentlyPlayed = hist.data.data }, async getListenNowData() { let self = this @@ -216,7 +227,6 @@ self.sectionsReady.push("madeForYou") try { - self.recentlyPlayed = data.data.data[1].relationships.contents.data self.friendsListeningTo = data.data.data.filter(section => { if (section.meta.metrics.moduleType == "11") { return section diff --git a/src/renderer/views/pages/library-recentlyadded.ejs b/src/renderer/views/pages/library-recentlyadded.ejs index 1b588909..18df5f4a 100644 --- a/src/renderer/views/pages/library-recentlyadded.ejs +++ b/src/renderer/views/pages/library-recentlyadded.ejs @@ -44,9 +44,11 @@
- - +
+ + +
diff --git a/src/renderer/views/pages/replay.ejs b/src/renderer/views/pages/replay.ejs index 3b4bbe5f..9acc591a 100644 --- a/src/renderer/views/pages/replay.ejs +++ b/src/renderer/views/pages/replay.ejs @@ -40,7 +40,7 @@
@@ -55,7 +55,7 @@ diff --git a/src/renderer/views/pages/settings.ejs b/src/renderer/views/pages/settings.ejs index 692b6ea1..2929bd8d 100644 --- a/src/renderer/views/pages/settings.ejs +++ b/src/renderer/views/pages/settings.ejs @@ -24,6 +24,22 @@ +
+
+ {{$root.getLz('settings.option.window.openOnStartup')}} +
+
+ +
+
+
+
+ {{$root.getLz('settings.option.window.openOnStartup.hidden')}} +
+
+ +
+
{{$root.getLz('settings.option.general.resumebehavior')}}
@@ -121,8 +137,13 @@
{{$root.getLz('settings.option.audio.enableAdvancedFunctionality.audioNormalization.description')}}
+
+ + {{$root.getLz('settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled')}} + +
- +
@@ -164,7 +185,7 @@ {{$root.getLz('settings.option.visual.windowBackgroundStyle')}}
- -
- -
-
- {{$root.getLz('settings.option.window.openOnStartup.hidden')}} -
-
- -
-
{{$root.getLz("settings.option.window.close_button_hide")}} @@ -881,6 +886,12 @@ } }, methods: { + windowBgStyleChange() { + this.$root.getNowPlayingArtworkBG(undefined, true) + if(this.$root.cfg.visual.window_background_style == "mica") { + this.$root.spawnMica() + } + }, reinstallWidevineCDM () { bootbox.confirm("Are you sure you want to reinstall Widevine?", (ok)=>{ if(ok) { diff --git a/winget.json b/winget.json index 955b9273..4468a361 100644 --- a/winget.json +++ b/winget.json @@ -1,5 +1,5 @@ { - "electronVersion": "16.0.7", + "electronVersion": "16.0.07", "electronDownload": { "version": "16.0.7+wvcus", "mirror": "https://github.com/castlabs/electron-releases/releases/download/v" @@ -38,4 +38,4 @@ ], "icon": "resources/icons/icon.ico" } -} \ No newline at end of file +}