Merge pull request #682 from ciderapp/develop

ok so basically fuck main.
This commit is contained in:
cryptofyre 2022-03-28 23:00:52 -05:00 committed by GitHub
commit 820d1446a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
161 changed files with 19586 additions and 11036 deletions

View file

@ -10,8 +10,12 @@ jobs:
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
@ -31,26 +35,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:
@ -65,4 +75,7 @@ jobs:
mv ~/Cider/dist/*.blockmap ~/Cider/dist/artifacts
- store_artifacts:
path: ~/Cider/dist/artifacts
- run:
name: Publish Release
command: |
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

View file

@ -1,6 +1,6 @@
name: Feature Request
description: Suggest an idea to improve Cider.
title: "[Enhancement]: "
title: "[Feature Request]: "
labels: ["enhancement", "triage"]
assignees: []
body:

3
.gitignore vendored
View file

@ -146,6 +146,9 @@ dist
!.yarn/sdks
!.yarn/versions
# pnpm
pnpm-lock.yaml
## JetBrains GitIgnore ##
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider

Binary file not shown.

View file

@ -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 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/cryptofyre.AppleMusicElectron)
@ -56,4 +58,3 @@ for any legal concerns contact me at <a href="mailto:cryptofyre@cryptofyre.org">
<img href="https://www.jetbrains.com/" width="120px" height="125px" src="https://logonoid.com/images/jetbrains-logo.png" alt="JetBrains">
<img href="https://www.macstadium.com/" width="300px" src="https://user-images.githubusercontent.com/33162551/124784795-df5d4c80-df0b-11eb-99a7-dc2b1cfb81bd.png" alt="MacStadium">
</p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -1212,9 +1212,9 @@
tslib "^1.9.3"
"@sentry/electron@^3.0.2":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.3.tgz#cfb8ba582753a9b34beb4f775cc48fd0a82096df"
integrity sha512-uDSFfl3eL29Dq8jYIJmWFWRHMQCSNk6pjL6gUmJiPhEhpu72hokZyezUJsJrSyipraqLgmSimY71u0ayARYqwg==
version "3.0.4"
resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.4.tgz#ce69bab9b2f6a7b92183e9fff138a0f79c5c76e3"
integrity sha512-IsvhxtHeBLNoRMMfsOHrWghNoJZodJ2lC95Qm22Nsk/qm3W11YMxa38u/l1aKU2f3gmu3Gbti4sT+3eNXD/bKg==
dependencies:
"@sentry/browser" "6.17.2"
"@sentry/core" "6.17.2"
@ -1234,12 +1234,12 @@
tslib "^1.9.3"
"@sentry/integrations@^6.18.1":
version "6.18.1"
resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-6.18.1.tgz#c815eb9d104739805401b69d5559adec14876e33"
integrity sha512-Xzg9C0qPpauZGab2OLKnJjCwn/Lx7WsZK87Q53KaYcscdvXNV0LriNzNKcBIRH+Q+GEsaF3mjyGDLmuDABB59A==
version "6.18.2"
resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-6.18.2.tgz#caed0092e8a6c9fb0b8b7efd2deef946ca76e626"
integrity sha512-jzEH15m1dewzma2Fp0ENNRUDEOI3gGPfC/+lsLAuj9AMoNZ6qykQP8cB8OPTlzIZc0oyWGAE/1LoTrndPAvoPA==
dependencies:
"@sentry/types" "6.18.1"
"@sentry/utils" "6.18.1"
"@sentry/types" "6.18.2"
"@sentry/utils" "6.18.2"
localforage "^1.8.1"
tslib "^1.9.3"
@ -1283,10 +1283,10 @@
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30"
integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ==
"@sentry/types@6.18.1":
version "6.18.1"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.18.1.tgz#e2de38dd0da8096a5d22f8effc6756c919266ede"
integrity sha512-wp741NoBKnXE/4T9L723sWJ8EcNMxeTIT1smgNJOfbPwrsDICoYmGEt6JFa05XHpWBGI66WuNvnDjoHVeh6zhA==
"@sentry/types@6.18.2":
version "6.18.2"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.18.2.tgz#f528fec8b75c19d5a6976004e71703184c6cf7be"
integrity sha512-WzpJf/Q5aORTzrSwer/As1NlO90dBAQpaHV2ikDDKqOyMWEgjKb5/4gh59p9gH8JMMnLetP1AvQel0fOj5UnUw==
"@sentry/utils@6.17.2":
version "6.17.2"
@ -1296,12 +1296,12 @@
"@sentry/types" "6.17.2"
tslib "^1.9.3"
"@sentry/utils@6.18.1":
version "6.18.1"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.18.1.tgz#1aa819502b042540612f4db7bcb86c7b176f5a6b"
integrity sha512-IFZmuvA+c5lDGlZEri13JSyUP0BHelzY0S4dcKxAzskPW+BtBdQDgYGV90iED1y+IRMLawWb34GF7HyJSouN1Q==
"@sentry/utils@6.18.2":
version "6.18.2"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.18.2.tgz#c572a3ff49113e7dc4c97db1a18d117f199b9fff"
integrity sha512-EC619jesknyu4xpwud5WC/5odYLz6JUy7OSFy5405PpdGeh/m8XUvuJAx4zDx0Iz/Mlk0S1Md+ZcQwqkv39dkw==
dependencies:
"@sentry/types" "6.18.1"
"@sentry/types" "6.18.2"
tslib "^1.9.3"
"@sindresorhus/is@^0.14.0":
@ -1610,9 +1610,9 @@
"@types/node" "*"
"@types/yargs-parser@*":
version "20.2.1"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129"
integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==
version "21.0.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==
"@types/yargs@^16.0.0":
version "16.0.4"
@ -1622,9 +1622,9 @@
"@types/yargs-parser" "*"
"@types/yargs@^17.0.1":
version "17.0.8"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.8.tgz#d23a3476fd3da8a0ea44b5494ca7fa677b9dad4c"
integrity sha512-wDeUwiUmem9FzsyysEwRukaEdDNcwbROvQ9QGRKaLI6t+IltNzbn4/i4asmB10auvZGQCzSQ6t0GSczEThlUXw==
version "17.0.9"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.9.tgz#f1f931a4e5ae2c0134dea10f501088636a50b46a"
integrity sha512-Ci8+4/DOtkHRylcisKmVMtmVO5g7weUVCKcsu1sJvF1bn0wExTmbHmhFKj7AnEm0de800iovGhdSKzYnzbaHpg==
dependencies:
"@types/yargs-parser" "*"
@ -2317,12 +2317,12 @@ braces@^3.0.1, braces@~3.0.2:
fill-range "^7.0.1"
browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.19.1:
version "4.19.3"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383"
integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==
version "4.20.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.0.tgz#35951e3541078c125d36df76056e94738a52ebe9"
integrity sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==
dependencies:
caniuse-lite "^1.0.30001312"
electron-to-chromium "^1.4.71"
caniuse-lite "^1.0.30001313"
electron-to-chromium "^1.4.76"
escalade "^3.1.1"
node-releases "^2.0.2"
picocolors "^1.0.0"
@ -2534,10 +2534,10 @@ camelcase@^6.2.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
caniuse-lite@^1.0.30001312:
version "1.0.30001312"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f"
integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==
caniuse-lite@^1.0.30001313:
version "1.0.30001314"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz#65c7f9fb7e4594fca0a333bec1d8939662377596"
integrity sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw==
castv2-client@^1.2.0:
version "1.2.0"
@ -3505,10 +3505,10 @@ electron-store@^8.0.1:
conf "^10.0.3"
type-fest "^1.0.2"
electron-to-chromium@^1.4.71:
version "1.4.75"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz#d1ad9bb46f2f1bf432118c2be21d27ffeae82fdd"
integrity sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q==
electron-to-chromium@^1.4.76:
version "1.4.80"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.80.tgz#299a1ea3e32810934b4e3c2e4d4cb53136fdab3f"
integrity sha512-COsbJCGVYCc/aAY4cd94x1Js3q0r406YKGbdL8LXHg0O9dEjuFEFU/vZneRxBxKo/f1lLHi0YyAR7sbFM+i8Bg==
electron-updater@^4.6.5:
version "4.6.5"
@ -3635,9 +3635,9 @@ enhanced-resolve@^4.1.1:
tapable "^1.0.0"
enhanced-resolve@^5.8.3:
version "5.9.1"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.1.tgz#e898cea44d9199fd92137496cff5691b910fb43e"
integrity sha512-jdyZMwCQ5Oj4c5+BTnkxPgDZO/BJzh/ADDmKebayyzNwjVX1AFCeGkOfxNx0mHi2+8BKC5VxUYiw3TIvoT7vhw==
version "5.9.2"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz#0224dcd6a43389ebfb2d55efee517e5466772dd9"
integrity sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
@ -4217,11 +4217,10 @@ function-bind@^1.1.1:
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
gauge@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.2.tgz#c3777652f542b6ef62797246e8c7caddecb32cc7"
integrity sha512-aSPRm2CvA9R8QyU5eXMFPd+cYkyxLsXHd2l5/FOH2V/eml//M04G6KZOmTap07O1PvEwNcl2NndyLfK8g3QrKA==
version "4.0.3"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.3.tgz#286cf105c1962c659f0963058fb05116c1b82d3f"
integrity sha512-ICw1DhAwMtb22rYFwEHgJcx1JCwJGv3x6G0OQUq56Nge+H4Q8JEwr8iveS0XFlsUNSI67F5ffMGK25bK4Pmskw==
dependencies:
ansi-regex "^5.0.1"
aproba "^1.0.3 || ^2.0.0"
color-support "^1.1.3"
console-control-strings "^1.1.0"
@ -4655,9 +4654,9 @@ http-errors@~1.6.2:
statuses ">= 1.4.0 < 2"
http-parser-js@>=0.5.1:
version "0.5.5"
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.5.tgz#d7c30d5d3c90d865b4a2e870181f9d6f22ac7ac5"
integrity sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==
version "0.5.6"
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd"
integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==
http-proxy-agent@^4.0.1:
version "4.0.1"

View file

@ -1,5 +1,5 @@
let i = 1, k = 1;
export default class ExamplePlugin {
class ExamplePlugin {
/**
* Private variables for interaction in plugins
*/
@ -41,7 +41,7 @@ export default class ExamplePlugin {
/**
* Runs on playback State Change
* @param attributes Music Attributes (attributes.state = current state)
* @param attributes Music Attributes (attributes.status = current state)
*/
onPlaybackStateDidChange(attributes: object): void {
console.log('onPlaybackStateDidChange has been called ' + i + ' times');
@ -58,3 +58,5 @@ export default class ExamplePlugin {
}
}
module.exports = ExamplePlugin;

View file

@ -1,4 +1,4 @@
export default class sendSongToTitlebar {
class sendSongToTitlebar {
/**
* Base Plugin Details (Eventually implemented into a GUI in settings)
*/
@ -24,7 +24,7 @@ export default class sendSongToTitlebar {
onBeforeQuit(): void {}
/**
* Runs on playback State Change
* @param attributes Music Attributes (attributes.state = current state)
* @param attributes Music Attributes (attributes.status = current state)
*/
onPlaybackStateDidChange(attributes: any): void {
this._win.setTitle(`${(attributes != null && attributes.name != null && attributes.name.length > 0) ? (attributes.name + " - ") : ''}Cider`)
@ -35,3 +35,5 @@ export default class sendSongToTitlebar {
*/
onNowPlayingItemDidChange(attributes: object): void {}
}
module.exports = sendSongToTitlebar;

View file

@ -2,12 +2,12 @@
"name": "cider",
"applicationId": "Cider",
"productName": "Cider",
"version": "1.3.0",
"version": "1.4.0",
"description": "A new look into listening and enjoying music in style and performance.",
"license": "AGPL-3.0",
"main": "./build/index.js",
"author": "Cider Collective <cryptofyre@cider.sh> (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"
},
@ -16,7 +16,6 @@
"scripts": {
"build": "tsc",
"watch": "tsc --watch",
"test": "yarn build && playwright test",
"start": "run-script-os",
"start:win32": "yarn build && set ELECTRON_ENABLE_LOGGING=true && electron ./build/index.js --enable-accelerated-mjpeg-decode --enable-accelerated-video --disable-gpu-driver-bug-workarounds --ignore-gpu-blacklist --enable-native-gpu-memory-buffers",
"start:linux": "yarn build && ELECTRON_ENABLE_LOGGING=true && electron ./build/index.js --enable-accelerated-mjpeg-decode --enable-accelerated-video --disable-gpu-driver-bug-workarounds --ignore-gpu-blacklist --enable-native-gpu-memory-buffers",
@ -33,13 +32,12 @@
"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",
"@sentry/integrations": "^6.18.1",
"adm-zip": "0.4.10",
"castv2-client": "^1.2.0",
"chokidar": "^3.5.3",
"discord-rpc": "^4.0.1",
@ -49,7 +47,6 @@
"electron-notarize": "^1.1.1",
"electron-store": "^8.0.1",
"electron-updater": "^4.6.5",
"electron-window-state": "^5.0.3",
"express": "^4.17.3",
"get-port": "^5.1.1",
@ -65,15 +62,14 @@
"react-dom": "^17.0.2",
"run-script-os": "^1.1.6",
"source-map-support": "^0.5.21",
"typescript": "^4.5.5",
"v8-compile-cache": "^2.3.0",
"wallpaper": "5.0.1",
"ws": "^8.5.0",
"xml2js": "^0.4.23",
"youtube-search-without-api-key": "^1.0.7"
},
"devDependencies": {
"@playwright/test": "^1.19.2",
"@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",
@ -82,7 +78,7 @@
"electron-builder-notarize-pkg": "^1.2.0",
"electron-webpack": "^2.8.2",
"musickit-typescript": "^1.2.4",
"playwright": "^1.19.2",
"typescript": "^4.6.2",
"vue-devtools": "^5.1.4",
"webpack": "~5.69.1"
},
@ -109,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",

View file

@ -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");
});

53
resources/circle.js Normal file
View file

@ -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}`);
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Before After
Before After

View file

@ -188,3 +188,15 @@ Update 28/02/2022 13:00 UTC
* `term.time.days`: Added for `en_US`
* `term.time.day`: Added for `en_US`
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`
Update 20/3/2022 00:01 UTC
* `term.creditDesignedBy`: Added for `en_US`
Update 29/3/2022 04:00 UTC
* `settings.option.audio.enableAdvancedFunctionality.ciderPPE.description`: Changed for `en_US` (Deleted for all language files)

View file

@ -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.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",
@ -280,7 +280,7 @@
"settings.header.experimental": "Experimentální",
"settings.header.experimental.description": "Upravte experimentální nastavení pro Cider.",
"settings.option.experimental.compactUI": "Kompaktní uživatelské rozhraní",
"settings.option.experimental.close_button_hide": "Tlačítko Zavřít by mělo aplikaci skrýt",
"settings.option.window.close_button_hide": "Tlačítko Zavřít by mělo aplikaci skrýt",
"settings.option.experimental.copy_log": "Zkopírujte protokoly do clipboard",
"settings.option.experimental.inline_playlists": "Vložené seznamy skladeb a alba",
"spatial.notTurnedOn": "Prostorová funkce zvuku je zakázána. Chcete-li jej používat, nejprve jej povolte.",

View file

@ -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.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)",
@ -291,7 +291,7 @@
"settings.header.experimental": "Experimentell",
"settings.header.experimental.description": "Passe die experimentellen Einstellungen für Cider an.",
"settings.option.experimental.compactUI": "Kompaktes UI",
"settings.option.experimental.close_button_hide": "Schließtaste soll die App verbergen",
"settings.option.window.close_button_hide": "Schließtaste soll die App verbergen",
"settings.option.experimental.copy_log": "Kopiere Logs in die Zwischenablage",
"settings.option.experimental.inline_playlists": "Inline Playlists und Alben",
"spatial.notTurnedOn": "Die Audio-Spatialisierung ist deaktiviert. Um sie zu verwenden, musst du diese zuerst aktivieren.",

View file

@ -11,5 +11,10 @@
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialisation",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialise audio and make audio more 3-dimensional (note: This is not Dolby Atmos)",
"spatial.notTurnedOn": "Audio Spatialisation is disabled. To use, please enable it first.",
"action.tray.minimize": "Minimise to Tray"
"action.tray.minimize": "Minimise to Tray",
"term.tracks": "songs",
"term.track": {
"one" : "song",
"other" : "songs"
}
}

View file

@ -23,6 +23,8 @@
"term.about": "About",
"term.privateSession": "Pwivate Session",
"term.queue": "Queue",
"term.lyrics": "Wywics",
"term.miniplayer": "MinyiPwayew",
"term.history": "Histowy",
"term.search": "Seawch",
"term.library": "Wibwawy",
@ -90,13 +92,25 @@
"term.time.released": "Weweased",
"term.time.updated": "Updated",
"term.time.days": "days",
"term.time.day": "day",
"term.time.day": {
"one": "day",
"other": "days"
},
"term.time.hours": "houws",
"term.time.hour": "houw",
"term.time.hour": {
"one": "houw",
"other": "houws"
},
"term.time.minutes": "minyutes",
"term.time.minute": "minyute",
"term.time.minute": {
"one": "minyute",
"other": "minyutes"
},
"term.time.seconds": "seconds",
"term.time.second": "second",
"term.time.second": {
"one": "second",
"other": "seconds"
},
"term.fullscreenView": "Fuwwscween View",
"term.defaultView": "Defauwt View",
"term.audioSettings": "Audio Settings",
@ -118,8 +132,8 @@
"term.reset": "Weset",
"term.tracks": "twacks",
"term.track": {
"one": "track",
"other": "tracks"
"one": "twack",
"other": "twacks"
},
"term.videos": "Videos",
"term.menu": "Menyu",
@ -148,6 +162,7 @@
"term.noVideos": "Nyo videos found.",
"term.plugin": "Pwug-in",
"term.pluginMenu": "Pwug-in Menyu",
"term.pluginMenu.none": "Nyo intewactive pwugins",
"term.replay": "Wepway",
"term.uniqueAlbums": "Unyique Awbums",
"term.uniqueArtists": "Unyique Awtists",
@ -159,6 +174,7 @@
"term.plays": "Pways",
"term.topGenres": "Top Genwes",
"term.confirmLogout": "Awe you suwe you want to wogout?",
"term.creditDesignedBy": "Designyed by ${authorUsername}",
"home.title": "Home",
"home.recentlyPlayed": "Wecentwy Pwayed",
"home.recentlyAdded": "Wecentwy Added",
@ -205,6 +221,8 @@
"action.startRadio": "Stawt Wadio",
"action.goToArtist": "Go to Awtist",
"action.goToAlbum": "Go to Awbum",
"action.showInPlaylist": "Show in Pwaywist",
"action.showInAppleMusic": "Show in Appwe Music",
"action.moveToTop": "Muv out of Fowdew",
"action.share": "Shawe",
"action.rename": "Wenyame",
@ -228,6 +246,7 @@
"action.newpreset": "Nyew Pweset...",
"action.deletepreset": "Dewete Pweset",
"action.open": "Open",
"action.relaunch.confirm": "Do you want to wewaunch Cidew?",
"settings.header.general": "Genyewaw",
"settings.header.general.description": "Adjust the genyewaw settings fow Cidew.",
"settings.option.general.language": "Wanguage",
@ -265,6 +284,7 @@
"settings.option.audio.seamlessTransition": "Seamwess Audio Twansition",
"settings.option.audio.enableAdvancedFunctionality": "Enyabwe Advanced Functionyawity",
"settings.option.audio.enableAdvancedFunctionality.description": "Enyabwing AudioContext functionyawity wiww awwow fow extended audio featuwes wike Audio Nyowmawization, Equawizews and Visuawizews - howevew on some systems this may cause stuttewing in audio twacks.",
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cidew thinks youw PC cant handwe these featuwes. Awe you suwe you want to continyue?",
"settings.option.audio.audioLab": "Cidew Audio Wab",
"settings.option.audio.audioLab.description": "An assowtment of in-house devewoped audio effects fow Cidew.",
"settings.warn.audioLab.withoutAF": "AudioContext (Advanced Functionyawity) is wequiwed to enyabwe Cidew Audio Wabowatowy.",
@ -275,7 +295,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.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)",
@ -283,6 +303,7 @@
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggwessive",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Nyowmawization",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Nyowmawizes peak vowume fow individuaw twacks to cweate a mowe unyifowm wistenying expewience.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Manyaged by Audio Wab",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatiawization",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatiawize audio and make audio mowe 3-dimensionyaw (nyote: This is nyot Dowby Atmos)",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cidew Tunyed Spatiawization",
@ -321,9 +342,22 @@
"settings.prompt.visual.theme.github.URL": "Entew the UWW of the theme you want to instaww",
"settings.notyf.visual.theme.install.success": "Theme instawwed successfuwwy",
"settings.notyf.visual.theme.install.error": "Theme instawwation faiwed",
"settings.header.visual.plugin": "Pwugin",
"settings.option.visual.plugin.github.download": "Instaww fwom GitHub UWW",
"settings.option.visual.plugin.github.explore": "Expwowe GitHub Pwugins",
"settings.header.visual.plugin.github.page": "Pwugins fwom GitHub",
"settings.option.visual.plugin.github.install.confirm": "Awe you suwe you want to instaww {{ repo }}?",
"settings.prompt.visual.plugin.github.URL": "Entew the UWW of the pwugin you want to instaww",
"settings.prompt.visual.plugin.github.success": "Pwugin instawwed successfuwwy, Pwess OK to wewaunch Cidew",
"settings.notyf.visual.plugin.install.success": "Pwugin instawwed successfuwwy",
"settings.notyf.visual.plugin.install.error": "Pwugin instawwation faiwed",
"settings.option.visual.theme.default": "Cidew",
"settings.option.visual.theme.dark": "Dawk",
"settings.option.visual.showPersonalInfo": "Show Pewsonyaw Info",
"settings.header.window": "Window",
"settings.header.window.description": "Adjust the window settings fow Cidew.",
"settings.option.window.openOnStartup": "Open Cidew on Stawtup",
"settings.option.window.openOnStartup.hidden": "Open Hidden",
"settings.header.lyrics": "Wywics",
"settings.header.lyrics.description": "Adjust the wywics settings fow Cidew.",
"settings.option.lyrics.enableMusixmatch": "Enyabwe Musixmatch Wywics",
@ -347,13 +381,17 @@
"settings.option.debug.openAppData": "Open Cidew Fowdew",
"settings.header.experimental": "Expewimentaw",
"settings.header.experimental.description": "Adjust the expewimentaw settings fow Cidew.",
"settings.option.experimental.reinstallwidevine": "Weinstaww WidevinyeCDM",
"settings.option.experimental.reinstallwidevine.confirm": "Awe you suwe you want to weinstaww Widevinye?",
"settings.option.experimental.unknownPlugin": "Unknyown Souwces",
"settings.option.experimental.unknownPlugin.description": "Awwow instawwation of pwugins fwom wepos othew than the Cidew Pwugin Wepositowy",
"settings.option.experimental.compactUI": "Compact UI",
"settings.option.experimental.close_button_hide": "Cwose Button Shouwd Hide the Appwication",
"settings.option.window.close_button_hide": "Cwose Button Shouwd Hide the Appwication",
"settings.option.experimental.inline_playlists": "Inwinye Pwaywists and Awbums",
"settings.option.advanced.playlistTrackMapping": "Pwaywist Twack Mapping",
"settings.option.advanced.playlistTrackMapping.description": "Enyabwes deep scannying of pwaywists to detewminye which twacks awe in which pwaywists.",
"settings.option.advanced.playlistTrackMapping.description": "Enyabwes deep scannying of pwaywists to detewminye which twacks awe in which pwaywists. Pwaywist cache buiwd times can incwease signyificantwy.",
"settings.option.visual.transparent": "Twanspawent fwame",
"settings.option.visual.transparent.description": "Twanspawent fwame (nyeeds Theme Suppowt , wequiwes wewaunch)",
"spatial.notTurnedOn": "Audio Spatiawization is disabwed. To use, pwease enyabwe it fiwst.",
"spatial.spatialProperties": "Spatiaw Pwopewties",
"spatial.width": "Width",
@ -376,5 +414,15 @@
"settings.header.unfinished": "Unfinyished",
"remote.web.title": "Cidew Wemote",
"remote.web.description": "Scan the QW code to paiw youw phonye up with this Cidew instance",
"share.platform.twitter.tweet": "Wisten to {{song}} on Appwe Music.\n\n{{song}}\n\n#AppweMusic #Cidew",
"share.platform.twitter": "Twittew",
"share.platform.facebook": "Facebook",
"share.platform.reddit": "Weddit",
"share.platform.telegram": "Tewegwam",
"share.platform.whatsapp": "WhatsApp",
"share.platform.messenger": "Messengew",
"share.platform.email": "Emaiw",
"share.platform.songLink": "Copy with song.wink",
"share.platform.clipboard": "Copy Wink",
"about.thanks": "Majow thanks to the Cidew Cowwective Team and aww of ouw contwibutows."
}

View file

@ -235,7 +235,7 @@
"settings.option.audio.enableAdvancedFunctionality": "cool piss tricks",
"settings.option.audio.enableAdvancedFunctionality.description": "enabling the AudioContext thingy allows you to do cool stuffs, however on some systems your song may stutter",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Audio Pissifier™",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "makes your bladder go overboard and makes your piss crisp and clear",
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "pissifier dont go well with 3d piss. turn it off and try again.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "pissifier strength",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "tune your bladder (blood may appear with turbo strength)",
@ -295,7 +295,7 @@
"settings.header.experimental": "piss lab",
"settings.header.experimental.description": "mitochondria is the powerhouse of the cell",
"settings.option.experimental.compactUI": "compact piss",
"settings.option.experimental.close_button_hide": "play hide-and-seek when clicking close button",
"settings.option.window.close_button_hide": "play hide-and-seek when clicking close button",
"settings.option.experimental.copy_log": "copy sewage to pissboard",
"settings.option.experimental.inline_playlists": "inpiss pisslists and piss collections",
"spatial.notTurnedOn": "3D piss is not on. turn it on lol",

View file

@ -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.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)",
@ -290,7 +290,7 @@
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Adjust the experimental settings for Cider.",
"settings.option.experimental.compactUI": "Compact UI",
"settings.option.experimental.close_button_hide": "Close Button Should Hide the Application",
"settings.option.window.close_button_hide": "Close Button Should Hide the Application",
"settings.option.experimental.copy_log": "Copy logs to clipboard",
"settings.option.experimental.inline_playlists": "Inline Playlists and Albums",
"spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.",

View file

@ -224,7 +224,7 @@
"settings.option.audio.enableAdvancedFunctionality": "ᒷリᖋᕊ|:ᒷ ᖋ↸⍊ᖋリᔮᒷ↸ ⎓⚍リᔮᒣ╎ᒍリᖋ|:╎ᒣ॥",
"settings.option.audio.enableAdvancedFunctionality.description": "ᒷリᖋᕊ|:╎リ┤ ᖋ⚍↸╎ᒍᔮᒍリᒣᒷ/ᒣ ⎓⚍リᔮᒣ╎ᒍリᖋ|:╎ᒣ॥ ∴╎|:|: ᖋ|:|:ᒍ∴ ⎓ᒍ∷ ᒷ/ᒣᒷリ↸ᒷ↸ ᖋ⚍↸╎ᒍ ⎓ᒷᖋᒣ⚍∷ᒷϟ |:╎·ǀ·ᒷ ᖋ⚍↸╎ᒍ リᒍ∷ᒲᖋ|:╎∩ᖋᒣ╎ᒍリ , ᒷᑑ⚍ᖋ|:╎∩ᒷ∷ϟ ᖋリ↸ ⍊╎ϟ⚍ᖋ|:╎∩ᒷ∷ϟ, ⍑ᒍ∴ᒷ⍊ᒷ∷ ᒍリ ϟᒍᒲᒷ ϟ॥ϟᒣᒷᒲϟ ᒣ⍑╎ϟ ᒲᖋ॥ ᔮᖋ⚍ϟᒷ ϟᒣ⚍ᒣᒣᒷ∷╎リ┤ ╎リ ᖋ⚍↸╎ᒍ ᒣ∷ᖋᔮ·ǀ·ϟ.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "ᔮ╎↸ᒷ∷ ᖋ↸∷ᒷリᖋ|:╎リᒷ i!∷ᒍᔮᒷϟϟᒍ∷™️",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "i!ϟ॥ᔮ⍑ᒍᖋᔮᒍ⚍ϟᒣ╎ᔮ ᒷリ⍑ᖋリᔮᒷᒲᒷリᒣϟ ᒣ⍑ᖋᒣ ᒲᖋ·ǀ·ᒷϟ ᒷ⍊ᒷ∷॥ᒣ⍑╎リ┤ ϟᒍ⚍リ↸ ᕊᒍᒣ⍑ ∷╎ᔮ⍑ᒷ∷ ᖋリ↸ ᒲᒍ∷ᒷ |:╎⍊ᒷ|:॥ | ↸ᒷϟ╎┤リᒷ↸ ᕊ॥ ᒲᖋ╎·ǀ·╎∴╎.",
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "ᔮᖋi! ╎ϟ リᒍᒣ ᔮᒲi!ᖋᒣ╎ᕊ|:ᒷ ∴╎ᒣ⍑ ϟi!ᖋᒣ╎ᖋ|:╎∩ᖋᒣ╎ᒍリ. i!|:ᒷᖋϟᒷ ↸╎ϟᖋᕊ|:ᒷ ϟi!ᖋᒣ╎ᖋ|:╎∩ᖋᒣ╎ᒍリ ᒣᒍ ᔮᒍリᒣ╎リ⚍ᒷ.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "ᔮᖋi! ϟᒣ∷ᒷリ┤ᒣ⍑",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "ᔮ⍑ᖋリ┤ᒷϟ ᒣ⍑ᒷ ϟᒣ∷ᒷリ┤ᒣ⍑ ᒍ⎓ ᒣ⍑ᒷ i!∷ᒍᔮᒷϟϟ╎リ┤ ↸ᒍリᒷ ᒣᒍ ᒣ⍑ᒷ ᖋ⚍↸╎ᒍ. (ᖋ┤┤∷ᒷϟϟ╎⍊ᒷ ᒲᖋ॥ ॥╎ᒷ|:↸ ⚍リ↸ᒷϟ╎∷ᖋᕊ|:ᒷ ∷ᒷϟ⚍|:ᒣϟ)",
@ -285,7 +285,7 @@
"settings.header.experimental": "ᒷ/i!ᒷ∷╎ᒲᒷリᒣᖋ|:",
"settings.header.experimental.description": "ᖋ↸⋮⚍ϟᒣ ᒣ⍑ᒷ ᒷ/i!ᒷ∷╎ᒲᒷリᒣᖋ|: ϟᒷᒣᒣ╎リ┤ϟ ⎓ᒍ∷ ᔮ╎↸ᒷ∷.",
"settings.option.experimental.compactUI": "ᔮᒲi!ᖋᔮᒣ ⚍╎",
"settings.option.experimental.close_button_hide": "ᔮ|:ᒍϟᒷ ᕊ⚍ᒣᒣᒍリ ϟ⍑ᒍ⚍|:↸ ⍑╎↸ᒷ ᒣ⍑ᒷ ᖋi!i!|:╎ᔮᖋᒣ╎ᒍリ",
"settings.option.window.close_button_hide": "ᔮ|:ᒍϟᒷ ᕊ⚍ᒣᒣᒍリ ϟ⍑ᒍ⚍|:↸ ⍑╎↸ᒷ ᒣ⍑ᒷ ᖋi!i!|:╎ᔮᖋᒣ╎ᒍリ",
"settings.option.experimental.copy_log": "ᔮi!॥ |:ᒍ┤ϟ ᒣᒍ ᔮ|:╎i!ᕊᒍᖋ∷↸",
"settings.option.experimental.inline_playlists": "╎リ|:╎リᒷ i!|:ᖋ॥|:╎ϟᒣϟ ᖋリ↸ ᖋ|:ᕊ⚍ᒲϟ",
"spatial.notTurnedOn": "ᖋ⚍↸╎ᒍ ϟi!ᖋᒣ╎ᖋ|:╎∩ᖋᒣ╎ᒍリ ╎ϟ ↸╎ϟᖋᕊ|:ᒷ↸. ᒣᒍ ⚍ϟᒷ, i!|:ᒷᖋϟᒷ ᒷリᖋᕊ|:ᒷ ╎ᒣ ⎓╎∷ϟᒣ.",

View file

@ -23,6 +23,8 @@
"term.about": "About",
"term.privateSession": "Private Session",
"term.queue": "Queue",
"term.lyrics": "Lyrics",
"term.miniplayer": "MiniPlayer",
"term.history": "History",
"term.search": "Search",
"term.library": "Library",
@ -90,13 +92,25 @@
"term.time.released": "Released",
"term.time.updated": "Updated",
"term.time.days": "days",
"term.time.day": "day",
"term.time.day": {
"one": "day",
"other": "days"
},
"term.time.hours": "hours",
"term.time.hour": "hour",
"term.time.hour": {
"one": "hour",
"other": "hours"
},
"term.time.minutes": "minutes",
"term.time.minute": "minute",
"term.time.minute": {
"one": "minute",
"other": "minutes"
},
"term.time.seconds": "seconds",
"term.time.second": "second",
"term.time.second": {
"one": "second",
"other": "seconds"
},
"term.fullscreenView": "Fullscreen View",
"term.defaultView": "Default View",
"term.audioSettings": "Audio Settings",
@ -118,8 +132,8 @@
"term.reset": "Reset",
"term.tracks": "tracks",
"term.track": {
"one" : "track",
"other" : "tracks"
"one": "track",
"other": "tracks"
},
"term.videos": "Videos",
"term.menu": "Menu",
@ -160,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",
@ -269,6 +284,7 @@
"settings.option.audio.seamlessTransition": "Seamless Audio Transition",
"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.warn.audio.enableAdvancedFunctionality.lowcores": "Cider thinks your PC cant handle these features. Are you sure you want to continue?",
"settings.option.audio.audioLab": "Cider Audio Lab",
"settings.option.audio.audioLab.description": "An assortment of in-house developed audio effects for Cider.",
"settings.warn.audioLab.withoutAF": "AudioContext (Advanced Functionality) is required to enable Cider Audio Laboratory.",
@ -279,14 +295,15 @@
"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": "Enhances the perceived audio quality of 256 kbps AAC audio by using a real-time algorithm that takes advantage of both psychoacoustic models of human hearing and AAC encoding characteristics.",
"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)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard",
"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.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience. (Does not work on user uploaded tracks)",
"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",
@ -337,6 +354,10 @@
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Dark",
"settings.option.visual.showPersonalInfo": "Show Personal Info",
"settings.header.window": "Window",
"settings.header.window.description": "Adjust the window settings for Cider.",
"settings.option.window.openOnStartup": "Open Cider on Startup",
"settings.option.window.openOnStartup.hidden": "Open Hidden",
"settings.header.lyrics": "Lyrics",
"settings.header.lyrics.description": "Adjust the lyrics settings for Cider.",
"settings.option.lyrics.enableMusixmatch": "Enable Musixmatch Lyrics",
@ -360,15 +381,18 @@
"settings.option.debug.openAppData": "Open Cider Folder",
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Adjust the experimental settings for Cider.",
"settings.option.experimental.reinstallwidevine": "Reinstall WidevineCDM",
"settings.option.experimental.reinstallwidevine.confirm": "Are you sure you want to reinstall Widevine?",
"settings.option.experimental.unknownPlugin": "Unknown Sources",
"settings.option.experimental.unknownPlugin.description": "Allow installation of plugins from repos other than the Cider Plugin Repository",
"settings.option.experimental.compactUI": "Compact UI",
"settings.option.experimental.close_button_hide": "Close Button Should Hide the Application",
"settings.option.window.close_button_hide": "Close Button Should Hide the Application",
"settings.option.experimental.inline_playlists": "Inline Playlists and Albums",
"settings.option.advanced.playlistTrackMapping": "Playlist Track Mapping",
"settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists. Playlist cache build times can increase significantly.",
"settings.option.visual.transparent": "Transparent frame",
"settings.option.visual.transparent.description": "Transparent frame (needs Theme Support , requires relaunch)",
"settings.header.advanced": "Advanced",
"spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.",
"spatial.spatialProperties": "Spatial Properties",
"spatial.width": "Width",
@ -391,5 +415,15 @@
"settings.header.unfinished": "Unfinished",
"remote.web.title": "Cider Remote",
"remote.web.description": "Scan the QR code to pair your phone up with this Cider instance",
"share.platform.twitter.tweet": "Listen to {{song}} on Apple Music.\n\n{{url}}\n\n#AppleMusic #Cider",
"share.platform.twitter": "Twitter",
"share.platform.facebook": "Facebook",
"share.platform.reddit": "Reddit",
"share.platform.telegram": "Telegram",
"share.platform.whatsapp": "WhatsApp",
"share.platform.messenger": "Messenger",
"share.platform.email": "Email",
"share.platform.songLink": "Copy with song.link",
"share.platform.clipboard": "Copy Link",
"about.thanks": "Major thanks to the Cider Collective Team and all of our contributors."
}

View file

@ -242,7 +242,7 @@
"settings.header.experimental": "En pruebas",
"settings.header.experimental.description": "Ajustes en pruebas para Cider.",
"settings.option.experimental.compactUI": "Interfaz de usuario compacto",
"settings.option.experimental.close_button_hide": "El botón de cerrar minimizará la aplicación en la bandeja",
"settings.option.window.close_button_hide": "El botón de cerrar minimizará la aplicación en la bandeja",
"spatial.notTurnedOn": "La espacialización del audio esta desactivada. Para usarlo primero actívelo.",
"spatial.spatialProperties": "Propiedades espaciales",
"spatial.width": "Ancho",

View file

@ -221,7 +221,7 @@
"settings.option.audio.enableAdvancedFunctionality": "Activer les fonctions avancées",
"settings.option.audio.enableAdvancedFunctionality.description": "L'activation de la fonctionnalité AudioContext permet d'utiliser des fonctions audio étendues telles que la normalisation du son, les égaliseurs et les visualiseurs. Toutefois, sur certains systèmes, cela peut provoquer des bégaiements dans les pistes audio.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Moteur de traitement psycho-acoustique Cider",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Un processus de traitement qui fait croire à votre cerveau que les fichiers sont de meilleure qualité.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalisation du son",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalise le volume maximal des pistes individuelles pour créer une expérience d'écoute plus uniforme.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Spatialisation audio",
@ -272,7 +272,7 @@
"settings.header.experimental": "Expérimental",
"settings.header.experimental.description": "Ajuster les paramètres expérimentaux de Cider.",
"settings.option.experimental.compactUI": "Interface utilisateur compacte",
"settings.option.experimental.close_button_hide": "Le bouton de fermeture doit masquer l'application",
"settings.option.window.close_button_hide": "Le bouton de fermeture doit masquer l'application",
"settings.option.experimental.copy_log": "Copier les logs dans le presse-papier",
"settings.option.experimental.inline_playlists": "Playlists et albums en ligne",
"spatial.notTurnedOn": "La spatialisation audio est désactivée. Pour l'utiliser, vous devez d'abord l'activer.",

View file

@ -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.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",
@ -280,7 +280,7 @@
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Adjust the experimental settings for Cider.",
"settings.option.experimental.compactUI": "Compact UI",
"settings.option.experimental.close_button_hide": "Close Button Should Hide the Application",
"settings.option.window.close_button_hide": "Close Button Should Hide the Application",
"settings.option.experimental.copy_log": "Copy logs to clipboard",
"settings.option.experimental.inline_playlists": "Inline Playlists and Albums",
"spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.",

View file

@ -2,9 +2,9 @@
"i18n.languageName": "Magyar",
"i18n.languageNameEnglish": "Hungarian",
"i18n.category": "main",
"i18n.authors": "@Greenoliv @Amaru @BenjaminStonawski",
"i18n.authors": "@Amaru",
"app.name": "Cider",
"date.format": "${m} ${d}, ${y}",
"date.format": "${y} ${m} ${d}",
"dialog.cancel": "Mégsem",
"dialog.ok": "OK",
"notification.updatingLibrarySongs": "Zenekönyvtár frissítése...",
@ -12,7 +12,7 @@
"notification.updatingLibraryArtists": "Előadók frissítése...",
"term.appleInc": "Apple Inc.",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcastok",
"term.applePodcasts": "Apple Podcasts",
"term.itunes": "iTunes",
"term.github": "GitHub",
"term.discord": "Discord",
@ -23,6 +23,8 @@
"term.about": "Névjegy",
"term.privateSession": "Privát hallgatás",
"term.queue": "Várólista",
"term.lyrics": "Dalszöveg",
"term.miniplayer": "Minilejátszó",
"term.history": "Előzmények",
"term.search": "Keresés",
"term.library": "Könyvtár",
@ -76,10 +78,10 @@
"term.enabled": "Be",
"term.disabled": "Ki",
"term.connect": "Csatlakoztatás",
"term.connecting": "Csatlakozás",
"term.disconnect": "Lecsatlakozatás",
"term.connecting": "Jóváhagyás ?",
"term.disconnect": "Több",
"term.authed": "Hitelesítve",
"term.confirm": "Jóváhagyja?",
"term.confirm": "Jóváhagyás ?",
"term.more": "Több",
"term.less": "Kevesebb",
"term.showMore": "Mutass többet",
@ -89,12 +91,26 @@
"term.time.added": "Hozzáadva",
"term.time.released": "Kiadva",
"term.time.updated": "Frissítve",
"term.time.days": "nap",
"term.time.day": {
"one": "nap",
"other": "nap"
},
"term.time.hours": "óra",
"term.time.hour": "óra",
"term.time.hour": {
"one": "óra",
"other": "óra"
},
"term.time.minutes": "perc",
"term.time.minute": "perc",
"term.time.minute": {
"one": "perc",
"other": "perc"
},
"term.time.seconds": "másodperc",
"term.time.second": "másodperc",
"term.time.second": {
"one": "másodperc",
"other": "másodperc"
},
"term.fullscreenView": "Teljes képernyős mód",
"term.defaultView": "Alapértelmezett nézet",
"term.audioSettings": "Hangbeállítások",
@ -103,7 +119,7 @@
"term.recentStations": "Nemrég játszott",
"term.language": "Nyelv",
"term.funLanguages": "Fantázianyelvek",
"term.noLyrics": "Betöltés... / Dalszöveg nem található. / Instrumentális.",
"term.noLyrics": "Betöltés... / Dalszöveg nem található / Instrumentális",
"term.copyright": "Szerzői jog",
"term.rightsReserved": "Minden jog fenntartva.",
"term.sponsor": "Támogasd a projektet",
@ -112,13 +128,17 @@
"term.socialTeam": "Közösségi csapat",
"term.socials": "Szociális",
"term.contributors": "Hozzájárulók",
"term.equalizer": "Hangszínszabályozó",
"term.equalizer": "Hangszínszabályzó",
"term.reset": "Visszaállítás",
"term.tracks": "zeneszám",
"term.track": {
"one" : "zeneszám",
"other" : "zeneszám"
},
"term.videos": "Videók",
"term.menu": "Menü",
"term.check": "Ellenőrzés",
"term.aboutArtist": "About {{artistName}}",
"term.aboutArtist": "{{artistName}}-ról/ről",
"term.topResult": "Legjobb találatok",
"term.sharedPlaylists": "Megosztott lejátszási listák",
"term.people": "Profilok",
@ -135,24 +155,26 @@
"term.curators": "Kurátorok",
"term.appleCurators": "Apple Kurátorok",
"term.radioShows": "Rádióadások",
"term.recordLabels": "Record Labels",
"term.recordLabels": "Lemezkiadók",
"term.videoExtras": "Videóextrák",
"term.top": "Top",
"term.version": "Verzió",
"term.noVideos": "Nincs találat.",
"term.noVideos": "Nincs találat",
"term.plugin": "Plug-in",
"term.pluginMenu": "Plug-in Menü",
"term.pluginMenu.none": "Nem találhatóak interaktív pluginok",
"term.replay": "Replay",
"term.uniqueAlbums": "Unique Albums",
"term.uniqueArtists": "Unique Artists",
"term.uniqueSongs": "Unique Songs",
"term.topArtists": "Top Artists",
"term.listenedTo": "Listened to:",
"term.times": "alkalom",
"term.topAlbums": "Top Albums",
"term.plays": "Plays",
"term.topGenres": "Top Genres",
"term.uniqueAlbums": "album",
"term.uniqueArtists": "előadó",
"term.uniqueSongs": "zeneszám",
"term.topArtists": "Leghallgatottabb előadói",
"term.listenedTo": "Meghallgatta:",
"term.times": "alkalommal",
"term.topAlbums": "Leghallgatottabb albumok",
"term.plays": "lejátszás",
"term.topGenres": "Leghallgatottabb műfajok",
"term.confirmLogout": "Biztosan ki szeretnél jelentkezni?",
"term.creditDesignedBy": "Készítette ${authorUsername}",
"home.title": "Kezdőlap",
"home.recentlyPlayed": "Nemrég játszott",
"home.recentlyAdded": "Nemrég hozzáadott",
@ -176,7 +198,7 @@
"action.addToLibrary": "Hozzáadás a Könyvtárhoz",
"action.addToLibrary.success": "Hozzáadva a Könyvtárhoz",
"action.addToLibrary.error": "Hiba a hozzáadáskor.",
"action.removeFromLibrary": "Törlés a Könytárból",
"action.removeFromLibrary": "Törlés a Könyvtárból",
"action.removeFromLibrary.success": "Törölve a Könyvtárból",
"action.addToQueue": "Hozzáadás a várólistához",
"action.addToQueue.success": "Hozzáadva a várólistához",
@ -199,6 +221,8 @@
"action.startRadio": "Állomás létrehozása",
"action.goToArtist": "Előadó megjelenítése",
"action.goToAlbum": "Album megjelenítése",
"action.showInPlaylist": "Lejátszási lista megjelenítése",
"action.showInAppleMusic": "Megjelenítés az Apple Musicban",
"action.moveToTop": "Mozgatás legfelülre",
"action.share": "Megosztás",
"action.rename": "Átnevezés",
@ -207,38 +231,43 @@
"action.dislike": "Kevesebb ilyen javasolása",
"action.undoDislike": "A Kevesebb ilyen javasolása visszavonása",
"action.showWebRemoteQR": "Távirányító",
"action.playTracksNext": "${app.selectedMediaItems.length} zenék lejátszása következőnek",
"action.playTracksLater": "${app.selectedMediaItems.length} zenék lejátszása később",
"action.removeTracks": "${self.selectedItems.length} zenék eltávolítása a várólistáról",
"action.playTracksNext": "${app.selectedMediaItems.length} zene lejátszása következőnek",
"action.playTracksLater": "${app.selectedMediaItems.length} zene lejátszása később",
"action.removeTracks": "${self.selectedItems.length} zene eltávolítása a várólistáról",
"action.import": "Importálás",
"action.export": "Exportálás",
"action.showAlbum": "Teljes album megjelenítése",
"action.tray.minimize": "Kicsinyítés a tálcára",
"action.tray.quit": "Kilépés",
"action.tray.minimize": "Kicsinyítés a Tálcára",
"action.tray.quit": "Bezárás",
"action.tray.show": "Megjelenítés",
"action.update": "Frissítés",
"action.install": "Telepítés",
"action.copy": "Másolás",
"action.newpreset": "Új Preset...",
"action.deletepreset": "Preset törlése",
"action.newpreset": "Új előbeállítás...",
"action.deletepreset": "Előbeállítás törlése",
"action.open": "Megnyitás",
"action.relaunch.confirm": "Biztosan szeretnéd újraindítani a Cidert?",
"settings.header.general": "Általános",
"settings.header.general.description": "A Cider általános beállításainak módosítása.",
"settings.option.general.language": "Nyelv",
"settings.option.general.resumebehavior": "Resume behavior",
"settings.option.general.resumebehavior.description": "Resume behavior affects how Cider will resume your session when you return to the app.",
"settings.option.general.resumebehavior.locally": "Locally",
"settings.option.general.resumebehavior.locally.description": "Cider will resume your last session on this machine.",
"settings.option.general.resumebehavior.history": "History",
"settings.option.general.resumebehavior.history.description": "Cider will queue the last song from your overall Apple Music history, across devices.",
"settings.option.general.resumebehavior": "Folytatási viselkedés",
"settings.option.general.resumebehavior.description": "A folytatási viselkedés a Ciderbe való visszatérésnél történő zene lejátszását változtatja.",
"settings.option.general.resumebehavior.locally": "Helyi",
"settings.option.general.resumebehavior.locally.description": "A Cider az ezen az eszközön utoljára játszott zenét fogja folytatni.",
"settings.option.general.resumebehavior.history": "Előzmények",
"settings.option.general.resumebehavior.history.description": "A Cider az utolsó zeneszámot fogja lekérni az Apple Music előzményeidből, eszközökön keresztül.",
"settings.option.general.language.main": "Nyelvek",
"settings.option.general.language.fun": "Fantázianyelvek",
"settings.option.general.language.unsorted": "Azonosítatlan",
"settings.option.general.language.unsorted": "Kategorizálatlan",
"settings.option.general.updateCider": "Cider frissítése",
"settings.option.general.updateCider.branch": "Verzió kiválasztása",
"settings.option.general.updateCider.branch.description": "Válaszd ki a Cider melyik verziójára szeretnél frissíteni",
"settings.option.general.updateCider.branch.main": "Normál",
"settings.option.general.updateCider.branch.develop": "Fejlesztői",
"settings.notyf.updateCider.update-not-available": "Nem található frissítés",
"settings.notyf.updateCider.update-downloaded": "A frissítés le lett töltve, a telepítéshez indítsa újra az alkalmazást",
"settings.notyf.updateCider.update-error": "Hiba történt a frissítés közben",
"settings.notyf.updateCider.update-timeout": "Időtúllépés történt a frissítés alatt",
"settings.header.audio": "Hang",
"settings.header.audio.description": "A Cider hangbeállításainak módosítása.",
"settings.option.audio.volumeStep": "Hangerő lépték",
@ -248,24 +277,24 @@
"settings.header.audio.quality.hireslossless.description": "max. 24-bit/192 kHz sebességen",
"settings.header.audio.quality.lossless": "Veszteségmentes",
"settings.header.audio.quality.lossless.description": "max. up to 24-bit/48 kHz sebességen",
"settings.header.audio.quality.high": "High",
"settings.header.audio.quality.high": "Magas",
"settings.header.audio.quality.high.description": "256 kbps",
"settings.header.audio.quality.standard": "Standard",
"settings.header.audio.quality.standard": "Normál",
"settings.header.audio.quality.standard.description": "64 kbps",
"settings.option.audio.seamlessTransition": "Szünetmentes lejátszás",
"settings.option.audio.enableAdvancedFunctionality": "Haladó funkcionalitás engedélyezése",
"settings.option.audio.enableAdvancedFunctionality.description": "Az AudioContext funkció engedélyezése lehetővé teszi a fejlettebb hangfunkciókat, például a Normalizásást, az Equalizereket és a Visualizer funkciókat, azonban egyes számítógépeken ez akadozást okozhat a hangsávokban.",
"settings.option.audio.audioLab": "Cider Audio Lab",
"settings.option.audio.audioLab.description": "An assortment of in-house developed audio effects for Cider.",
"settings.warn.audioLab.withoutAF": "AudioContext (Advanced Functionality) is required to enable Cider Audio Laboratory.",
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Analog Warmth",
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Simulates the analog warmth modelled after the Korg Nutube 6P1",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Analog Warmth intensity",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Changes the intensity of the Analog Warmth Module processing.",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Smooth",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Warm",
"settings.option.audio.enableAdvancedFunctionality.description": "Az AudioContext funkció engedélyezése lehetővé teszi a fejlettebb hangfunkciókat, mint például a Normalizásást, a Hangszínszabályzókat és a Vizualizálókat, azonban egyes eszközökön ez akadozást okozhat a hangsávokban.",
"settings.option.audio.audioLab": "Cider Hangstúdió",
"settings.option.audio.audioLab.description": "A Ciderhez fejlesztett hangeffektek gyűjteménye.",
"settings.warn.audioLab.withoutAF": "Az AudioContext (Haladó funkcionalitás) szükséges a Cider Hangstúdió engedélyezéséhez.",
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Analóg Érzet",
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "A Korg Nutube 6P1 analóg érzetét szimulálja.",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Analóg Érzet erősség",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Az Analóg Érzet modul hangfeldolgozási erősségét változtatja.",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Szokásos",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Nagyobb",
"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.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!)",
@ -273,14 +302,14 @@
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresszív",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalizálás",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizálja az egyes zeneszámok hangosabb részeit, hogy egységesebb hallgatási élményt hozzon létre.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Térbeli hang",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Térbeli hang és a hang háromdimenziósabbá tétele (Ez nem összekeverendő a Dolby Atmos-szal!)",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Pre-tuned Spatializing Effect, disables the customizable settings of Audio Spatialization. Spatialization must be enabled as a prerequisite.",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Spatialization Profile",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Changes the Tuning Profile of the Spatialization. (Requires App Restart)",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standard",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Térbeli Hang",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "A hangzás háromdimenziósabbá tétele. (Ez nem összekeverendő a Dolby Atmos-szal!)",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Előbeállított Térbeli Hang",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Előre beállított Térbeli hangzás, ami letiltja a Térbeli Hang testreszabási beállításait. A Térbeli Hangot be kell kapcsolni az engedélyezéshez.",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Térbeli Hangprofil",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Megváltoztatja a Térbeli Hang előbeállítás profilját. (Újraindítás szükséges)",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Normál",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Professzionális",
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "A Térbeli Hang nem kompatibilis a CAP-pal. Kapcsold ki a CAP-ot a folytatáshoz.",
"settings.header.visual": "Vizuális",
"settings.header.visual.description": "A Cider vizuális beállításainak módosítása.",
@ -290,7 +319,7 @@
"settings.header.visual.windowBackgroundStyle.image": "Kép",
"settings.option.visual.animatedArtwork": "Animált borító",
"settings.header.visual.animatedArtwork.always": "Mindig",
"settings.header.visual.animatedArtwork.limited": "Oldalakra és speciális bejegyzésekre korlátozva.",
"settings.header.visual.animatedArtwork.limited": "Oldalakra és speciális bejegyzésekre korlátozva",
"settings.header.visual.animatedArtwork.disable": "Kikapcsolás mindenhol",
"settings.option.visual.animatedArtworkQuality": "Animált borító minősége",
"settings.header.visual.animatedArtworkQuality.low": "Alacsony",
@ -305,15 +334,28 @@
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Téma",
"settings.option.visual.theme.github.download": "Telepítés GitHub URL-ről",
"settings.option.visual.theme.github.explore": "Témaáruház",
"settings.option.visual.theme.github.explore": "Témák felfedezése",
"settings.header.visual.theme.github.page": "Témák a GitHub-ról",
"settings.option.visual.theme.github.install.confirm": "Biztos, hogy szeretnéd telepíteni a(z) {{ repo }} témát?",
"settings.option.visual.theme.github.install.confirm": "Biztosan szeretnéd telepíteni a(z) {{ repo }} témát?",
"settings.prompt.visual.theme.github.URL": "Add meg a telepítendő téma URL-jét",
"settings.notyf.visual.theme.install.success": "Téma sikeresen telepítve",
"settings.notyf.visual.theme.install.error": "Sikertelen volt a téma telepítése",
"settings.header.visual.plugin": "Plugin",
"settings.option.visual.plugin.github.download": "Telepítés GitHub URL-ről",
"settings.option.visual.plugin.github.explore": "Pluginok felfedezése",
"settings.header.visual.plugin.github.page": "Pluginok a GitHub-ról",
"settings.option.visual.plugin.github.install.confirm": "Biztosan szeretnéd telepíteni a(z) {{ repo }} plugint?",
"settings.prompt.visual.plugin.github.URL": "Add meg a telepítendő plugin URL-jét",
"settings.prompt.visual.plugin.github.success": "Plugin sikeresen telepítve, kattints az OK-ra a Cider újraindításához",
"settings.notyf.visual.plugin.install.success": "Plugin sikeresen telepítve",
"settings.notyf.visual.plugin.install.error": "Sikertelen volt a plugin telepítése",
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Sötét",
"settings.option.visual.showPersonalInfo": "Személyes adatok mutatása",
"settings.option.visual.showPersonalInfo": "Személyes adatok megjelenítése",
"settings.header.window": "Ablak",
"settings.header.window.description": "A Cider ablakbeállításainak módosítása.",
"settings.option.window.openOnStartup": "Cider megnyitása bejelentkezésnél",
"settings.option.window.openOnStartup.hidden": "Megnyitás kis méretben",
"settings.header.lyrics": "Dalszöveg",
"settings.header.lyrics.description": "A Cider dalszöveg beállításainak módosítása.",
"settings.option.lyrics.enableMusixmatch": "MusixMatch dalszövegek engedélyezése",
@ -323,31 +365,35 @@
"settings.header.connectivity": "Csatlakozások",
"settings.header.connectivity.description": "A Cider csatlakozás beállításainak módosítása.",
"settings.option.connectivity.discordRPC": "Discord Rich Presence",
"settings.option.connectivity.playbackNotifications": "Lejátszás értesítések",
"settings.option.connectivity.playbackNotifications": "Lejátszási értesítések",
"settings.header.connectivity.discordRPC.cider": "Megjelenítés 'Cider'-ként",
"settings.header.connectivity.discordRPC.appleMusic": "Megjelenítés 'Apple Music'-ként",
"settings.option.connectivity.discordRPC.clearOnPause": "Discord Rich Presence törlése megállításnál",
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling",
"settings.option.connectivity.lastfmScrobble.delay": "LastFM Scrobble Késleltetés (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "LastFM Now Playing engedélyezése",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Remove featuring artists from song title (LastFM)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Loopolt zeneszám szűrése (LastFM)",
"settings.header.debug": "Hibakeresés",
"settings.option.connectivity.discordRPC.clearOnPause": "Rich Presence törlése megállításnál",
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling",
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble késleltetés (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Last.fm Now Playing engedélyezése",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Közreműködő zenészek eltávolítása a címből (Last.fm)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Ismételt zeneszám szűrése (Last.fm)",
"settings.header.debug": "Hibaelhárítás",
"settings.option.debug.copy_log": "Napló másolása a vágólapra",
"settings.option.debug.openAppData": "Cider mappa megnyitása",
"settings.header.experimental": "Kísérleti",
"settings.header.experimental.description": "A Cider kísérleti beállításainak módosítása.",
"settings.option.experimental.unknownPlugin": "Unknown Sources",
"settings.option.experimental.unknownPlugin.description": "Allow installion of plugins from repos other than the Cider Plugin Repository",
"settings.option.experimental.unknownPlugin": "Ismeretlen források",
"settings.option.experimental.unknownPlugin.description": "Engedélyezi azon pluginok telepítését is, amik nem tartoznak a Cider Plugin Gyűjteménybe, ezáltal lehetséges biztonsági kockázatot jelentenek",
"settings.option.experimental.compactUI": "Kompakt felület",
"settings.option.experimental.close_button_hide": "A bezárás gomb rejtse el az alkalmazást",
"settings.option.experimental.inline_playlists": "Inline Playlists and Albums",
"spatial.notTurnedOn": "A térbeli hangzás ki van kapcsolva, használatához kapcsolja be.",
"spatial.spatialProperties": "Térbeli hang",
"settings.option.window.close_button_hide": "A bezárás gomb rejtse el az alkalmazást",
"settings.option.experimental.inline_playlists": "Ablakon belüli lejátszási listák és albumok",
"settings.option.advanced.playlistTrackMapping": "Lejátszási lista feltérképezés",
"settings.option.advanced.playlistTrackMapping.description": "Engedélyezi a lejátszási listák mély feltérképezését, ami meg tudja határozni, hogy egy zeneszám mely lejátszási listákba található. A lejátszási lista gyorsítótár felépítésének időtartalma nagy mértékben megnőhet.",
"settings.option.visual.transparent": "Átlátszó keret",
"settings.option.visual.transparent.description": "Átlátszó ablakkeret (a Témák támogatása és újraindítás szükséges)",
"spatial.notTurnedOn": "A Térbeli Hang ki van kapcsolva, használatához kapcsolja be.",
"spatial.spatialProperties": "Térbeli Hang",
"spatial.width": "Szélesség",
"spatial.height": "Magasság",
"spatial.depth": "Hosszúság",
"spatial.gain": "Gain",
"spatial.gain": "Növelés",
"spatial.roomMaterials": "Szoba felépítése",
"spatial.roomDimensions": "Szoba méretei",
"spatial.roomPositions": "Szoba pozíciói",
@ -362,7 +408,17 @@
"spatial.listener": "Hallgató",
"spatial.audioSource": "Hangforrás",
"settings.header.unfinished": "Befejezetlen",
"remote.web.title": "Cider Remote",
"remote.web.description": "Olvasd be ezt a QR-kódot a telefonoddal, hogy tudd vezérelni a lejátszót.",
"remote.web.title": "Távirányító",
"remote.web.description": "Olvasd be ezt a QR-kódot a telefonoddal, hogy vezérelni tudd a lejátszót.",
"share.platform.twitter.tweet": "Hallgasd meg a(z) {{song}} zenét az Apple Musicon.\n\n{{url}}\n\n#AppleMusic #Cider",
"share.platform.twitter": "Twitter",
"share.platform.facebook": "Facebook",
"share.platform.reddit": "Reddit",
"share.platform.telegram": "Telegram",
"share.platform.whatsapp": "WhatsApp",
"share.platform.messenger": "Messenger",
"share.platform.email": "Email",
"share.platform.songLink": "song.link URL másolása",
"share.platform.clipboard": "Link másolása",
"about.thanks": "Köszönet a Cider Collective csapatának és minden hozzájárulónak."
}

View file

@ -23,6 +23,8 @@
"term.about": "Tentang",
"term.privateSession": "Sesi Pribadi",
"term.queue": "Antrian",
"term.lyrics": "Lirik",
"term.miniplayer": "Pemutar Kecil",
"term.history": "Riwayat",
"term.search": "Cari",
"term.library": "Pustaka",
@ -61,6 +63,7 @@
"term.sortBy.genre": "Genre",
"term.sortBy.releaseDate": "Tanggal Rilis",
"term.sortBy.duration": "Durasi",
"term.sortBy.dateAdded": "Tanggal Ditambahkan",
"term.sortOrder": "A-Z",
"term.sortOrder.ascending": "Terkecil",
"term.sortOrder.descending": "Terbesar",
@ -84,19 +87,34 @@
"term.showMore": "Tampilkan lebih banyak",
"term.showLess": "Tampilkan lebih sedikit",
"term.topSongs": "Lagu Teratas",
"term.latestReleases": "Rilis Terbaru",
"term.latestReleases": "Rilisan Terbaru",
"term.time.added": "Ditambahkan",
"term.time.released": "Dirilis",
"term.time.updated": "Diperbarui",
"term.time.days": "hari",
"term.time.day": {
"one": "hari",
"other": "hari"
},
"term.time.hours": "jam",
"term.time.hour": "jam",
"term.time.hour": {
"one": "jam",
"other": "jam"
},
"term.time.minutes": "menit",
"term.time.minute": "menit",
"term.time.minute": {
"one": "menit",
"other": "menit"
},
"term.time.seconds": "detik",
"term.time.second": "detik",
"term.time.second": {
"one": "detik",
"other": "detik"
},
"term.fullscreenView": "Mode Layar Penuh",
"term.defaultView": "Mode Default",
"term.audioSettings": "Pengaturan Audio",
"term.audioControls": "Kontrol Volume",
"term.clearAll": "Bersihkan Semua",
"term.recentStations": "Stasiun Terbaru",
"term.language": "Bahasa",
@ -113,6 +131,10 @@
"term.equalizer": "Equalizer",
"term.reset": "Atur Ulang",
"term.tracks": "lagu",
"term.track": {
"one" : "lagu",
"other" : "lagu"
},
"term.videos": "Video",
"term.menu": "Menu",
"term.check": "Cek",
@ -124,6 +146,10 @@
"term.addedpreset": "Preset Ditambahkan",
"term.deletepreset.warn": "Yakin ingin menghapus preset ini?",
"term.deletedpreset": "Preset dihapus",
"term.defaultPresets": "Preset Default",
"term.userPresets": "Presets Pengguna",
"term.requestError": "Ada masalah dengan permintaan.",
"term.song.link.generate": "Mendapatkan link bagi song.link...",
"term.musicVideos": "Video Musik",
"term.stations": "Stasiun",
"term.curators": "Kurator",
@ -132,6 +158,23 @@
"term.recordLabels": "Label Rekaman",
"term.videoExtras": "Bonus Video",
"term.top": "Atas",
"term.version": "Versi",
"term.noVideos": "Video tidak ditemukan.",
"term.plugin": "Plug-in",
"term.pluginMenu": "Menu Plug-in",
"term.pluginMenu.none": "Tidak ada plugin interaktif",
"term.replay": "Ulangi",
"term.uniqueAlbums": "Album Spesial",
"term.uniqueArtists": "Artis Spesial",
"term.uniqueSongs": "Lagu Spesial",
"term.topArtists": "Artis Teratas",
"term.listenedTo": "Mendengarkan:",
"term.times": "kali",
"term.topAlbums": "Album Teratas",
"term.plays": "Dimainkan",
"term.topGenres": "Genre Teratas",
"term.confirmLogout": "Apakah Anda yakin ingin keluar??",
"term.creditDesignedBy": "Dirancang oleh ${authorUsername}",
"home.title": "Beranda",
"home.recentlyPlayed": "Baru Dimainkan",
"home.recentlyAdded": "Baru Ditambahkan",
@ -178,7 +221,9 @@
"action.startRadio": "Mulai Radio",
"action.goToArtist": "Lihat Halaman Artis",
"action.goToAlbum": "Lihat Halaman Album",
"action.moveToTop": "Pindah ke Atas",
"action.showInPlaylist": "Tampilkan di Playlist",
"action.showInAppleMusic": "Tampilkan di Apple Music",
"action.moveToTop": "Keluar dari Folder",
"action.share": "Bagikan",
"action.rename": "Ubah Nama",
"action.love": "Suka",
@ -196,12 +241,21 @@
"action.tray.quit": "Keluar",
"action.tray.show": "Tampilkan",
"action.update": "Perbarui",
"action.install": "Pasang",
"action.copy": "Salin",
"action.newpreset": "Preset Baru...",
"action.deletepreset": "Hapus Preset",
"action.open": "Buka",
"action.relaunch.confirm": "Apakah Anda ingin memulai ulang Cider?",
"settings.header.general": "Umum",
"settings.header.general.description": "Sesuaikan pengaturan umum untuk Cider.",
"settings.option.general.language": "Bahasa",
"settings.option.general.resumebehavior": "Aturan Resume",
"settings.option.general.resumebehavior.description": "Aturan resume akan mempengaruhi bagaimana Cider akan melanjutkan sesi Anda ketika memulai Cider.",
"settings.option.general.resumebehavior.locally": "Lokal",
"settings.option.general.resumebehavior.locally.description": "Cider akan melanjutkan sesi terakhir Anda di perangkat ini.",
"settings.option.general.resumebehavior.history": "Riwayat",
"settings.option.general.resumebehavior.history.description": "Cider akan menambahkan lagu terakhir dari keseluruhan riwayat Apple Music Anda ke dalam antrian di seluruh perangkat.",
"settings.option.general.language.main": "Bahasa",
"settings.option.general.language.fun": "Bahasa Candaan",
"settings.option.general.language.unsorted": "Tidak disortir",
@ -210,8 +264,14 @@
"settings.option.general.updateCider.branch.description": "Pilih branch untuk memperbarui Cider",
"settings.option.general.updateCider.branch.main": "Stable",
"settings.option.general.updateCider.branch.develop": "Development",
"settings.notyf.updateCider.update-not-available": "Tidak ada pembaruan tersedia",
"settings.notyf.updateCider.update-downloaded": "Pembaruan sudah didownload, mulai ulang untuk menginstall pembaruan",
"settings.notyf.updateCider.update-error": "Terjadi kesalahan saat memperbarui Cider",
"settings.notyf.updateCider.update-timeout": "Waktu pembaruan habis",
"settings.header.audio": "Audio",
"settings.header.audio.description": "Sesuaikan pengaturan audio untuk Cider.",
"settings.option.audio.volumeStep": "Jangkah Volume",
"settings.option.audio.maxVolume": "Volume Maksimal",
"settings.option.audio.quality": "Kualitas Audio",
"settings.header.audio.quality.hireslossless": "Hi-Res Lossless",
"settings.header.audio.quality.hireslossless.description": "sampai dari 24-bit/192 kHz",
@ -224,16 +284,34 @@
"settings.option.audio.seamlessTransition": "Transisi Audio Mulus",
"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.audioLab": "Lab Audio Cider",
"settings.option.audio.audioLab.description": "Macam-macam efek audio yang dikembangkan sendiri untuk Cider.",
"settings.warn.audioLab.withoutAF": "AudioContext (Fungsi Lanjutan) perlu diaktifkan untuk menggunakan Lab Audio Cider.",
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Analog Warmth",
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Mensimulasikan kehangatan analog yang dimodelkan setelah Korg Nutube 6P1",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Analog Warmth intensity",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Mengubah intensitas pemrosesan modul Analog Warmth.",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Halus",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Hangat",
"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.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP tidak cocok dengan Spatialisasi. Matikan Spasialisasi untuk menggunakan.",
"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",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresif",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalisasi Audio",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Menormalkan puncak volume untuk masing-masing lagu demi menciptakan pengalaman mendengarkan yang lebih seragam.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Diatar oleh Lab Audio",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Spasialisasi Audio",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Atur ruang audio dan buat audio lebih 3 dimensi (NB: Bukan Dolby Atmos)",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Spasialisasi oleh Cider",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Efek Spasialisasi yang sudah diatur. Untuk menggunakannya, matikan pengaturan custom Spasialisasi Audio dan pastikan Spasialisasi Audio sudah aktif.",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Profil Spasialisasi Cider",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Mengubah Profil Tuning Spasialisasi. (Memerlukan Restart Aplikasi)",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standar",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile",
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Spatialization tidak cocok dengan CAP. Matikan CAP untuk menggunakan.",
"settings.header.visual": "Visual",
"settings.header.visual.description": "Sesuaikan pengaturan visual untuk Cider.",
"settings.option.visual.windowBackgroundStyle": "Gaya Latar Belakang Jendela",
@ -256,10 +334,30 @@
"settings.header.visual.hardwareAcceleration.default": "Default",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Tema",
"settings.option.visual.theme.github.download": "Pasang dari URL GitHub",
"settings.option.visual.theme.github.explore": "Jelajahi Tema di GitHub",
"settings.header.visual.theme.github.page": "Tema dari GitHub",
"settings.option.visual.theme.github.install.confirm": "Apakah anda yakin untuk memasang {{ repo }}?",
"settings.prompt.visual.theme.github.URL": "Masukan URL tema yang ingin Anda pasang",
"settings.notyf.visual.theme.install.success": "Tema berhasil dipasang",
"settings.notyf.visual.theme.install.error": "Pemasangan tema gagal",
"settings.header.visual.plugin": "Plugin",
"settings.option.visual.plugin.github.download": "Pasang dari URL GitHub",
"settings.option.visual.plugin.github.explore": "Jelajahi Plugin di GitHub",
"settings.header.visual.plugin.github.page": "Plugins from GitHub",
"settings.option.visual.plugin.github.install.confirm": "Apakah anda yakin untuk memasang {{ repo }}?",
"settings.prompt.visual.plugin.github.URL": "Masukan URL plugin yang ingin Anda pasang",
"settings.prompt.visual.plugin.github.success": "Plugin berhasil dipasang, Tekan OK untuk memulai ulang Cider",
"settings.notyf.visual.plugin.install.success": "Plugin berhasil dipasang",
"settings.notyf.visual.plugin.install.error": "Plugin gagal dipasang",
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Gelap",
"settings.option.visual.showPersonalInfo": "Tampilkan Info Pribadi",
"settings.header.lyrics": "Lyrics",
"settings.header.window": "Jendela",
"settings.header.window.description": "Atur pengaturan jendela pada Cider.",
"settings.option.window.openOnStartup": "Buka Cider Ketika Perangkat Dinyalakan",
"settings.option.window.openOnStartup.hidden": "Buka dalam mode tersembunyi",
"settings.header.lyrics": "Lirik",
"settings.header.lyrics.description": "Sesuaikan pengaturan lirik untuk Cider.",
"settings.option.lyrics.enableMusixmatch": "Aktifkan Lirik Musixmatch",
"settings.option.lyrics.enableMusixmatchKaraoke": "Aktifkan Mode Karaoke (khusus Musixmatch)",
@ -271,18 +369,26 @@
"settings.option.connectivity.playbackNotifications": "Pemberitahuan Pemutaran",
"settings.header.connectivity.discordRPC.cider": "Tampilkan sebagai 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "Tampilkan sebagai 'Apple Music'",
"settings.option.connectivity.discordRPC.clearOnPause": "Sembunyikan Discord Rich Presence saat dijeda",
"settings.option.connectivity.discordRPC.clearOnPause": "Sembunyikan Discord Rich Presence Saat Dijeda",
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling",
"settings.option.connectivity.lastfmScrobble.delay": "Delay Last.fm Scrobble (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Aktifkan Last.fm Now Playing",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Hapus featuring artist dari judul lagu (Last.fm)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filter lagu yang diulang (Last.fm)",
"settings.header.debug": "Debug",
"settings.option.debug.copy_log": "Salin logs ke clipboard",
"settings.option.debug.openAppData": "Buka Folder Cider",
"settings.header.experimental": "Eksperimental",
"settings.header.experimental.description": "Sesuaikan pengaturan eksperimental untuk Cider.",
"settings.option.experimental.unknownPlugin": "Sumber Tidak Diketahui",
"settings.option.experimental.unknownPlugin.description": "Izinkan pemasangan plugin dari repo selain Cider Plugin Repository",
"settings.option.experimental.compactUI": "UI Kompak",
"settings.option.experimental.close_button_hide": "Tombol Tutup Menyembunyikan Aplikasi",
"settings.option.experimental.copy_log": "Salin log ke clipboard",
"settings.option.window.close_button_hide": "Tombol Tutup Menyembunyikan Aplikasi",
"settings.option.experimental.inline_playlists": "Playlist dan Album Sebaris",
"settings.option.advanced.playlistTrackMapping": "Pemetaan Lagu Playlist",
"settings.option.advanced.playlistTrackMapping.description": "Mengaktifkan pemindaian daftar putar yang mendalam untuk menentukan trek mana yang ada di daftar putar. Waktu pembuatan cache daftar putar dapat meningkat secara signifikan.",
"settings.option.visual.transparent": "Frame transparan",
"settings.option.visual.transparent.description": "Frame transparan (membutuhkan tema yang mendukung, membutuhkan dibuka ulang)",
"spatial.notTurnedOn": "Spasialisasi Audio dinonaktifkan. Untuk menggunakan, aktifkan terlebih dahulu.",
"spatial.spatialProperties": "Spatial Properties",
"spatial.width": "Lebar",

View file

@ -203,7 +203,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": "圧縮音源を高解像度に処理することによって、ロスレス相当の音質に向上させます。",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAPの強さ",
"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": "標準",
@ -255,7 +255,7 @@
"settings.header.experimental": "試験的な機能",
"settings.header.experimental.description": "開発中の実験的な機能は不完全で不安定である可能性があります",
"settings.option.experimental.compactUI": "コンパクトインターフェース",
"settings.option.experimental.close_button_hide": "「閉じる」ボタンでアプリを隠します",
"settings.option.window.close_button_hide": "「閉じる」ボタンでアプリを隠します",
"settings.option.experimental.copy_log": "ログをコピーする",
"settings.option.experimental.inline_playlists": "プレイリストをインラインで表示",
"spatial.spatialProperties": "空間化のプロパティ",

View file

@ -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.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP는 공간화와 호환되지 않습니다. 계속하려면 공간화를 비활성화하십시오.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP 강도",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "오디오 처리 강도를 변경합니다. (적극적으로 설정 시 바람직하지 않은 결과를 초래할 수 있습니다.)",

View file

@ -86,7 +86,6 @@
"term.clearAll": "Limpar Tudo",
"term.language": "Idioma",
"term.recentStations": "Estações Recentes",
"term.language": "Idioma",
"term.funLanguages": "Fun",
"term.noLyrics": "Carregando... / Letras não achadas./ Instrumental.",
"term.copyright": "Copyright",
@ -220,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.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.)",
@ -283,7 +282,7 @@
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Ajustar as definições experimental no Cider.",
"settings.option.experimental.compactUI": "UI Compacto",
"settings.option.experimental.close_button_hide": "Fechar apenas esconde o Cider",
"settings.option.window.close_button_hide": "Fechar apenas esconde o Cider",
"spatial.spatialProperties": "Propriedades do Espacial",
"spatial.width": "Largura",
"spatial.height": "Altura",

View file

@ -243,7 +243,7 @@
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Ajustează setările experimentale pentru Cider.",
"settings.option.experimental.compactUI": "UI Compact",
"settings.option.experimental.close_button_hide": "Butonul de închidere ar trebui să ascundă aplicația",
"settings.option.window.close_button_hide": "Butonul de închidere ar trebui să ascundă aplicația",
"spatial.notTurnedOn": "Spațializarea Audio este dezactivată. Pentru a folosi opțiunea aceasta, activați-o mai întâi.",
"spatial.spatialProperties": "Proprietăți Spațiale",
"spatial.width": "Lățime",

View file

@ -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.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP не совместим с пространственным звучанием. Пожалуйста, отключите пространственное звучание, чтобы продолжить.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Режим CAP",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Изменяет режим обработки звука. (Режим агрессии может привести к нежелаемым результатам)",
@ -315,7 +315,7 @@
"settings.header.experimental": "Экспериментальные",
"settings.header.experimental.description": "Настройка экспериментальных функций Cider.",
"settings.option.experimental.compactUI": "Компактный интерфейс",
"settings.option.experimental.close_button_hide": "Кнопка «Закрыть» скрывает приложение",
"settings.option.window.close_button_hide": "Кнопка «Закрыть» скрывает приложение",
"settings.option.experimental.inline_playlists": "Встроенные плейлисты и альбомы",
"spatial.notTurnedOn": "Пространственное аудио отключено. Чтобы использовать, сначала включите его.",
"spatial.spatialProperties": "Настройка пространственного аудио",

View file

@ -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.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á",

View file

@ -23,6 +23,8 @@
"term.about": "About",
"term.privateSession": "Private Session",
"term.queue": "Queue",
"term.lyrics": "Lyrics",
"term.miniplayer": "MiniPlayer",
"term.history": "History",
"term.search": "Search",
"term.library": "Library",
@ -90,13 +92,25 @@
"term.time.released": "Released",
"term.time.updated": "Updated",
"term.time.days": "days",
"term.time.day": "day",
"term.time.day": {
"one": "day",
"other": "days"
},
"term.time.hours": "hours",
"term.time.hour": "hour",
"term.time.hour": {
"one": "hour",
"other": "hours"
},
"term.time.minutes": "minutes",
"term.time.minute": "minute",
"term.time.minute": {
"one": "minute",
"other": "minutes"
},
"term.time.seconds": "seconds",
"term.time.second": "second",
"term.time.second": {
"one": "second",
"other": "seconds"
},
"term.fullscreenView": "Fullscreen View",
"term.defaultView": "Default View",
"term.audioSettings": "Audio Settings",
@ -118,8 +132,8 @@
"term.reset": "Reset",
"term.tracks": "tracks",
"term.track": {
"one" : "track",
"other" : "tracks"
"one": "track",
"other": "tracks"
},
"term.videos": "Videos",
"term.menu": "Menu",
@ -160,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",
@ -269,6 +284,7 @@
"settings.option.audio.seamlessTransition": "Seamless Audio Transition",
"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.warn.audio.enableAdvancedFunctionality.lowcores": "Cider thinks your PC cant handle these features. Are you sure you want to continue?",
"settings.option.audio.audioLab": "Cider Audio Lab",
"settings.option.audio.audioLab.description": "An assortment of in-house developed audio effects for Cider.",
"settings.warn.audioLab.withoutAF": "AudioContext (Advanced Functionality) is required to enable Cider Audio Laboratory.",
@ -279,14 +295,15 @@
"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": "Enhances the perceived audio quality of 256 kbps AAC audio by using a real-time algorithm that takes advantage of both psychoacoustic models of human hearing and AAC encoding characteristics.",
"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)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard",
"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.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience. (Does not work on user uploaded tracks)",
"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",
@ -337,6 +354,10 @@
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Dark",
"settings.option.visual.showPersonalInfo": "Show Personal Info",
"settings.header.window": "Window",
"settings.header.window.description": "Adjust the window settings for Cider.",
"settings.option.window.openOnStartup": "Open Cider on Startup",
"settings.option.window.openOnStartup.hidden": "Open Hidden",
"settings.header.lyrics": "Lyrics",
"settings.header.lyrics.description": "Adjust the lyrics settings for Cider.",
"settings.option.lyrics.enableMusixmatch": "Enable Musixmatch Lyrics",
@ -360,15 +381,18 @@
"settings.option.debug.openAppData": "Open Cider Folder",
"settings.header.experimental": "Experimental",
"settings.header.experimental.description": "Adjust the experimental settings for Cider.",
"settings.option.experimental.reinstallwidevine": "Reinstall WidevineCDM",
"settings.option.experimental.reinstallwidevine.confirm": "Are you sure you want to reinstall Widevine?",
"settings.option.experimental.unknownPlugin": "Unknown Sources",
"settings.option.experimental.unknownPlugin.description": "Allow installation of plugins from repos other than the Cider Plugin Repository",
"settings.option.experimental.compactUI": "Compact UI",
"settings.option.experimental.close_button_hide": "Close Button Should Hide the Application",
"settings.option.window.close_button_hide": "Close Button Should Hide the Application",
"settings.option.experimental.inline_playlists": "Inline Playlists and Albums",
"settings.option.advanced.playlistTrackMapping": "Playlist Track Mapping",
"settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists. Playlist cache build times can increase significantly.",
"settings.option.visual.transparent": "Transparent frame",
"settings.option.visual.transparent.description": "Transparent frame (needs Theme Support , requires relaunch)",
"settings.header.advanced": "Advanced",
"spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.",
"spatial.spatialProperties": "Spatial Properties",
"spatial.width": "Width",
@ -391,5 +415,15 @@
"settings.header.unfinished": "Unfinished",
"remote.web.title": "Cider Remote",
"remote.web.description": "Scan the QR code to pair your phone up with this Cider instance",
"share.platform.twitter.tweet": "Listen to {{song}} on Apple Music.\n\n{{url}}\n\n#AppleMusic #Cider",
"share.platform.twitter": "Twitter",
"share.platform.facebook": "Facebook",
"share.platform.reddit": "Reddit",
"share.platform.telegram": "Telegram",
"share.platform.whatsapp": "WhatsApp",
"share.platform.messenger": "Messenger",
"share.platform.email": "Email",
"share.platform.songLink": "Copy with song.link",
"share.platform.clipboard": "Copy Link",
"about.thanks": "Major thanks to the Cider Collective Team and all of our contributors."
}

View file

@ -242,7 +242,7 @@
"settings.header.experimental": "Experimentellt",
"settings.header.experimental.description": "Ändra Ciders experimentella inställningar.",
"settings.option.experimental.compactUI": "Kompakt gränssnitt",
"settings.option.experimental.close_button_hide": "Stängknappen gömmer Cider istället",
"settings.option.window.close_button_hide": "Stängknappen gömmer Cider istället",
"spatial.notTurnedOn": "Spiralljud är av. Akrtivera det först.",
"spatial.spatialProperties": "Spiralljudsintällningar",
"spatial.width": "Bredd",

View file

@ -23,6 +23,9 @@
"term.about": "Hakkında",
"term.privateSession": "Özel Oturum",
"term.queue": "Çalma Sırası",
"term.lyrics": "Şarkı Sözleri",
"term.miniplayer": "MiniÇalar",
"term.history": "Geçmiş",
"term.search": "Arama",
"term.library": "Arşiv",
"term.listenNow": "Şimdi Dinle",
@ -35,10 +38,10 @@
"term.podcasts": "Podcastler",
"term.playlists": "Listeler",
"term.playlist": "Liste",
"term.createNewPlaylist": "Yeni Liste Oluştur",
"term.createNewPlaylistFolder": "Yeni Klasör Oluştur",
"term.newPlaylist": "Yeni Liste",
"term.newPlaylistFolder": "Yeni Klasör",
"term.createNewPlaylist": "Yeni Liste Oluştur",
"term.createNewPlaylistFolder": "Yeni Klasör Oluştur",
"term.deletePlaylist": "Bu listeyi silmek istediğinize emin misiniz?",
"term.play": "Oynat",
"term.pause": "Duraklat",
@ -50,6 +53,7 @@
"term.mute": "Sustur",
"term.unmute": "Sesi Aç",
"term.share": "Paylaş",
"term.share.success": "Panoya Kopyalandı",
"term.settings": "Ayarlar",
"term.seeAll": "Tümünü Gör",
"term.sortBy": "Sırala",
@ -59,8 +63,9 @@
"term.sortBy.genre": "Tür",
"term.sortBy.releaseDate": "Yayınlanma Tarihi",
"term.sortBy.duration": "Süre",
"term.sortBy.dateAdded": "Eklenme Tarihi",
"term.sortOrder": "A-Z",
"term.sortOrder.ascending": "Çoğalan",
"term.sortOrder.ascending": "Artan",
"term.sortOrder.descending": "Azalan",
"term.viewAs": "Şöyle Göster",
"term.viewAs.coverArt": "Albüm Kapağı",
@ -86,6 +91,26 @@
"term.time.added": "Şu tarihte eklendi: ",
"term.time.released": "Şu tarihte yayınalndı: ",
"term.time.updated": "Şu tarihte güncellendi: ",
"term.time.days": "gün",
"term.time.day": {
"one": "gün",
"other": "gün"
},
"term.time.hours": "saat",
"term.time.hour": {
"one": "saat",
"other": "saat"
},
"term.time.minutes": "dakika",
"term.time.minute": {
"one": "dakika",
"other": "dakika"
},
"term.time.seconds": "saniye",
"term.time.second": {
"one": "saniye",
"other": "saniye"
},
"term.fullscreenView": "Tam Ekrana Geç",
"term.defaultView": "Normal Görünüme Dön",
"term.spacializedAudioSetting": "Uzamsal Ses Ayarları",
@ -105,19 +130,15 @@
"term.contributors": "Katkıda Bulunanlar",
"term.equalizer": "Ekolayzer",
"term.reset": "Sıfırla",
"term.tracks": "adet şarkı",
"term.time.hours": "saat",
"term.time.hour": "saat",
"term.time.minutes": "dakika",
"term.time.minute": "dakika",
"term.time.seconds": "saniye",
"term.time.second": "saniye",
"term.tracks": "şarkı",
"term.track": {
"one": "şarkı",
"other": "şarkı"
},
"term.videos": "Video Klipler",
"term.menu": "Menü",
"term.check": "Şimdi Kontrol Et",
"term.aboutArtist": "About {{artistName}}",
"term.updateCider": "Güncellemeleri Denetle",
"term.share.success": "Panoya Kopyalandı",
"term.topResult": "En İyi Sonuç",
"term.sharedPlaylists": "Paylaşılan Listeler",
"term.people": "Kişiler",
@ -125,6 +146,10 @@
"term.addedpreset": "Önayar Kaydedildi",
"term.deletepreset.warn": "Bu önayarı silmek istediğinize emin misiniz?",
"term.deletedpreset": "Önayar Silindi",
"term.defaultPresets": "Gömülü Önayarlar",
"term.userPresets": "Kullanıcı Önayarları",
"term.requestError": "Bir sorun oldu.",
"term.song.link.generate": "song.link paylaşım linki alınıyor...",
"term.musicVideos": "Video Klipler",
"term.stations": "İstasyonlar",
"term.curators": "Editörler",
@ -133,6 +158,23 @@
"term.recordLabels": "Kayıt Stüdyoları",
"term.videoExtras": "Ekstra Videolar",
"term.top": "En İyi",
"term.version": "Versiyon",
"term.noVideos": "Kayıtlı video bulunamadı.",
"term.plugin": "Eklenti",
"term.pluginMenu": "Eklenti Menüsü",
"term.pluginMenu.none": "Eklenti ayarları mevcut değil",
"term.replay": "Yeniden Oynat",
"term.uniqueAlbums": "Özgün Albümler",
"term.uniqueArtists": "Özgün Sanatçılar",
"term.uniqueSongs": "Özgün Şarkılar",
"term.topArtists": "Popüler Sanatçılar",
"term.listenedTo": "Dinlenen:",
"term.times": "defa",
"term.topAlbums": "Popüler Albümler",
"term.plays": "Çalma",
"term.topGenres": "Popüler Türler",
"term.confirmLogout": ıkış yapmak istediğine emin misin?",
"term.creditDesignedBy": "${authorUsername} tarafından tasarlandı",
"home.title": "Ana Sayfa",
"home.recentlyPlayed": "Son Oynatılanlar",
"home.recentlyAdded": "Son Eklenenler",
@ -158,18 +200,16 @@
"action.addToLibrary.error": "Arşiv'e Eklenemedi",
"action.removeFromLibrary": "Arşiv'den Sil",
"action.removeFromLibrary.success": "Arşiv'den Silindi",
"action.createPlaylist": "Yeni Liste Oluştur",
"action.addToPlaylist": "Liste'ye Ekle",
"action.removeFromPlaylist": "Liste'den Sil",
"action.addToFavorites": "Favorilere Ekle",
"action.moveToTop": "En Başa Taşı",
"action.rename": "Yeniden Adlandır",
"action.addToQueue": "Sıraya Ekle",
"action.addToQueue.success": "Sıraya Eklendi",
"action.addToQueue.error": "Sıraya Eklenemedi",
"action.removeFromQueue": "Sıradan Kaldır",
"action.removeFromQueue.success": "Sıradan Kaldırıldı",
"action.removeFromQueue.error": "Sıradan Kaldırılamadı",
"action.createPlaylist": "Yeni Liste Oluştur",
"action.addToPlaylist": "Liste'ye Ekle",
"action.removeFromPlaylist": "Liste'den Sil",
"action.addToFavorites": "Favorilere Ekle",
"action.follow": "Takip Et",
"action.follow.success": "Takip Ediliyor",
"action.follow.error": "Takip Edilemedi",
@ -181,7 +221,11 @@
"action.startRadio": "İstasyon Yarat",
"action.goToArtist": "Sanatçıya Git",
"action.goToAlbum": "Albüme Git",
"action.showInPlaylist": "Listede göster",
"action.showInAppleMusic": "Apple Müzik'te göster",
"action.moveToTop": "Klasörden Çık",
"action.share": "Paylaş",
"action.rename": "Yeniden Adlandır",
"action.love": "Beğen",
"action.unlove": "Beğeniyi Kaldır",
"action.dislike": "Bunun Gibileri Daha Az Öner",
@ -190,19 +234,28 @@
"action.playTracksNext": "${app.selectedMediaItems.length} adet şarkıyı sıraya ekle",
"action.playTracksLater": "${app.selectedMediaItems.length} adet şarkıyı sıranın en sonuna ekle",
"action.removeTracks": "Sıradan ${self.selectedItems.length} adet şarkıyı kaldır",
"action.import": "Import",
"action.export": "Export",
"action.import": "İçeri Aktar",
"action.export": "Dışarı Aktar",
"action.showAlbum": "Tüm Albümü Göster",
"action.tray.minimize": "Görev Çubuğuna Küçült",
"action.tray.quit": ık",
"action.tray.show": "Göster",
"action.update": "Güncelle",
"action.install": "Yükle",
"action.copy": "Kopyala",
"action.newpreset": "Yeni Önayar...",
"action.deletepreset": "Önayarı Sil",
"action.open": "Aç",
"action.relaunch.confirm": "Cider'i yeniden başlatmak istediğinize emin misiniz?",
"settings.header.general": "Genel Ayarlar",
"settings.header.general.description": "Genel ayarları buradan düzenleyin.",
"settings.option.general.language": "Dil Seçeneği",
"settings.option.general.resumebehavior": "Kalınan yerden devam etme",
"settings.option.general.resumebehavior.description": "Devam etme davranışı, uygulamaya döndüğünüzde Cider'ın oturumunuzu nasıl sürdüreceğini etkiler.",
"settings.option.general.resumebehavior.locally": "Yerel",
"settings.option.general.resumebehavior.locally.description": "Cider, bu makinedeki son oturumunuza devam edecek.",
"settings.option.general.resumebehavior.history": "Apple Müzik Geçmişi",
"settings.option.general.resumebehavior.history.description": "Cider, cihazlar arasında genel Apple Music geçmişinizdeki son şarkıyı sıraya alır.",
"settings.option.general.language.main": "Gerçek Diller",
"settings.option.general.language.fun": "Mizahi Diller",
"settings.option.general.language.unsorted": "Henüz Tamamlanmamış Diller",
@ -211,8 +264,14 @@
"settings.option.general.updateCider.branch.description": "Cider'in hangi versiyonuna güncelleneceğini seçin",
"settings.option.general.updateCider.branch.main": "Stabil",
"settings.option.general.updateCider.branch.develop": "Deneysel",
"settings.notyf.updateCider.update-not-available": "Güncelleme bulunamadı",
"settings.notyf.updateCider.update-downloaded": "Güncelleme indirildi, yüklemek için lütfen uygulamayı yeniden başlatın",
"settings.notyf.updateCider.update-error": "Güncelleme alınırken hata meydana geldi",
"settings.notyf.updateCider.update-timeout": "Bağlantı zaman aşımına uğradı",
"settings.header.audio": "Çalma / Oynatma",
"settings.header.audio.description": "Cider'in sizin için en iyi dinleme deneyimini sağlayabilmesi için ses ayarlarınızı yapın.",
"settings.option.audio.volumeStep": "Ses Değişim Derecesi",
"settings.option.audio.maxVolume": "Maks. Ses Yüksekliği",
"settings.option.audio.quality": "Ses Kalitesi",
"settings.header.audio.quality.hireslossless": "Yüksek Çözünürlüklü Kayıpsız",
"settings.header.audio.quality.hireslossless.description": "24-bit/192 kHz'e kadar",
@ -222,20 +281,38 @@
"settings.header.audio.quality.high.description": "256 kbps",
"settings.header.audio.quality.standard": "Standart",
"settings.header.audio.quality.standard.description": "64 kbps",
"settings.header.audio.quality.auto": "Otomatik",
"settings.option.audio.seamlessTransition": "Kesintisiz Ses Geçişi",
"settings.option.audio.enableAdvancedFunctionality": "Gelişmiş Ses Deneyimi",
"settings.option.audio.enableAdvancedFunctionality.description": "Gelişmiş ses deneyiminin etkinleştirilmesi, Ses Normalleştirme, Ekolayzer ve Görselleştirici gibi genişletilmiş ses özelliklerine izin verir, ancak bu durum bazı sistemlerde seste bozulmalara neden olabilir.",
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cider, PC'nizin bu özellikleri kaldıramayacağını düşünüyor. Devam etmek istediğinize emin misiniz?",
"settings.option.audio.audioLab": "Cider Ses Laboratuvarı",
"settings.option.audio.audioLab.description": "Cider için özel olarak geliştirilmiş çeşitli ses efektleri.",
"settings.warn.audioLab.withoutAF": "Cider Ses Laboratuvarı'nı etkinleştirmek için AudioContext (Gelişmiş İşlevsellik) gereklidir.",
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Analog Simülasyonu",
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Korg Nutube 6P1 donanımının analog sıcaklığını simüle eder",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Analog Sıcaklık yoğunluğu",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Analog Sıcaklık Modülünün çalışma yoğunluğunu değiştirir.",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Yumuşak",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Hararetli",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenalin Prosesörü™",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Müziğin hem daha zengin hem de daha canlı duyulmasını sağlayan Psikoakustik Geliştirme Sistemi | Maikiwi tarafından tasarlanmıştır.",
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP, Uzamsal Ses ile uyumlu değildir. Devam etmek için lütfen Uzamsallaştırmayı devre dışı bırakın.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Kuvveti",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Sese yapılan işlemin gücünü değiştirir. (Agresif istenmeyen sonuçlar doğurabilir)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standart",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresif",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Ses Normalleştirme",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Ses normalleştirme alçak ve yüksek sesli şarkıları dengeler ve daha düzgün bir dinleme deneyimi sağlar.",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Laboratuvar tarafından kontrol ediliyor",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Uzamsal Ses",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Sesi uzamsallaştırın ve sesi daha 3 boyutlu hale getirin (not: Bu Dolby Atmos değildir)",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Özel Ayarlanmış Uzamsallaştırma",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Önceden ayarlanmış Uzamsallaştırma Etkisi, Ses Uzamsallaştırmanın özelleştirilebilir ayarlarını devre dışı bırakır. Uzamsallaştırma bir ön koşul olarak etkinleştirilmelidir.",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Mekan Profili",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Uzamsallaştırmanın Ayarlama Profilini değiştirir. (Uygulamanın Yeniden Başlatılmasını Gerektirir)",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standart",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Odyofil",
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Uzamsallaştırma, CAP ile uyumlu değildir. Devam etmek için lütfen CAP'ı devre dışı bırakın.",
"settings.header.visual": "Görünüm",
"settings.header.visual.description": "Cider'in nasıl gözükmesini istediğinizi ayarlayın",
"settings.option.visual.windowBackgroundStyle": "Uygulama Arka Plan Stili",
@ -258,9 +335,29 @@
"settings.header.visual.hardwareAcceleration.default": "Varsayılan",
"settings.header.visual.hardwareAcceleration.webGPU": "Gelişmiş",
"settings.header.visual.theme": "Tema",
"settings.option.visual.theme.github.download": "GitHub URL'sinden yükleyin",
"settings.option.visual.theme.github.explore": "GitHub'daki Temaları Keşfedin",
"settings.header.visual.theme.github.page": "GitHub'dan Temalar",
"settings.option.visual.theme.github.install.confirm": "{{ repo }} yüklemek istediğinizden emin misiniz?",
"settings.prompt.visual.theme.github.URL": "Yüklemek istediğiniz temanın URL'sini girin",
"settings.notyf.visual.theme.install.success": "Tema başarıyla kuruldu",
"settings.notyf.visual.theme.install.error": "Tema kurulumu başarısız oldu",
"settings.header.visual.plugin": "Eklenti",
"settings.option.visual.plugin.github.download": "GitHub URL'sinden yükleyin",
"settings.option.visual.plugin.github.explore": "GitHub'daki Eklentileri Keşfedin",
"settings.header.visual.plugin.github.page": "GitHub'dan Eklentiler",
"settings.option.visual.plugin.github.install.confirm": "{{ repo }} yüklemek istediğinizden emin misiniz?",
"settings.prompt.visual.plugin.github.URL": "Yüklemek istediğiniz eklentinin URL'sini girin",
"settings.prompt.visual.plugin.github.success": "Eklenti başarıyla yüklendi, Cider'i yeniden başlatmak için Tamam'a basın",
"settings.notyf.visual.plugin.install.success": "Eklenti başarıyla kuruldu",
"settings.notyf.visual.plugin.install.error": "Eklenti kurulumu başarısız oldu",
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Karanlık",
"settings.option.visual.showPersonalInfo": "Kullanıcı Adımı Göster",
"settings.header.window": "Pencere",
"settings.header.window.description": "Cider için pencere ayarlarını yapın.",
"settings.option.window.openOnStartup": "Başlangıçta Cider'i açın",
"settings.option.window.openOnStartup.hidden": "Küçültülmüş şekilde aç",
"settings.header.lyrics": "Şarkı Sözleri",
"settings.header.lyrics.description": "Cider'in şarkı sözlerini nasıl görüntülemesini istediğini buradan ayarlayın.",
"settings.option.lyrics.enableMusixmatch": "Musixmatch Kullan",
@ -279,12 +376,23 @@
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Şimdi çalan şarkıyı LastFM'de göster",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Albüm sanatçısını Scrobbledan kaldır(LastFM)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "Tekrar edilen şarkıyı filtrele (LastFM)",
"settings.header.debug": "Hata Ayıklama",
"settings.option.debug.copy_log": "Günlükleri panoya kopyala",
"settings.option.debug.openAppData": "Cider'in bulunduğu klasörü aç",
"settings.header.experimental": "Deneysel",
"settings.header.experimental.description": "Cider'deki deneysel özelliklere erişim sağlayın. (Not: Bazı özellikler düzgün çalışmayabilir.)",
"settings.option.experimental.reinstallwidevine": "WidevineCDM'yi yeniden yükleyin",
"settings.option.experimental.reinstallwidevine.confirm": "Widevine'i yeniden yüklemek istediğinizden emin misiniz?",
"settings.option.experimental.unknownPlugin": "Bilinmeyen kaynaklar",
"settings.option.experimental.unknownPlugin.description": "Cider Eklenti Deposu dışındaki depolardan eklentilerin yüklenmesine izin ver",
"settings.option.experimental.compactUI": "Kompakt Arayüz",
"settings.option.experimental.close_button_hide": "Kapatma Düğmesi Cider'i Küçültür",
"settings.option.experimental.copy_log": "Günlüğü Panoya Kopyala",
"settings.option.window.close_button_hide": "Kapatma Düğmesi Cider'i Küçültür",
"settings.option.experimental.inline_playlists": "Listeleri ve Albümleri Açılır Pencere İle göster",
"settings.option.advanced.playlistTrackMapping": "Şarkı Dizini Oluşturma",
"settings.option.advanced.playlistTrackMapping.description": "Hangi parçaların hangi çalma listelerinde olduğunu belirlemek için çalma listelerinin derinlemesine taranmasını sağlar. Oynatma listesi önbelleği oluşturma süreleri önemli ölçüde artabilir.",
"settings.option.visual.transparent": "Şeffaf çerçeve",
"settings.option.visual.transparent.description": "Şeffaf çerçeve (Tema Desteğine ihtiyaç duyar, yeniden başlatma gerektirir)",
"settings.header.advanced": "Gelişmiş",
"spatial.notTurnedOn": "Uzamsal ses devre dışı. Kullanabilmek için lütfen önce etkinleştirin.",
"spatial.spatialProperties": "Uzamsal Özellikler",
"spatial.width": "Genişlik",
@ -307,5 +415,15 @@
"settings.header.unfinished": "Geliştirme Aşamasında",
"remote.web.title": "Cider'e Bağlan",
"remote.web.description": "Telefonunuzu Bu Cider Oturumuyla Eşleştirmek için QR Kodunu Tarayın",
"share.platform.twitter.tweet": "Apple Müzik'te {{song}} dinleyin.\n\n{{url}}\n\n#AppleMusic #Cider",
"share.platform.twitter": "Twitter",
"share.platform.facebook": "Facebook",
"share.platform.reddit": "Reddit",
"share.platform.telegram": "Telegram",
"share.platform.whatsapp": "WhatsApp",
"share.platform.messenger": "Messenger",
"share.platform.email": "Eposta",
"share.platform.songLink": "song.link bağlantısını kopyala",
"share.platform.clipboard": "Bağlantıyı kopyala",
"about.thanks": "Cider Collective Ekibine ve tüm katkıda bulunanlara çok teşekkür ederiz."
}

View file

@ -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.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)",
@ -285,7 +285,7 @@
"settings.header.experimental": "Thử nghiệm",
"settings.header.experimental.description": "Thay đổi các cài đặt lời thử nghiệm của Cider.",
"settings.option.experimental.compactUI": "UI thu gọn",
"settings.option.experimental.close_button_hide": "Nút thoát cửa số sẽ ẩn Cider xuống khay hệ thống",
"settings.option.window.close_button_hide": "Nút thoát cửa số sẽ ẩn Cider xuống khay hệ thống",
"settings.option.experimental.copy_log": "Sao chép logs ra bộ nhớ tạm",
"settings.option.experimental.inline_playlists": "Playlists and Albums hiện nổi lên trên",
"spatial.notTurnedOn": "Âm thanh đa chiều chưa được kích hoạt. Hãy kích hoạt nó trước",

View file

@ -229,7 +229,7 @@
"settings.option.audio.enableAdvancedFunctionality": "进阶功能",
"settings.option.audio.enableAdvancedFunctionality.description": "启用 AudioContext 将解锁例如音量标准化和音频空间化的功能,但可能会在小部分设备上出现音频上的卡顿。",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 数字增强引擎™️",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "将欺骗您的大脑来感知到近似无损音频的效果。",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "数字增强引擎强度",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "改变音频处理的强度。(激进选项可能产生杂音)",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量标准化",
@ -291,7 +291,7 @@
"settings.header.experimental": "实验性功能",
"settings.header.experimental.description": "调整 Cider 的实验性功能",
"settings.option.experimental.compactUI": "紧凑型 UI",
"settings.option.experimental.close_button_hide": "点击关闭按钮时仅隐藏窗口",
"settings.option.window.close_button_hide": "点击关闭按钮时仅隐藏窗口",
"settings.option.experimental.copy_log": "复制日志至剪贴板",
"spatial.notTurnedOn": "请在设定中开启空间音频。",
"spatial.spatialProperties": "空间属性",

View file

@ -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.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "音訊增強處理不兼容於空間音訊,請先停用空間音訊。",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "數碼音訊增強處理設定",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "將更改音訊處理的激進程度(激進型選項有可能會引起雜訊)",
@ -297,7 +297,7 @@
"settings.header.experimental": "實驗性功能",
"settings.header.experimental.description": "調整Cider的實驗性功能",
"settings.option.experimental.compactUI": "緊凑型 UI",
"settings.option.experimental.close_button_hide": "以關閉按鈕來隱藏 Cider",
"settings.option.window.close_button_hide": "以關閉按鈕來隱藏 Cider",
"spatial.notTurnedOn": "請先在設定中啟用空間音訊。",
"spatial.spatialProperties": "空間音訊屬性",
"spatial.width": "闊度",

View file

@ -6,10 +6,10 @@
"app.name": "Cider",
"date.format": "${y}年${m}月${d}日",
"dialog.cancel": "取消",
"dialog.ok": "確定",
"notification.updatingLibrarySongs": "正在更新資料庫的歌曲...",
"notification.updatingLibraryAlbums": "正在更新資料庫的專輯...",
"notification.updatingLibraryArtists": "正在更新資料庫的藝人...",
"dialog.ok": "",
"notification.updatingLibrarySongs": "正在更新「音樂資料庫」...",
"notification.updatingLibraryAlbums": "正在更新「專輯資料庫」...",
"notification.updatingLibraryArtists": "正在更新「藝人資料庫」...",
"term.appleMusic": "Apple Music",
"term.applePodcasts": "Apple Podcasts",
"term.itunes": "iTunes",
@ -20,9 +20,11 @@
"term.logout": "登出",
"term.login": "登入",
"term.about": "關於",
"term.privateSession": "私人時",
"term.privateSession": "私人時",
"term.queue": "待播清單",
"term.history": "播放歷史",
"term.lyrics": "歌詞",
"term.miniplayer": "迷你播放器",
"term.history": "記錄",
"term.search": "搜尋",
"term.library": "資料庫",
"term.listenNow": "立即聆聽",
@ -35,11 +37,11 @@
"term.podcasts": "Podcasts",
"term.playlists": "播放列表",
"term.playlist": "播放列表",
"term.newPlaylist": "新播放列表",
"term.newPlaylistFolder": "新播放列表資料夾",
"term.newPlaylist": "新播放列表",
"term.newPlaylistFolder": "新的播放列表檔案夾",
"term.createNewPlaylist": "新增播放列表",
"term.createNewPlaylistFolder": "新增播放列表資料夾",
"term.deletePlaylist": "確定要刪除此播放列表嗎?",
"term.createNewPlaylistFolder": "新增播放列表檔案夾",
"term.deletePlaylist": "確定要刪除此播放列表嗎?",
"term.play": "播放",
"term.pause": "暫停",
"term.previous": "上一首",
@ -57,23 +59,23 @@
"term.sortBy.album": "專輯",
"term.sortBy.artist": "藝人",
"term.sortBy.name": "歌名",
"term.sortBy.genre": "音樂風格",
"term.sortBy.genre": "類型",
"term.sortBy.releaseDate": "發行日期",
"term.sortBy.duration": "時",
"term.sortBy.duration": "時間長度",
"term.sortBy.dateAdded": "新增日期",
"term.sortOrder": "字母排序",
"term.sortOrder.ascending": "升序",
"term.sortOrder.descending": "降序",
"term.sortOrder": "排序方式",
"term.sortOrder.ascending": "升冪排序",
"term.sortOrder.descending": "降冪排序",
"term.viewAs": "顯示模式",
"term.viewAs.coverArt": "專輯封面",
"term.viewAs.coverArt": "專輯插圖",
"term.viewAs.list": "列表",
"term.size": "大小",
"term.size": "顯示方式",
"term.size.normal": "正常",
"term.size.compact": "緊密",
"term.enable": "",
"term.disable": "停用",
"term.enabled": "已",
"term.disabled": "已停用",
"term.enable": "啟",
"term.disable": "關閉",
"term.enabled": "已啟",
"term.disabled": "已關閉",
"term.connect": "連接",
"term.connecting": "連接中",
"term.disconnect": "斷開",
@ -102,7 +104,7 @@
"term.clearAll": "清空",
"term.recentStations": "最近收聽的廣播",
"term.language": "語言",
"term.noLyrics": "正在載入... / 無歌詞結果 / 純音樂",
"term.noLyrics": "沒有可用的歌詞",
"term.copyright": "版權聲明",
"term.rightsReserved": "保留所有權利。",
"term.sponsor": "贊助我們",
@ -118,23 +120,24 @@
"other": "首歌曲"
},
"term.tracks": "首歌曲",
"term.videos": "影片",
"term.videos": "音樂錄影帶",
"term.menu": "選單",
"term.check": "檢查",
"term.aboutArtist": "關於{{artistName}}",
"term.requestError": "請求發生錯誤。",
"term.song.link.generate": "正在取得 song.link 的分享網址...",
"term.version": "版本",
"term.creditDesignedBy": "由 ${authorUsername} 設計",
"home.title": "首頁",
"home.recentlyPlayed": "最近播放",
"home.recentlyAdded": "最近加入",
"home.artistsFeed": "藝人追蹤",
"home.artistsFeed.noArtist": "追蹤一些藝人來獲得他們的最新歌曲。",
"home.artistsFeed.noArtist": "追蹤你喜愛的藝人來取得他們的最新發行歌曲。",
"home.madeForYou": "為您推薦",
"home.friendsListeningTo": "朋友正在聆聽",
"home.followedArtists": "追蹤的藝人",
"error.appleMusicSubRequired": "需要訂閱 Apple Music 以使用 Cider",
"error.connectionError": "無法連到 Apple Music。",
"error.appleMusicSubRequired": "需要訂閱 Apple Music 服務以使用 Cider",
"error.connectionError": "無法連到 Apple Music。",
"error.noResults": "沒有結果",
"error.noResults.description": "嘗試新的搜尋項目。",
"podcast.followOnCider": "在 Cider 上追蹤",
@ -145,47 +148,48 @@
"podcast.episodes": "單集",
"podcast.playEpisode": "播放單集",
"podcast.website": "Podcast 網站",
"action.addToLibrary": "加入資料庫",
"action.addToLibrary": "加入資料庫",
"action.addToLibrary.success": "成功加入資料庫",
"action.addToLibrary.error": "加入資料庫的過程發生錯誤",
"action.removeFromLibrary": "從資料庫刪除",
"action.addToLibrary.error": "加入資料庫時,發生錯誤",
"action.removeFromLibrary": "從資料庫刪除",
"action.removeFromLibrary.success": "已從資料庫刪除",
"action.addToQueue": "加入待播清單",
"action.addToQueue": "加入待播清單",
"action.addToQueue.success": "成功加入待播清單",
"action.addToQueue.error": "加入待播清單的過程發生錯誤",
"action.addToQueue.error": "加入待播清單時,發生錯誤",
"action.removeFromQueue": "從待播清單刪除",
"action.removeFromQueue.success": "已從待播清單刪除",
"action.removeFromQueue.error": "從待播清單刪除的過程發生錯誤",
"action.addToPlaylist": "加入播放列表",
"action.removeFromPlaylist": "從播放列表刪除",
"action.addToFavorites": "加入我的最愛",
"action.removeFromQueue.error": "從待播清單刪除時,發生錯誤",
"action.addToPlaylist": "加入播放列表",
"action.removeFromPlaylist": "從播放列表刪除",
"action.addToFavorites": "加入我的最愛",
"action.follow": "追蹤",
"action.follow.success": "追蹤中",
"action.follow.error": "追蹤的過程發生錯誤",
"action.follow.error": "追蹤時,發生錯誤",
"action.unfollow": "取消追蹤",
"action.unfollow.success": "已取消追蹤",
"action.unfollow.error": "取消追蹤的過程發生錯誤",
"action.unfollow.error": "取消追蹤時,發生錯誤",
"action.playNext": "插播",
"action.playLater": "最後播放",
"action.playLater": "待播",
"action.startRadio": "建立電台",
"action.goToArtist": "前往藝人",
"action.goToAlbum": "前往專輯",
"action.showInAppleMusic": "顯示於 Apple Music",
"action.moveToTop": "移至頂端",
"action.share": "分享歌曲",
"action.rename": "重新命名",
"action.love": "喜愛",
"action.unlove": "取消喜愛",
"action.dislike": "減少此類建議",
"action.undoDislike": "還原減小此類建議",
"action.showWebRemoteQR": "顯示遠程操控行動條碼",
"action.dislike": "不喜歡",
"action.undoDislike": "取消不喜歡",
"action.showWebRemoteQR": "顯示遙控器的 QR Code",
"action.playTracksNext": "插播 ${app.selectedMediaItems.length} 首歌曲",
"action.playTracksLater": "最後播放 ${app.selectedMediaItems.length} 首歌曲",
"action.playTracksLater": "待播 ${app.selectedMediaItems.length} 首歌曲",
"action.removeTracks": "從待播清單刪除 ${self.selectedItems.length} 首歌曲",
"action.import": "入",
"action.export": "出",
"action.import": "入",
"action.export": "出",
"action.showAlbum": "顯示專輯",
"action.tray.minimize": "最小化",
"action.tray.quit": "關閉",
"action.tray.quit": "結束",
"action.tray.show": "顯示",
"action.update": "更新",
"action.copy": "複製",
@ -194,6 +198,12 @@
"action.open": "開啟",
"settings.header.general": "一般",
"settings.header.general.description": "調整 Cider 的一般設定",
"settings.option.general.resumebehavior": "還原行為",
"settings.option.general.resumebehavior.description": "會影響你回到 Cider 應用程式時,恢復歌曲的方式。",
"settings.option.general.resumebehavior.locally": "本機",
"settings.option.general.resumebehavior.locally.description": "Cider 將還原你在這台電腦上的最後一次操作。",
"settings.option.general.resumebehavior.history": "歷史",
"settings.option.general.resumebehavior.history.description": "Cider 將跨裝置將你的整個 Apple Music 歷史記錄中的最後一首歌曲排隊入列。",
"settings.option.general.language.main": "語言",
"settings.option.general.language.fun": "特殊語言",
"settings.option.general.language.unsorted": "未分類",
@ -202,43 +212,63 @@
"settings.option.general.updateCider.branch.description": "選擇您要接收 Cider 軟體更新的通道",
"settings.option.general.updateCider.branch.main": "穩定版(建議)",
"settings.option.general.updateCider.branch.develop": "開發者測試版(不穩定)",
"settings.notyf.updateCider.update-not-available": "沒有可用的更新",
"settings.notyf.updateCider.update-downloaded": "更新已成功下載,重啟後進行更新",
"settings.notyf.updateCider.update-error": "更新時,發生錯誤",
"settings.notyf.updateCider.update-timeout": "更新超時",
"settings.header.audio": "音訊",
"settings.header.audio.description": "調整 Cider 的音訊設定",
"settings.option.audio.volumeStep": "音量改變量",
"settings.option.audio.maxVolume": "最大音量",
"settings.option.audio.quality": "音訊品質",
"settings.header.audio.quality.hireslossless": "高品質無損壓縮",
"settings.header.audio.quality.hireslossless.description": "高達 24-bit/192 kHz",
"settings.header.audio.quality.hireslossless.description": "最高24位元/192 kHz",
"settings.header.audio.quality.lossless": "無損壓縮",
"settings.header.audio.quality.lossless.description": "高達 24-bit/48 kHz",
"settings.header.audio.quality.lossless.description": "最高24位元/48 kHz",
"settings.header.audio.quality.enhanced": "數位增強",
"settings.header.audio.quality.high": "高品質",
"settings.header.audio.quality.standard": "高效率",
"settings.header.audio.quality.auto": "自動",
"settings.option.audio.seamlessTransition": "無間斷播放",
"settings.option.audio.enableAdvancedFunctionality": "進階音訊功能",
"settings.option.audio.enableAdvancedFunctionality.description": "啟用 AudioContext 將開啟類似音訊平衡和等化器的進階設定。但這並不一定適合每部電腦,可能會發生音樂卡頓。",
"settings.option.audio.enableAdvancedFunctionality.description": "開啟 AudioContext 將啟用類似音量平衡和等化器的進階設定。但這並不一定適合每部電腦,可能會發生音樂卡頓。",
"settings.option.audio.audioLab": "Cider 音訊實驗室",
"settings.option.audio.audioLab.description": "包含由 Cider 開發團隊進行的各種音訊改善功能。",
"settings.warn.audioLab.withoutAF": "使用 Cider 音訊實驗室需要開啟進階音訊功能才能使用。" ,
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "模擬溫暖",
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "以 Korg Nutube 6P1 為設計的模擬溫暖。",
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "改變模擬溫暖模組處理的強度。",
"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.ciderPPEStrength": "數位增強音訊處理設定",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "將更改音訊處理的激進/振奮程度(增強選項有可能會引起雜訊)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "將更改音訊處理的激進/振奮程度(增強選項有可能會引起雜訊)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "標準",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "增強",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音訊平衡",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "將平衡輕柔和響亮的歌曲,建立更統一舒適的聆聽體驗。",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量平衡",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "自動將歌曲播放音量調整至相同位準,享受更舒適的聆聽體驗。",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "此功能由音訊實驗室管理",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "空間音訊",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "將音訊進行空間化處理來製造一個更立體的聆聽體驗(註:此功能不是官方的杜比全景聲)",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider 空間音訊效果",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "預先調整空間音訊效果,關閉空間音訊可自訂設定。但必須先開啟空間音訊才可以做設定。",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider 空間音訊配置檔案",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "變更空間音訊的配置檔案,需要重新啟動應用程式。",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "標準",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "發燒友",
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "空間音訊無法與 CAP 相容,請關閉 CAP 在進行操作。",
"settings.header.visual": "外觀",
"settings.header.visual.description": "調整 Cider 的外觀",
"settings.option.visual.windowBackgroundStyle": "視窗背景樣式",
"settings.header.visual.windowBackgroundStyle.none": "空白",
"settings.header.visual.windowBackgroundStyle.artwork": "專輯封面",
"settings.header.visual.windowBackgroundStyle.artwork": "專輯插圖",
"settings.header.visual.windowBackgroundStyle.image": "圖片",
"settings.option.visual.animatedArtwork": "動態專輯封面",
"settings.option.visual.animatedArtwork": "動態專輯插圖",
"settings.header.visual.animatedArtwork.always": "總是顯示",
"settings.header.visual.animatedArtwork.limited": "只在藝人頁面和專輯封面顯示",
"settings.header.visual.animatedArtwork.limited": "只在藝人頁面和專輯插圖顯示",
"settings.header.visual.animatedArtwork.disable": "關閉",
"settings.option.visual.animatedArtworkQuality": "動態專輯封面品質",
"settings.option.visual.animatedArtworkQuality": "動態專輯插圖品質",
"settings.header.visual.animatedArtworkQuality.low": "低",
"settings.header.visual.animatedArtworkQuality.medium": "中",
"settings.header.visual.animatedArtworkQuality.high": "高",
@ -251,41 +281,63 @@
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "主題",
"settings.option.visual.theme.github.download": "從 GitHub 網址安裝",
"settings.option.visual.theme.github.explore": "瀏覽 GitHub 上的主題",
"settings.option.visual.theme.github.explore": "探索 GitHub 上的主題",
"settings.prompt.visual.theme.github.URL": "輸入你要安裝的主題網址",
"settings.notyf.visual.theme.install.success": "主題成功安裝",
"settings.notyf.visual.theme.install.error": "主題安裝失敗",
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "暗黑模式",
"settings.header.visual.plugin": "套件",
"settings.option.visual.plugin.github.download": "從 GitHub 網址安裝",
"settings.option.visual.plugin.github.explore": "探索 GitHub 套件",
"settings.header.visual.plugin.github.page": "來自 GitHub 的套件",
"settings.option.visual.plugin.github.install.confirm": "你確定要安裝 {{ repo }}",
"settings.prompt.visual.plugin.github.URL": "輸入你要安裝的套件網址",
"settings.prompt.visual.plugin.github.success": "套件成功安裝,按「確認」以重新啟動 Cider",
"settings.notyf.visual.plugin.install.success": "套件成功安裝",
"settings.notyf.visual.plugin.install.error": "套件安裝失敗",
"settings.option.visual.theme.default": "預設",
"settings.option.visual.theme.dark": "午夜黑",
"settings.option.visual.showPersonalInfo": "顯示個人檔案",
"settings.header.window": "視窗",
"settings.header.window.description": "調整 Cider 的視窗設定",
"settings.option.window.openOnStartup": "開機時,啟動 Cider ",
"settings.option.window.openOnStartup.hidden": "啟動時,自動隱藏至系統列",
"settings.header.lyrics": "歌詞",
"settings.header.lyrics.description": "調整 Cider 的歌詞設定",
"settings.option.lyrics.enableMusixmatch": "啟用 Musixmatch 歌詞",
"settings.option.lyrics.enableMusixmatchKaraoke": "啟用K歌模式僅限Musixmatch",
"settings.option.lyrics.enableMusixmatch": "啟 Musixmatch 歌詞",
"settings.option.lyrics.enableMusixmatchKaraoke": "啟K歌模式僅限 Musixmatch",
"settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch 歌詞語言偏好",
"settings.option.lyrics.enableYoutubeLyrics": "播放 MV 時使用 YouTube 歌詞",
"settings.option.lyrics.enableYoutubeLyrics": "播放 MV 時使用 YouTube 歌詞",
"settings.header.connectivity": "外部連接",
"settings.header.connectivity.description": "調整 Cider 與外部的連接",
"settings.option.connectivity.discordRPC": "Discord 動態",
"settings.option.connectivity.playbackNotifications": "歌曲播放通知",
"settings.header.connectivity.discordRPC.cider": "顯示正在使用 'Cider'",
"settings.header.connectivity.discordRPC.appleMusic": "顯示正在使用 'Apple Music'",
"settings.header.connectivity.discordRPC.cider": "顯示正在使用 Cider",
"settings.header.connectivity.discordRPC.appleMusic": "顯示正在使用 Apple Music",
"settings.option.connectivity.discordRPC.clearOnPause": "暫停時清除 Discord 動態",
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling 記錄",
"settings.option.connectivity.lastfmScrobble.delay": "LastFM Scrobble 延遲 (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": " LastFM 目前聆聽",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "從歌名中移除客串藝人 (LastFM)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "不記錄單曲循環 (LastFM)",
"settings.option.connectivity.lastfmScrobble": "Last.FM Scrobbling 記錄",
"settings.option.connectivity.lastfmScrobble.delay": "Last.FM Scrobble 延遲 (%)",
"settings.option.connectivity.lastfmScrobble.nowPlaying": "啟 Last.FM 目前聆聽",
"settings.option.connectivity.lastfmScrobble.removeFeatured": "從歌名中移除客串藝人 (Last.FM)",
"settings.option.connectivity.lastfmScrobble.filterLoop": "不記錄單曲循環 (Last.FM)",
"settings.header.debug": "除錯",
"settings.option.debug.copy_log": "複製執行紀錄檔至剪貼簿",
"settings.option.debug.openAppData": "打開 Cider 資料夾",
"settings.header.experimental": "實驗性功能",
"settings.header.experimental.description": "調整 Cider 的實驗性功能",
"settings.option.experimental.reinstallwidevine": "重新安裝 WidevineCDM",
"settings.option.experimental.reinstallwidevine.confirm": "你確定要重新安裝 WidevineCDM 嗎?",
"settings.option.experimental.unknownPlugin": "未知來源",
"settings.option.experimental.unknownPlugin.description": "允許從 Cider 來源以外的 repo 安裝套件",
"settings.option.experimental.compactUI": "使用緊密的介面設計",
"settings.option.experimental.closeButtonBehaviour": "關閉按鈕操作",
"settings.option.experimental.close_button_hide": "關閉按鈕將 Cider 隱藏至系統列",
"settings.option.window.close_button_hide": "關閉按鈕將 Cider 隱藏至系統列",
"settings.option.experimental.inline_playlists": "將播放列表做為行内元素顯示",
"spatial.notTurnedOn": "空間音訊目前是關閉狀態,請先啟用再使用。",
"settings.option.advanced.playlistTrackMapping": "播放列表追蹤映射",
"settings.option.advanced.playlistTrackMapping.description": "開啟對播放列表的深度掃描,以確定歌曲在哪些播放列表中。但播放列表快取時間會顯著增加。",
"settings.option.visual.transparent": "透明視窗框架",
"settings.option.visual.transparent.description": "需主題有支援透明框架,且須重新啟動才會套用。",
"settings.header.advanced": "進階",
"spatial.notTurnedOn": "空間音訊目前是關閉狀態,請先開啟再使用。",
"spatial.spatialProperties": "空間音訊屬性設定",
"spatial.width": "寬度",
"spatial.height": "高度",
@ -305,7 +357,7 @@
"spatial.listener": "聽衆",
"spatial.audioSource": "音訊來源",
"settings.header.unfinished": "未開發完成的功能",
"remote.web.title": "Cider 遠端操控",
"remote.web.description": "掃描以下的行動條碼以操控 Cider",
"remote.web.title": "Cider 遙控器",
"remote.web.description": "掃描以下 QR Code 即可遙控 Cider",
"about.thanks": "著重感謝 Cider Collective 的成員以及所有為項目付出的貢獻者。"
}

View file

@ -262,7 +262,7 @@
"settings.header.experimental": "實驗性功能",
"settings.header.experimental.description": "調整Cider嘅實驗性功能",
"settings.option.experimental.compactUI": "逼啲既 UI",
"settings.option.experimental.close_button_hide": "㩒交叉制嚟隱藏 Cider",
"settings.option.window.close_button_hide": "㩒交叉制嚟隱藏 Cider",
"settings.option.experimental.copy_log": "將log複製喺剪貼簿",
"spatial.notTurnedOn": "唔該喺設定入面啟用左空間音訊先。",
"spatial.spatialProperties": "空間音訊屬性",

View file

@ -120,6 +120,8 @@ export class AppEvents {
public ready(plug: any) {
this.plugin = plug
console.log('[AppEvents] App ready');
AppEvents.setLoginSettings()
}
public bwCreated() {
@ -139,8 +141,10 @@ export class AppEvents {
}
this.InstanceHandler()
if (process.platform !== "darwin") {
this.InitTray()
}
}
/***********************************************************************************************************************
* Private methods
@ -323,10 +327,34 @@ export class AppEvents {
private static initLogging() {
log.transports.console.format = '[{h}:{i}:{s}.{ms}] [{level}] {text}';
Object.assign(console, log.functions);
console.debug = function(...args: any[]) {
if (!app.isPackaged) {
log.debug(...args)
}
};
ipcMain.on('fetch-log', (_event) => {
const data = readFileSync(log.transports.file.getFile().path, {encoding: 'utf8', flag: 'r'});
clipboard.writeText(data)
})
}
/**
* Set login settings
* @private
*/
private static setLoginSettings() {
if (utils.getStoreValue('general.onStartup.enabled')) {
app.setLoginItemSettings({
openAtLogin: true,
path: app.getPath('exe'),
args: [`${utils.getStoreValue('general.onStartup.hidden') ? '--hidden' : ''}`]
})
} else {
app.setLoginItemSettings({
openAtLogin: false,
path: app.getPath('exe')
})
}
}
}

View file

@ -4,18 +4,19 @@ import * as windowStateKeeper from "electron-window-state";
import * as express from "express";
import * as getPort from "get-port";
import {search} from "youtube-search-without-api-key";
import {existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, statSync} from "fs";
import {existsSync, rmSync, mkdirSync, readdirSync, readFileSync, writeFileSync, statSync} from "fs";
import {Stream} from "stream";
import {networkInterfaces} from "os";
import * as mm from 'music-metadata';
import fetch from 'electron-fetch'
import {wsapi} from "./wsapi";
import {AppImageUpdater, NsisUpdater} from "electron-updater";
import {utils} from './utils';
import {Plugins} from "./plugins";
import {watch} from "chokidar";
const wallpaper = require('wallpaper');
const fileWatcher = require('chokidar');
const AdmZip = require("adm-zip");
// @ts-ignore
import * as AdmZip from "adm-zip";
/**
* @file Creates the BrowserWindow
@ -41,6 +42,7 @@ export class BrowserWindow {
"pages/apple-account-settings",
"pages/library-songs",
"pages/library-albums",
"pages/library-artists",
"pages/browse",
"pages/settings",
"pages/listen_now",
@ -82,7 +84,7 @@ export class BrowserWindow {
"components/mediaitem-hrect",
"components/mediaitem-square",
"components/mediaitem-mvview",
"components/libraryartist-item",
// "components/libraryartist-item",
"components/listennow-child",
"components/mediaitem-mvview-sp",
"components/animatedartwork-view",
@ -93,6 +95,7 @@ export class BrowserWindow {
"components/castmenu",
"components/artist-chip",
"components/hello-world",
"components/inline-collection-list",
],
appRoutes: [
{
@ -184,7 +187,12 @@ export class BrowserWindow {
page: "library-albums",
component: `<cider-library-albums :data="library.songs"></cider-library-albums>`,
condition: `page == 'library-albums'`,
onEnter: `getLibraryAlbumsFull(null, 1); getAlbumSort(); searchLibraryAlbums(1);`
onEnter: `getLibraryAlbumsFull(null, 1); getAlbumSort(); searchLibraryAlbums(1); getLibrarySongsFull() ;searchLibraryAlbums(1);`
}, {
page: "library-artists",
component: `<cider-library-artists></cider-library-artists>`,
condition: `page == 'library-artists'`,
onEnter: `getLibraryArtistsFull(null, 0);`
}, {
page: "appleCurator",
component: `<cider-applecurator :data="appleCurator"></cider-applecurator>`,
@ -245,9 +253,7 @@ export class BrowserWindow {
};
StartWatcher(path: string) {
var chokidar = require("chokidar");
var watcher = chokidar.watch(path, {
const watcher = watch(path, {
ignored: /[\/\\]\./,
persistent: true
});
@ -309,9 +315,11 @@ export class BrowserWindow {
break;
case "win32":
if (!(utils.getStoreValue('visual.transparent') ?? false)){
this.options.backgroundColor = "#1E1E1E";} else {
this.options.transparent = true;}
if (!(utils.getStoreValue('visual.transparent') ?? false)) {
this.options.backgroundColor = "#1E1E1E";
} else {
this.options.transparent = true;
}
break;
case "linux":
this.options.backgroundColor = "#1E1E1E";
@ -451,7 +459,7 @@ export class BrowserWindow {
}
});
app.get("/themes/:theme/*", (req: {params: {theme: string, 0: string}}, res) => {
app.get("/themes/:theme/*", (req: { params: { theme: string, 0: string } }, res) => {
const theme = req.params.theme;
const file = req.params[0];
const themePath = join(utils.getPath('srcPath'), "./renderer/themes/", theme);
@ -465,9 +473,9 @@ export class BrowserWindow {
}
});
app.get("/plugins/:plugin/*", (req: {params: {plugin: string, 0: string}}, res) => {
app.get("/plugins/:plugin/*", (req: { params: { plugin: string, 0: string } }, res) => {
let plugin = req.params.plugin;
if(Plugins.getPluginFromMap(plugin)) {
if (Plugins.getPluginFromMap(plugin)) {
plugin = Plugins.getPluginFromMap(plugin)
}
const file = req.params[0];
@ -596,10 +604,31 @@ export class BrowserWindow {
/**********************************************************************************************************************
* ipcMain Events
****************************************************************************************************************** */
ipcMain.on("get-wallpaper", async (event) => {
const wpPath: string = await wallpaper.get();
// get the wallpaper and encode it to base64 then return
const wpBase64: string = await readFileSync(wpPath, 'base64')
// add the data:image properties
const wpData: string = `data:image/png;base64,${wpBase64}`
event.returnValue = wpData;
})
ipcMain.on("cider-platform", (event) => {
event.returnValue = process.platform;
});
ipcMain.handle("reinstall-widevine-cdm", () => {
// remove WidevineCDM from appdata folder
const widevineCdmPath = join(app.getPath("userData"), "./WidevineCdm");
if (existsSync(widevineCdmPath)) {
rmSync(widevineCdmPath, {recursive: true, force: true})
}
// reinstall WidevineCDM
app.relaunch()
app.exit()
})
ipcMain.handle("get-github-plugin", async (event, url) => {
const returnVal = {
success: true,
@ -751,7 +780,7 @@ export class BrowserWindow {
});
ipcMain.handle("open-path", async (event, path) => {
switch(path) {
switch (path) {
default:
case "plugins":
shell.openPath(utils.getPath("plugins"));
@ -868,9 +897,24 @@ export class BrowserWindow {
BrowserWindow.win.webContents.openDevTools({mode: 'detach'});
})
ipcMain.handle('relaunchApp',(_event, _) => {
app.relaunch()
app.exit()
ipcMain.handle('relaunchApp', (_event, _) => {
const opt: Electron.RelaunchOptions = {};
opt.args = process.argv.slice(1).concat(['--relaunch']);
opt.execPath = process.execPath;
if (app.isPackaged && process.env.PORTABLE_EXECUTABLE_FILE != undefined) {
opt.execPath = process.env.PORTABLE_EXECUTABLE_FILE;
} else if (app.isPackaged && process.env.APPIMAGE != undefined) {
opt.execPath = process.env.APPIMAGE;
opt.args.unshift('--appimage-extract-and-run');
} else if (app.isPackaged && process.env.CHROME_DESKTOP != undefined && process.env.PLATFORM == "Linux") {
opt.execPath = "cider";
}
app.relaunch(opt);
app.quit();
})
app.on('before-quit', () => {
})
@ -968,10 +1012,27 @@ export class BrowserWindow {
return Math.max(-32768, Math.min(32768, v)); // clamp
}
function bitratechange(e: any){
var t = e.length;
let sampleRate = 96.0;
let outputSampleRate = 48.0;
var s = 0,
o = sampleRate / outputSampleRate,
u = Math.ceil(t * outputSampleRate / sampleRate),
a = new Int16Array(u);
for (let i = 0; i < u; i++) {
a[i] = e[Math.floor(s)];
s += o;
}
return a;
}
let newaudio = quantization(leftpcm, rightpcm);
//let newaudio = [leftpcm, rightpcm];
// console.log(newaudio.length);
let pcmData = Buffer.from(new Int8Array(interleave16(Int16Array.from(newaudio[0], x => convert(x)), Int16Array.from(newaudio[1], x => convert(x))).buffer));
let pcmData = Buffer.from(new Int8Array(interleave16(bitratechange(Int16Array.from(newaudio[0], x => convert(x))), bitratechange(Int16Array.from(newaudio[1], x => convert(x)))).buffer));
if (!this.headerSent) {
console.log('new header')
@ -1039,15 +1100,10 @@ export class BrowserWindow {
ipcMain.on('disable-update', (event) => {
// Check if using app store builds so people don't get pissy wen button go bonk
if (app.isPackaged && !process.mas || !process.windowsStore) {
event.returnValue = false
} else {
event.returnValue = true
}
event.returnValue = !(app.isPackaged && !process.mas || !process.windowsStore);
})
ipcMain.on('share-menu', async (_event, url) => {
if (process.platform != 'darwin') return;
//https://www.electronjs.org/docs/latest/api/share-menu
@ -1111,6 +1167,11 @@ export class BrowserWindow {
event.preventDefault();
BrowserWindow.win.hide();
} else {
BrowserWindow.win.webContents.executeJavaScript(`
window.localStorage.setItem("currentTrack", JSON.stringify(app.mk.nowPlayingItem));
window.localStorage.setItem("currentTime", JSON.stringify(app.mk.currentPlaybackTime));
window.localStorage.setItem("currentQueue", JSON.stringify(app.mk.queue.items));
ipcRenderer.send('stopGCast','');`)
BrowserWindow.win.destroy();
}
})
@ -1119,8 +1180,18 @@ export class BrowserWindow {
isQuiting = true
});
app.on('activate', function () {
BrowserWindow.win.show()
BrowserWindow.win.focus()
});
// Quit when all windows are closed.
app.on('window-all-closed', () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') {
app.quit()
}
})
BrowserWindow.win.on("closed", () => {
@ -1143,17 +1214,24 @@ export class BrowserWindow {
*/
private static getIP(): string {
let ip: string = '';
let ip2: any = [];
let alias = 0;
const ifaces: any = networkInterfaces();
for (let dev in ifaces) {
ifaces[dev].forEach((details: any) => {
if (details.family === 'IPv4') {
if (details.family === 'IPv4' && !details.internal) {
if (!/(loopback|vmware|internal|hamachi|vboxnet|virtualbox)/gi.test(dev + (alias ? ':' + alias : ''))) {
if (details.address.substring(0, 8) === '192.168.' ||
details.address.substring(0, 7) === '172.16.' ||
details.address.substring(0, 3) === '10.'
) {
if (!ip.startsWith('192.168.') ||
(ip2.startsWith('192.168.') && !ip.startsWith('192.168.')) &&
(ip2.startsWith('172.16.') && !ip.startsWith('192.168.') && !ip.startsWith('172.16.')) ||
(ip2.startsWith('10.') && !ip.startsWith('192.168.') && !ip.startsWith('172.16.') && !ip.startsWith('10.'))
) {
ip = details.address;
}
++alias;
}
}
@ -1170,7 +1248,7 @@ export class BrowserWindow {
private async broadcastRemote() {
const myString = `http://${BrowserWindow.getIP()}:${this.remotePort}`;
const mdns = require('mdns-js');
const encoded = new Buffer(myString).toString('base64');
const encoded = Buffer.from(myString).toString('base64');
const x = mdns.tcp('cider-remote');
const txt_record = {
"Ver": "131077",

View file

@ -21,4 +21,12 @@ CiderCastController.prototype.sendIp = function(ip) {
this.request(data);
};
CiderCastController.prototype.kill = function() {
// TODO: Implement Callback
let data = {
action : "stop"
}
this.request(data);
};
module.exports = CiderCastController;

View file

@ -74,4 +74,8 @@ CiderReceiver.prototype.sendIp = function(opts){
this.mediaReceiver.sendIp.apply(this.mediaReceiver, arguments);
};
CiderReceiver.prototype.kill = function(opts){
this.mediaReceiver.kill.apply(this.mediaReceiver, arguments);
};
module.exports = CiderReceiver;

View file

@ -44,7 +44,7 @@ export class Plugins {
if (plugins[file] || plugin.name in plugins) {
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
} else {
plugins[file] = new plugin(electron.app, utils.getStore());
plugins[file] = new plugin(utils);
}
}
});
@ -61,7 +61,7 @@ export class Plugins {
if (plugins[file] || plugin in plugins) {
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
} else {
plugins[file] = new plugin(electron.app, utils.getStore());
plugins[file] = new plugin(utils);
}
} else {
const plugin = require(path.join(this.userPluginsPath, file));
@ -69,7 +69,7 @@ export class Plugins {
if (plugins[file] || plugin in plugins) {
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
} else {
plugins[file] = new plugin(electron.app, utils.getStore());
plugins[file] = new plugin(utils);
}
}
}
@ -104,7 +104,11 @@ export class Plugins {
public callPlugins(event: string, ...args: any[]) {
for (const plugin in this.pluginsList) {
if (this.pluginsList[plugin][event]) {
try{
this.pluginsList[plugin][event](...args);
}catch(e) {
console.log(`[${plugin}] Plugin error: ${e}`);
}
}
}
}

View file

@ -7,7 +7,6 @@ export class Store {
private defaults: any = {
"general": {
"close_button_hide": false,
"open_on_startup": false,
"discord_rpc": 1, // 0 = disabled, 1 = enabled as Cider, 2 = enabled as Apple Music
"discord_rpc_clear_on_pause": true,
"language": "en_US", // electron.app.getLocale().replace('-', '_') this can be used in future
@ -23,6 +22,10 @@ export class Store {
"artists": true,
"videos": true,
"podcasts": true
},
"onStartup": {
"enabled": false,
"hidden": false,
}
},
"home": {
@ -52,13 +55,12 @@ export class Store {
"normalization": false,
"maikiwiAudio": {
"ciderPPE": false,
"ciderPPE_value": 0.5,
"ciderPPE_value": "MAIKIWI",
"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
'multiplier': 0,
'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],
'gain': [-0.34, 2.49, 0.23, -0.49, 0.23, -0.12, 0.32, -0.29, 0.33, 0.19, -0.18, -1.27, -0.11, 0.25, -0.18, -0.53, 0.34, 1.32, 1.78, 0.41, -0.28]

View file

@ -33,6 +33,14 @@ export class utils {
return this.paths[name];
}
/**
* Get the app
* @returns {Electron.App}
*/
static getApp(): Electron.App {
return app;
}
/**
* Fetches the i18n locale for the given language.
* @param language {string} The language to fetch the locale for.
@ -126,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)

View file

@ -1,11 +1,6 @@
import * as ws from "ws";
import * as http from "http";
import * as https from "https";
import * as url from "url";
import * as fs from "fs";
import * as path from "path";
import * as electron from "electron";
const WebSocket = ws;
const WebSocketServer = ws.Server;
interface standardResponse {
@ -21,8 +16,9 @@ export class wsapi {
port: any = 26369
wss: any = null
clients: any = []
private _win : any;
constructor(win : any) {
private _win: any;
constructor(win: any) {
this._win = win;
}
@ -35,33 +31,34 @@ export class wsapi {
return v.toString(16);
});
}
public async InitWebSockets () {
electron.ipcMain.on('wsapi-updatePlaybackState', (event :any, arg :any) => {
public async InitWebSockets() {
electron.ipcMain.on('wsapi-updatePlaybackState', (_event: any, arg: any) => {
this.updatePlaybackState(arg);
})
electron.ipcMain.on('wsapi-returnQueue', (event :any, arg :any) => {
electron.ipcMain.on('wsapi-returnQueue', (_event: any, arg: any) => {
this.returnQueue(JSON.parse(arg));
});
electron.ipcMain.on('wsapi-returnSearch', (event :any, arg :any) => {
electron.ipcMain.on('wsapi-returnSearch', (_event: any, arg: any) => {
console.log("SEARCH")
this.returnSearch(JSON.parse(arg));
});
electron.ipcMain.on('wsapi-returnSearchLibrary', (event :any, arg :any) => {
electron.ipcMain.on('wsapi-returnSearchLibrary', (_event: any, arg: any) => {
this.returnSearchLibrary(JSON.parse(arg));
});
electron.ipcMain.on('wsapi-returnDynamic', (event :any, arg :any, type :any) => {
electron.ipcMain.on('wsapi-returnDynamic', (_event: any, arg: any, type: any) => {
this.returnDynamic(JSON.parse(arg), type);
});
electron.ipcMain.on('wsapi-returnMusicKitApi', (event :any, arg :any, method :any) => {
electron.ipcMain.on('wsapi-returnMusicKitApi', (_event: any, arg: any, method: any) => {
this.returnMusicKitApi(JSON.parse(arg), method);
});
electron.ipcMain.on('wsapi-returnLyrics', (event :any, arg :any) => {
electron.ipcMain.on('wsapi-returnLyrics', (_event: any, arg: any) => {
this.returnLyrics(JSON.parse(arg));
});
electron.ipcMain.on('wsapi-returnvolumeMax', (_event: any, arg: any) => {
@ -91,20 +88,20 @@ export class wsapi {
})
console.log(`WebSocketServer started on port: ${this.port}`);
const defaultResponse :standardResponse = {status :0, data:{}, message:"OK", type:"generic"};
const defaultResponse: standardResponse = {status: 0, data: {}, message: "OK", type: "generic"};
this.wss.on('connection', (ws : any) => {
this.wss.on('connection', (ws: any) => {
ws.id = this.createId();
console.log(`Client ${ws.id} connected`)
this.clients.push(ws);
ws.on('message', function incoming(message : any) {
ws.on('message', function incoming(_message: any) {
});
// ws on message
ws.on('message', (message : any) => {
ws.on('message', (message: any) => {
let data = JSON.parse(message);
let response :standardResponse = {status :0, data:{}, message:"OK", type:"generic"};
let response: standardResponse = {status: 0, data: {}, message: "OK", type: "generic"};
if (data.action) {
data.action.toLowerCase();
}
@ -143,9 +140,9 @@ export class wsapi {
this._win.webContents.executeJavaScript(`wsapi.toggleShuffle()`);
break;
case "set-shuffle":
if(data.shuffle == true) {
if (data.shuffle == true) {
this._win.webContents.executeJavaScript(`MusicKit.getInstance().shuffleMode = 1`);
}else{
} else {
this._win.webContents.executeJavaScript(`MusicKit.getInstance().shuffleMode = 0`);
}
break;
@ -256,48 +253,56 @@ export class wsapi {
ws.send(JSON.stringify(defaultResponse));
});
}
sendToClient(id : any) {
sendToClient(_id: any) {
// replace the clients.forEach with a filter to find the client that requested
}
updatePlaybackState(attr : any) {
const response : standardResponse = {status: 0, data: attr, message: "OK", type:"playbackStateUpdate"};
updatePlaybackState(attr: any) {
const response: standardResponse = {status: 0, data: attr, message: "OK", type: "playbackStateUpdate"};
this.clients.forEach(function each(client: any) {
client.send(JSON.stringify(response));
});
}
returnMusicKitApi(results :any, method :any) {
const response : standardResponse = {status :0, data: results, message:"OK", type:`musickitapi.${method}`};
this.clients.forEach(function each(client :any) {
returnMusicKitApi(results: any, method: any) {
const response: standardResponse = {status: 0, data: results, message: "OK", type: `musickitapi.${method}`};
this.clients.forEach(function each(client: any) {
client.send(JSON.stringify(response));
});
}
returnDynamic(results :any, type :any) {
const response : standardResponse = {status :0, data: results, message: "OK", type: type};
this.clients.forEach(function each(client :any) {
returnDynamic(results: any, type: any) {
const response: standardResponse = {status: 0, data: results, message: "OK", type: type};
this.clients.forEach(function each(client: any) {
client.send(JSON.stringify(response));
});
}
returnLyrics(results :any) {
const response : standardResponse = {status :0, data: results, message: "OK", type: "lyrics"};
this.clients.forEach(function each(client :any) {
returnLyrics(results: any) {
const response: standardResponse = {status: 0, data: results, message: "OK", type: "lyrics"};
this.clients.forEach(function each(client: any) {
client.send(JSON.stringify(response));
});
}
returnSearch(results :any) {
const response : standardResponse = {status :0, data: results, message: "OK", type: "searchResults"};
this.clients.forEach(function each(client :any) {
returnSearch(results: any) {
const response: standardResponse = {status: 0, data: results, message: "OK", type: "searchResults"};
this.clients.forEach(function each(client: any) {
client.send(JSON.stringify(response));
});
}
returnSearchLibrary(results :any) {
const response: standardResponse = {status :0, data :results, message:"OK", type:"searchResultsLibrary"};
this.clients.forEach(function each(client :any) {
returnSearchLibrary(results: any) {
const response: standardResponse = {status: 0, data: results, message: "OK", type: "searchResultsLibrary"};
this.clients.forEach(function each(client: any) {
client.send(JSON.stringify(response));
});
}
returnQueue(queue :any) {
const response : standardResponse = {status :0,data :queue, message:"OK", type:"queue"};
this.clients.forEach(function each(client :any) {
returnQueue(queue: any) {
const response: standardResponse = {status: 0, data: queue, message: "OK", type: "queue"};
this.clients.forEach(function each(client: any) {
client.send(JSON.stringify(response));
});
}

View file

@ -54,6 +54,7 @@ app.on('ready', () => {
win.on("ready-to-show", () => {
Cider.bwCreated();
console.debug('[Cider] Window is Ready.')
CiderPlug.callPlugins('onReady', win);
});
});

View file

@ -16,17 +16,18 @@ export default class ChromecastPlugin {
private audioClient = require('castv2-client').Client;
private mdns = require('mdns-js');
private devices : any = [];
private castDevices : any = [];
private devices: any = [];
private castDevices: any = [];
// private GCRunning = false;
// private GCBuffer: any;
// private expectedConnections = 0;
// private currentConnections = 0;
private activeConnections : any = [];
private activeConnections: any = [];
// private requests = [];
// private GCstream = new Stream.PassThrough(),
private connectedHosts : any = {};
private connectedHosts: any = {};
private connectedPlayer: any;
// private port = false;
// private server = false;
// private bufcount = 0;
@ -40,7 +41,7 @@ export default class ChromecastPlugin {
let browser = this.mdns.createBrowser(this.mdns.tcp('googlecast'));
browser.on('ready', browser.discover);
browser.on('update', (service :any) => {
browser.on('update', (service: any) => {
if (service.addresses && service.fullname && service.fullname.includes('_googlecast._tcp')) {
this.ondeviceup(service.addresses[0], service.fullname.substring(0, service.fullname.indexOf("._googlecast")) + " " + (service.type[0].description ?? ""), '', 'googlecast');
}
@ -48,7 +49,7 @@ export default class ChromecastPlugin {
const Client = require('node-ssdp').Client;
// also do a SSDP/UPnP search
let ssdpBrowser = new Client();
ssdpBrowser.on('response', (headers :any , statusCode : any, rinfo: any) => {
ssdpBrowser.on('response', (headers: any, statusCode: any, rinfo: any) => {
var location = getLocation(headers);
if (location != null) {
this.getServiceDescription(location, rinfo.address);
@ -58,8 +59,11 @@ export default class ChromecastPlugin {
function getLocation(headers: any) {
let location = null;
if (headers["LOCATION"] != null ){location = headers["LOCATION"]}
else if (headers["Location"] != null ){location = headers["Location"]}
if (headers["LOCATION"] != null) {
location = headers["LOCATION"]
} else if (headers["Location"] != null) {
location = headers["Location"]
}
return location;
}
@ -85,7 +89,7 @@ export default class ChromecastPlugin {
}
}
private getServiceDescription(url:any, address:any) {
private getServiceDescription(url: any, address: any) {
const request = require('request');
request.get(url, (error: any, response: any, body: any) => {
if (!error && response.statusCode === 200) {
@ -95,7 +99,7 @@ export default class ChromecastPlugin {
}
private ondeviceup(host: any, name: any, location: any, type: any) {
if (this.castDevices.findIndex((item:any) => item.host === host && item.name === name && item.location === location && item.type === type) === -1) {
if (this.castDevices.findIndex((item: any) => item.host === host && item.name === name && item.location === location && item.type === type) === -1) {
this.castDevices.push({
name: name,
host: host,
@ -181,24 +185,36 @@ export default class ChromecastPlugin {
// send websocket ip
player.sendIp("ws://"+this.getIp()+":26369");
player.sendIp("ws://" + this.getIp() + ":26369");
electron.ipcMain.on('stopGCast', (_event) => {
player.kill();
})
electron.app.on('before-quit', (_event) => {
player.kill();
})
});
}
private getIp() {
let ip = false;
private getIp(){
let ip: string = '';
let ip2: any = [];
let alias = 0;
let ifaces: any = os.networkInterfaces();
for (var dev in ifaces) {
ifaces[dev].forEach((details:any) => {
if (details.family === 'IPv4') {
const ifaces: any = os.networkInterfaces();
for (let dev in ifaces) {
ifaces[dev].forEach((details: any) => {
if (details.family === 'IPv4' && !details.internal) {
if (!/(loopback|vmware|internal|hamachi|vboxnet|virtualbox)/gi.test(dev + (alias ? ':' + alias : ''))) {
if (details.address.substring(0, 8) === '192.168.' ||
details.address.substring(0, 7) === '172.16.' ||
details.address.substring(0, 3) === '10.'
) {
ip = details.address;
if (!ip.startsWith('192.168.') ||
(ip2.startsWith('192.168.') && !ip.startsWith('192.168.')) &&
(ip2.startsWith('172.16.') && !ip.startsWith('192.168.') && !ip.startsWith('172.16.')) ||
(ip2.startsWith('10.') && !ip.startsWith('192.168.') && !ip.startsWith('172.16.') && !ip.startsWith('10.'))
){ip = details.address;}
++alias;
}
}
@ -273,7 +289,7 @@ export default class ChromecastPlugin {
}
}
private async setupGCServer(){
private async setupGCServer() {
return ''
}
@ -289,10 +305,9 @@ export default class ChromecastPlugin {
/**
* Runs on plugin load (Currently run on application start)
*/
constructor(app: any, store: any) {
this._app = app;
this._store = store
constructor(utils: { getApp: () => any; getStore: () => any; }) {
this._app = utils.getApp();
this._store = utils.getStore()
}
/**
@ -318,6 +333,11 @@ export default class ChromecastPlugin {
electron.ipcMain.on('stopGCast', (_event) => {
this._win.webContents.setAudioMuted(false);
this.activeConnections.forEach((client: any) => {
try{
client.stop();
} catch(e){}
})
this.activeConnections = [];
this.connectedHosts = {};

View file

@ -8,8 +8,8 @@ export default class DiscordRichPresence {
* Private variables for interaction in plugins
*/
private static _store: any;
private _app : any;
private _attributes : any;
private _app: any;
private _attributes: any;
private static _connection: boolean = false;
/**
@ -74,6 +74,12 @@ export default class DiscordRichPresence {
this.disconnect()
});
// If Discord is closed, allow reconnecting
this._client.transport.once('close', () => {
console.info(`[DiscordRichPresence] Connection closed`);
this.disconnect()
});
// Login to Discord
this._client.login({clientId})
.then(() => {
@ -86,12 +92,17 @@ export default class DiscordRichPresence {
* Disconnects from Discord RPC
*/
private disconnect() {
if (!this._client) return;
if (!this._client) {
return
}
this._client.destroy().then(() => {
DiscordRichPresence._connection = false;
console.log('[DiscordRPC][disconnect] Disconnected from discord.')
}).catch((e: any) => console.error(`[DiscordRPC][disconnect] ${e}`));
// Clean up, allow creating a new connection
this._client = null;
}
/**
@ -124,7 +135,7 @@ export default class DiscordRichPresence {
delete activity.largeImageText
}
activity.buttons.forEach((key: {label: string, url: string}, _v: Number) => {
activity.buttons.forEach((key: { label: string, url: string }, _v: Number) => {
if (key.url.includes('undefined') || key.url.includes('no-id-found')) {
activity.buttons.splice(key, 1);
}
@ -137,7 +148,13 @@ export default class DiscordRichPresence {
* @param {object} attributes
*/
private updateActivity(attributes: any) {
if (!this._client) return;
if (DiscordRichPresence._store.general.discord_rpc == 0) {
return
}
if (!this._client) {
this.connect(DiscordRichPresence._store.general.discord_rpc == 1 ? '911790844204437504' : '886578863147192350')
}
if (!DiscordRichPresence._connection) {
this._client.clearActivity().catch((e: any) => console.error(`[DiscordRichPresence][clearActivity] ${e}`));
@ -147,7 +164,7 @@ export default class DiscordRichPresence {
this._activity = {
details: attributes.name,
state: `${attributes.artistName ? `by ${attributes.artistName}` : ''}`,
startTimestamp: attributes.startTime,
startTimestamp: Date.now() - (attributes?.durationInMillis - attributes?.remainingTime),
endTimestamp: attributes.endTime,
largeImageKey: attributes?.artwork?.url?.replace('{w}', '1024').replace('{h}', '1024'),
largeImageText: attributes.albumName,
@ -193,10 +210,10 @@ export default class DiscordRichPresence {
/**
* Runs on plugin load (Currently run on application start)
*/
constructor(app: any, store: any) {
DiscordRichPresence._store = store
constructor(utils: { getStore: () => any; getApp: () => any; }) {
DiscordRichPresence._store = utils.getStore();
console.debug(`[Plugin][${this.name}] Loading Complete.`);
this._app = app;
this._app = utils.getApp();
}
/**
@ -207,18 +224,18 @@ export default class DiscordRichPresence {
this.connect((DiscordRichPresence._store.general.discord_rpc == 1) ? '911790844204437504' : '886578863147192350');
console.debug(`[Plugin][${this.name}] Ready.`);
ipcMain.on('updateRPCImage', (_event, imageurl) => {
if (!DiscordRichPresence._store.general.privateEnabled){
fetch('https://api.cider.sh/v1/images' ,{
if (!DiscordRichPresence._store.general.privateEnabled) {
fetch('https://api.cider.sh/v1/images', {
method: 'POST',
body: JSON.stringify({url : imageurl}),
body: JSON.stringify({url: imageurl}),
headers: {
'Content-Type': 'application/json',
'User-Agent': _win.webContents.getUserAgent()
},
})
.then(res => res.json())
.then(function(json){
.then(function (json) {
self._attributes["artwork"]["url"] = json.url
self.updateActivity(self._attributes)
})
@ -238,9 +255,10 @@ export default class DiscordRichPresence {
* @param attributes Music Attributes (attributes.status = current state)
*/
onPlaybackStateDidChange(attributes: object): void {
if (!DiscordRichPresence._store.general.privateEnabled){
if (!DiscordRichPresence._store.general.privateEnabled) {
this._attributes = attributes
this.updateActivity(attributes)}
this.updateActivity(attributes)
}
}
/**
@ -248,8 +266,9 @@ export default class DiscordRichPresence {
* @param attributes Music Attributes
*/
onNowPlayingItemDidChange(attributes: object): void {
if (!DiscordRichPresence._store.general.privateEnabled){
if (!DiscordRichPresence._store.general.privateEnabled) {
this._attributes = attributes
this.updateActivity(attributes)}
this.updateActivity(attributes)
}
}
}

View file

@ -120,7 +120,7 @@ export default class LastFMPlugin {
} else {
return console.log('[LastFM] Did not add ', attributes.name, '—', artist, 'because now playing a other song.');
}
}, Math.round(attributes.durationInMillis * Math.min((self._store.lastfm.scrobble_after / 100),0.8)));
}, Math.round(attributes.durationInMillis * Math.min((self._store.lastfm.scrobble_after / 100), 0.8)));
}
private async updateNowPlayingSong(attributes: any) {
@ -207,10 +207,10 @@ export default class LastFMPlugin {
/**
* Runs on plugin load (Currently run on application start)
*/
constructor(app: any, store: any) {
this._app = app;
this._store = store
electron.app.on('second-instance', (_e: any, argv: any) => {
constructor(utils: { getApp: () => any; getStore: () => any; }) {
this._app = utils.getApp();
this._store = utils.getStore()
utils.getApp().on('second-instance', (_e: any, argv: any) => {
// Checks if first instance is authorized and if second instance has protocol args
argv.forEach((value: any) => {
if (value.includes('auth')) {
@ -264,14 +264,15 @@ export default class LastFMPlugin {
* @param attributes Music Attributes
*/
nowPlayingItemDidChangeLastFM(attributes: any): void {
if (!this._store.general.privateEnabled){
if (!this._store.general.privateEnabled) {
attributes.status = true
if (!this._store.lastfm.filterLoop) {
this._lastfm.cachedNowPlayingAttributes = false;
this._lastfm.cachedAttributes = false
}
this.updateNowPlayingSong(attributes)
this.scrobbleSong(attributes)}
this.scrobbleSong(attributes)
}
}
}

View file

@ -1,4 +1,5 @@
import {app, Menu, shell} from "electron";
import {utils} from "../base/utils";
export default class Thumbar {
/**
@ -34,7 +35,7 @@ export default class Thumbar {
* @private
*/
private isMac: boolean = process.platform === 'darwin';
private menubarTemplate: any = [
private _menuTemplate: any = [
{
label: app.getName(),
submenu: [
@ -42,20 +43,20 @@ export default class Thumbar {
label: 'About',
click: () => this._win.webContents.executeJavaScript(`app.appRoute('about')`)
},
{ type: 'separator' },
{type: 'separator'},
{
label: 'Settings',
accelerator: 'CommandOrControl+,',
click: () => this._win.webContents.executeJavaScript(`app.appRoute('settings')`)
},
{ type: 'separator' },
{ role: 'services' },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideOthers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
{type: 'separator'},
{role: 'services'},
{type: 'separator'},
{role: 'hide'},
{role: 'hideOthers'},
{role: 'unhide'},
{type: 'separator'},
{role: 'quit'}
]
},
{
@ -76,22 +77,28 @@ export default class Thumbar {
label: 'Window',
submenu: [
{role: 'minimize'},
{
label: 'Show',
click: () => utils.getWindow().show()
},
{role: 'zoom'},
...(this.isMac ? [
{type: 'separator'},
{role: 'front'},
{role: 'close'},
] : [
{role: 'close'}
{role: 'close'},
]),
{
label: 'Edit',
submenu: [
{ role: 'undo' },
{ role: 'redo' },
{ type: 'separator' },
{ role: 'cut' },
{ role: 'copy' },
{ role: 'paste' },
{role: 'undo'},
{role: 'redo'},
{type: 'separator'},
{role: 'cut'},
{role: 'copy'},
{role: 'paste'},
]
},
{type: 'separator'},
@ -132,7 +139,7 @@ export default class Thumbar {
accelerator: 'CommandOrControl+Left',
click: () => this._win.webContents.executeJavaScript(`MusicKitInterop.previous()`)
},
{ type: 'separator' },
{type: 'separator'},
{
label: 'Volume Up',
accelerator: 'CommandOrControl+Up',
@ -142,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`)
}
]
},
@ -214,9 +227,9 @@ export default class Thumbar {
/**
* Runs on plugin load (Currently run on application start)
*/
constructor(app: any, store: any) {
this._app = app;
this._store = store
constructor(utils: { getApp: () => any; getStore: () => any; }) {
this._app = utils.getApp();
this._store = utils.getStore();
console.debug(`[Plugin][${this.name}] Loading Complete.`);
}
@ -225,7 +238,8 @@ export default class Thumbar {
*/
onReady(win: Electron.BrowserWindow): void {
this._win = win;
Menu.setApplicationMenu(Menu.buildFromTemplate(this.menubarTemplate))
const menu = Menu.buildFromTemplate(this._menuTemplate);
Menu.setApplicationMenu(menu)
}
/**

View file

@ -1,12 +1,11 @@
// @ts-ignore
import * as Player from 'mpris-service';
export default class MPRIS {
export default class mpris {
/**
* Private variables for interaction in plugins
*/
private _win: any;
private _app: any;
private static utils: any;
/**
* Base Plugin Details (Eventually implemented into a GUI in settings)
@ -19,13 +18,13 @@ export default class MPRIS {
/**
* MPRIS Service
*/
private mpris: any;
private mprisEvents: Object = {
"playpause": "pausePlay",
"play": "pausePlay",
"pause": "pausePlay",
"next": "nextTrack",
"previous": "previousTrack",
private static player: Player.Player;
private static mprisEvents: Object = {
"playpause": "playPause",
"play": "play",
"pause": "pause",
"next": "next",
"previous": "previous",
}
/*******************************************************************************************
@ -34,13 +33,12 @@ export default class MPRIS {
/**
* Runs a media event
* @param type - pausePlay, nextTrack, PreviousTrack
* @param type - pausePlay, next, previous
* @private
*/
private runMediaEvent(type: string) {
if (this._win) {
this._win.webContents.executeJavaScript(`MusicKitInterop.${type}()`).catch(console.error)
}
private static runMediaEvent(type: string) {
console.debug(`[Plugin][${this.name}] ${type}.`);
mpris.utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.${type}()`).catch(console.error)
}
/**
@ -60,91 +58,89 @@ export default class MPRIS {
/**
* Connects to MPRIS Service
*/
@MPRIS.linuxOnly
private connect() {
this.mpris = Player({
name: 'Cider',
private static connect() {
const player = Player({
name: 'cider',
identity: 'Cider',
supportedUriSchemes: [],
supportedMimeTypes: [],
supportedInterfaces: ['player']
});
this.mpris = Object.assign(this.mpris, {
canQuit: true,
canControl: true,
canPause: true,
canPlay: true,
canGoNext: true,
active: true
})
console.debug(`[Plugin][${mpris.name}] Successfully connected.`);
const pos_atr = {durationInMillis: 0};
this.mpris.getPosition = function () {
player.getPosition = function () {
const durationInMicro = pos_atr.durationInMillis * 1000;
const percentage = parseFloat("0") || 0;
return durationInMicro * percentage;
}
for (const [key, value] of Object.entries(this.mprisEvents)) {
this.mpris.on(key, () => {
this.runMediaEvent(value)
for (const [key, value] of Object.entries(mpris.mprisEvents)) {
player.on(key, function () {
mpris.runMediaEvent(value)
});
}
player.on('quit', function () {
process.exit();
});
mpris.player = player;
}
/**
* Update MPRIS Player Attributes
* Update M.P.R.I.S Player Attributes
*/
@MPRIS.linuxOnly
private updatePlayer(attributes: any) {
private static updatePlayer(attributes: any) {
const MetaData = {
'mpris:trackid': this.mpris.objectPath(`track/${attributes.playParams.id.replace(/[.]+/g, "")}`),
'mpris:trackid': mpris.player.objectPath(`track/${attributes.playParams.id.replace(/[.]+/g, "")}`),
'mpris:length': attributes.durationInMillis * 1000, // In microseconds
'mpris:artUrl': (attributes.artwork.url.replace('/{w}x{h}bb', '/512x512bb')).replace('/2000x2000bb', '/35x35bb'),
'xesam:title': `${attributes.name}`,
'xesam:album': `${attributes.albumName}`,
'xesam:artist': [`${attributes.artistName}`,],
'xesam:artist': [`${attributes.artistName}`],
'xesam:genre': attributes.genreNames
}
if (this.mpris.metadata["mpris:trackid"] === MetaData["mpris:trackid"]) {
if (mpris.player.metadata["mpris:trackid"] === MetaData["mpris:trackid"]) {
return
}
this.mpris.metadata = MetaData
mpris.player.metadata = MetaData;
}
/**
* Update MPRIS Player State
* Update M.P.R.I.S Player State
* @private
* @param attributes
*/
@MPRIS.linuxOnly
private updatePlayerState(attributes: any) {
let status = 'Stopped';
if (attributes.status) {
status = 'Playing';
} else if (attributes.status === false) {
status = 'Paused';
private static updatePlayerState(attributes: any) {
switch (attributes.status) {
case true: // Playing
mpris.player.playbackStatus = Player.PLAYBACK_STATUS_PLAYING;
break;
case false: // Paused
mpris.player.playbackStatus = Player.PLAYBACK_STATUS_PAUSED;
break;
default:
mpris.player.playbackStatus = Player.PLAYBACK_STATUS_STOPPED;
break
}
if (this.mpris.playbackStatus === status) {
return
}
this.mpris.playbackStatus = status;
}
/**
* Clear state
* @private
*/
private clearState() {
this.mpris.metadata = {'mpris:trackid': '/org/mpris/MediaPlayer2/TrackList/NoTrack'}
this.mpris.playbackStatus = 'Stopped';
private static clearState() {
if (!mpris.player) {
return
}
mpris.player.metadata = {'mpris:trackid': '/org/mpris/MediaPlayer2/TrackList/NoTrack'}
mpris.player.playbackStatus = Player.PLAYBACK_STATUS_STOPPED;
}
@ -155,46 +151,55 @@ export default class MPRIS {
/**
* Runs on plugin load (Currently run on application start)
*/
constructor(app: any, _store: any) {
this._app = app;
console.debug(`[Plugin][${this.name}] Loading Complete.`);
constructor(utils: any) {
mpris.utils = utils
console.debug(`[Plugin][${mpris.name}] Loading Complete.`);
}
/**
* Runs on app ready
*/
onReady(win: any): void {
this._win = win;
console.debug(`[Plugin][${this.name}] Ready.`);
this.connect()
@mpris.linuxOnly
onReady(_: any): void {
console.debug(`[Plugin][${mpris.name}] Ready.`);
}
/**
* Renderer ready
*/
@mpris.linuxOnly
onRendererReady(): void {
mpris.connect()
}
/**
* Runs on app stop
*/
@mpris.linuxOnly
onBeforeQuit(): void {
console.debug(`[Plugin][${this.name}] Stopped.`);
try {
this.clearState()
}catch(e) {
console.error(e)
}
console.debug(`[Plugin][${mpris.name}] Stopped.`);
mpris.clearState()
}
/**
* Runs on playback State Change
* @param attributes Music Attributes (attributes.state = current state)
* @param attributes Music Attributes (attributes.status = current state)
*/
@mpris.linuxOnly
onPlaybackStateDidChange(attributes: object): void {
this.updatePlayerState(attributes)
console.debug(`[Plugin][${mpris.name}] onPlaybackStateDidChange.`);
mpris.updatePlayerState(attributes)
}
/**
* Runs on song change
* @param attributes Music Attributes
*/
@mpris.linuxOnly
onNowPlayingItemDidChange(attributes: object): void {
this.updatePlayer(attributes);
console.debug(`[Plugin][${mpris.name}] onMetadataDidChange.`);
mpris.updatePlayer(attributes);
}
}

View file

@ -47,7 +47,6 @@ export default class Thumbar {
/**
* Update the thumbnail toolbar
*/
@Thumbar.windowsOnly
private updateButtons(attributes: any) {
console.log(attributes)
@ -94,14 +93,15 @@ export default class Thumbar {
/**
* Runs on plugin load (Currently run on application start)
*/
constructor(app: any, _store: any) {
this._app = app;
constructor(utils: { getApp: () => any; }) {
this._app = utils.getApp();
console.debug(`[Plugin][${this.name}] Loading Complete.`);
}
/**
* Runs on app ready
*/
@Thumbar.windowsOnly
onReady(win: Electron.BrowserWindow): void {
this._win = win;
console.debug(`[Plugin][${this.name}] Ready.`);
@ -110,6 +110,7 @@ export default class Thumbar {
/**
* Runs on app stop
*/
@Thumbar.windowsOnly
onBeforeQuit(): void {
console.debug(`[Plugin][${this.name}] Stopped.`);
}
@ -118,6 +119,7 @@ export default class Thumbar {
* Runs on playback State Change
* @param attributes Music Attributes (attributes.status = current state)
*/
@Thumbar.windowsOnly
onPlaybackStateDidChange(attributes: object): void {
this.updateButtons(attributes)
}
@ -126,6 +128,7 @@ export default class Thumbar {
* Runs on song change
* @param attributes Music Attributes
*/
@Thumbar.windowsOnly
onNowPlayingItemDidChange(attributes: object): void {
this.updateButtons(attributes)
}

View file

@ -10,7 +10,7 @@ const MusicKitInterop = {
const attributes = MusicKitInterop.getAttributes()
if (MusicKitInterop.filterTrack(attributes, true, false)) {
global.ipcRenderer.send('playbackStateDidChange', attributes)
ipcRenderer.send('wsapi-updatePlaybackState', attributes);
global.ipcRenderer.send('wsapi-updatePlaybackState', attributes);
// if (typeof _plugins != "undefined") {
// _plugins.execute("OnPlaybackStateChanged", {Attributes: MusicKitInterop.getAttributes()})
// }
@ -24,6 +24,7 @@ const MusicKitInterop = {
/** wsapi */
MusicKit.getInstance().addEventListener(MusicKit.Events.nowPlayingItemDidChange, async () => {
console.log('nowPlayingItemDidChange')
const attributes = MusicKitInterop.getAttributes()
const trackFilter = MusicKitInterop.filterTrack(attributes, false, true)
@ -47,7 +48,7 @@ const MusicKitInterop = {
})
},
async modifyNamesOnLocale() {
if (app.mklang == '' || app.mklang == null) {
if (app.mklang === '' || app.mklang == null) {
return;
}
const mk = MusicKit.getInstance()
@ -56,17 +57,17 @@ const MusicKitInterop = {
return;
}
const id = nowPlayingItem?._songId ?? (nowPlayingItem?.songId ?? nowPlayingItem?.id)
if (id != null && id != -1) {
if (id != null && id !== -1) {
try{
const query = await mk.api.v3.music(`/v1${(((nowPlayingItem?._songId ?? nowPlayingItem?.songId) != null) && ((nowPlayingItem?._songId ?? nowPlayingItem?.songId) != -1)) ? `/catalog/${mk.storefrontId}/` : `/me/library/`}songs/${id}?l=${app.mklang}`);
const query = await mk.api.v3.music(`/v1${(((nowPlayingItem?._songId ?? nowPlayingItem?.songId) != null) && ((nowPlayingItem?._songId ?? nowPlayingItem?.songId) !== -1)) ? `/catalog/${mk.storefrontId}/` : `/me/library/`}songs/${id}?l=${app.mklang}`);
if (query?.data?.data[0]){
let attrs = query?.data?.data[0]?.attributes;
if (attrs?.name) { nowPlayingItem.attributes.name = attrs?.name ?? ''}
if (attrs?.albumName) { nowPlayingItem.attributes.albumName = attrs?.albumName ?? ''}
if (attrs?.artistName) { nowPlayingItem.attributes.artistName = attrs?.artistName ?? ''}
}} catch (e) { return;}
} else {return;}
}} catch (e) { }
} else {}
},
getAttributes: function () {
const mk = MusicKit.getInstance()
@ -75,7 +76,7 @@ const MusicKitInterop = {
const remainingTimeExport = mk.currentPlaybackTimeRemaining;
const attributes = (nowPlayingItem != null ? nowPlayingItem.attributes : {});
attributes.status = isPlayingExport ?? false;
attributes.status = isPlayingExport ?? null;
attributes.name = attributes?.name ?? 'no-title-found';
attributes.artwork = attributes?.artwork ?? {url: ''};
attributes.artwork.url = (attributes?.artwork?.url ?? '').replace(`{f}`, "png");
@ -120,7 +121,7 @@ const MusicKitInterop = {
},
play: () => {
MusicKit.getInstance().play().then(r => console.log(`[MusicKitInterop.play] ${r}`));
MusicKit.getInstance().play().catch(console.error);
},
pause: () => {
@ -131,22 +132,23 @@ const MusicKitInterop = {
if (MusicKit.getInstance().isPlaying) {
MusicKit.getInstance().pause();
} else if (MusicKit.getInstance().nowPlayingItem != null) {
MusicKit.getInstance().play().then(r => console.log(`[MusicKitInterop.playPause] Playing ${r}`));
MusicKit.getInstance().play().catch(console.error);
}
},
next: () => {
try {
app.prevButtonBackIndicator = false;
} catch (e) { }
if (MusicKit.getInstance().queue.nextPlayableItemIndex != -1 && MusicKit.getInstance().queue.nextPlayableItemIndex != null)
MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.nextPlayableItemIndex);
// MusicKit.getInstance().skipToNextItem().then(r => console.log(`[MusicKitInterop.next] Skipping to Next ${r}`));
// try {
// app.prevButtonBackIndicator = false;
// } catch (e) { }
// if (MusicKit.getInstance().queue.nextPlayableItemIndex != -1 && MusicKit.getInstance().queue.nextPlayableItemIndex != null)
// MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.nextPlayableItemIndex);
MusicKit.getInstance().skipToNextItem().then(r => console.log(`[MusicKitInterop.next] Skipping to Next ${r}`));
},
previous: () => {
if (MusicKit.getInstance().queue.previousPlayableItemIndex != -1 && MusicKit.getInstance().queue.previousPlayableItemIndex != null)
MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.previousPlayableItemIndex);
// if (MusicKit.getInstance().queue.previousPlayableItemIndex != -1 && MusicKit.getInstance().queue.previousPlayableItemIndex != null)
// MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.previousPlayableItemIndex);
MusicKit.getInstance().skipToPreviousItem().then(r => console.log(`[MusicKitInterop.previous] Skipping to Previous ${r}`));
}
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 300 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(0.30081,0,0,0.30081,-41.1651,-47.9227)">
<g transform="matrix(1.26848,0,0,1.26848,167,195.512)">
<circle cx="101" cy="102.5" r="79.5" style="fill:rgb(15,15,15);"/>
</g>
<g transform="matrix(0.260038,0,0,0.260038,167,195.511)">
<g id="Release.afdesign">
<g>
<path d="M501,21C765.367,21 980,235.633 980,500C980,764.367 765.367,979 501,979C236.633,979 22,764.367 22,500C22,235.633 236.633,21 501,21ZM501,169C683.684,169 832,317.316 832,500C832,682.684 683.684,831 501,831C318.316,831 170,682.684 170,500C170,317.316 318.316,169 501,169Z" style="fill:rgb(255,38,84);"/>
<path d="M501,224C653.053,224 776.5,347.447 776.5,499.5C776.5,651.553 653.053,775 501,775C348.947,775 225.5,651.553 225.5,499.5C225.5,347.447 348.947,224 501,224ZM589.165,492.207C595.163,495.672 595.163,504.328 589.165,507.793L439.502,594.256C433.502,597.722 426,593.392 426,586.463L426,413.537C426,406.608 433.502,402.278 439.502,405.744L589.165,492.207Z" style="fill:rgb(255,38,84);"/>
</g>
</g>
</g>
<g transform="matrix(10.0544,0,0,10.0544,472.765,384.95)">
<g transform="matrix(16,0,0,16,0,0)">
<path d="M0.705,-0.473C0.685,-0.641 0.558,-0.737 0.389,-0.737C0.197,-0.737 0.05,-0.602 0.05,-0.364C0.05,-0.126 0.195,0.01 0.389,0.01C0.576,0.01 0.688,-0.114 0.705,-0.248L0.549,-0.249C0.535,-0.171 0.474,-0.126 0.392,-0.126C0.281,-0.126 0.206,-0.208 0.206,-0.364C0.206,-0.515 0.28,-0.601 0.393,-0.601C0.477,-0.601 0.538,-0.553 0.549,-0.473L0.705,-0.473Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
<g transform="matrix(16,0,0,16,12.0341,0)">
<path d="M0.06,-0L0.212,-0L0.212,-0.545L0.06,-0.545L0.06,-0ZM0.136,-0.616C0.181,-0.616 0.218,-0.65 0.218,-0.692C0.218,-0.734 0.181,-0.769 0.136,-0.769C0.092,-0.769 0.055,-0.734 0.055,-0.692C0.055,-0.65 0.092,-0.616 0.136,-0.616Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
<g transform="matrix(16,0,0,16,16.3864,0)">
<path d="M0.261,0.009C0.349,0.009 0.395,-0.042 0.416,-0.087L0.423,-0.087L0.423,-0L0.572,-0L0.572,-0.727L0.421,-0.727L0.421,-0.454L0.416,-0.454C0.396,-0.498 0.352,-0.553 0.261,-0.553C0.141,-0.553 0.04,-0.46 0.04,-0.272C0.04,-0.089 0.137,0.009 0.261,0.009ZM0.309,-0.112C0.235,-0.112 0.195,-0.178 0.195,-0.273C0.195,-0.367 0.234,-0.432 0.309,-0.432C0.383,-0.432 0.424,-0.37 0.424,-0.273C0.424,-0.175 0.382,-0.112 0.309,-0.112Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
<g transform="matrix(16,0,0,16,26.5511,0)">
<path d="M0.309,0.011C0.444,0.011 0.535,-0.055 0.556,-0.156L0.416,-0.165C0.401,-0.124 0.362,-0.102 0.311,-0.102C0.236,-0.102 0.188,-0.152 0.188,-0.234L0.188,-0.234L0.559,-0.234L0.559,-0.276C0.559,-0.461 0.447,-0.553 0.303,-0.553C0.142,-0.553 0.038,-0.439 0.038,-0.27C0.038,-0.097 0.141,0.011 0.309,0.011ZM0.188,-0.328C0.191,-0.39 0.238,-0.44 0.305,-0.44C0.371,-0.44 0.417,-0.393 0.417,-0.328L0.188,-0.328Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
<g transform="matrix(16,0,0,16,36.1136,0)">
<path d="M0.06,-0L0.212,-0L0.212,-0.309C0.212,-0.376 0.261,-0.422 0.327,-0.422C0.348,-0.422 0.377,-0.418 0.391,-0.414L0.391,-0.548C0.378,-0.551 0.359,-0.553 0.344,-0.553C0.283,-0.553 0.233,-0.518 0.213,-0.45L0.207,-0.45L0.207,-0.545L0.06,-0.545L0.06,-0Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
</g>
</g>
<g transform="matrix(-0.0132579,-1.62362e-18,-1.62362e-18,0.0132579,288.703,42.7877)">
<g id="g3003">
<path id="path3005" d="M1611,832C1611,796.667 1598.67,766.667 1574,742L923,91C897.667,65.667 867.333,53 832,53C796,53 766,65.667 742,91L91,742C65.667,766 53,796 53,832C53,867.333 65.667,897.667 91,923L165,998C191,1022.67 221.333,1035 256,1035C291.333,1035 321.333,1022.67 346,998L832,512L1318,998C1342.67,1022.67 1372.67,1035 1408,1035C1442.67,1035 1473,1022.67 1499,998L1574,923C1598.67,897 1611,866.667 1611,832Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 300 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(0.30081,0,0,0.30081,-41.1651,-47.9227)">
<g transform="matrix(1.26848,0,0,1.26848,167,195.512)">
<circle cx="101" cy="102.5" r="79.5" style="fill:rgb(15,15,15);"/>
</g>
<g transform="matrix(0.260038,0,0,0.260038,167,195.511)">
<g id="Release.afdesign">
<g>
<path d="M501,21C765.367,21 980,235.633 980,500C980,764.367 765.367,979 501,979C236.633,979 22,764.367 22,500C22,235.633 236.633,21 501,21ZM501,169C683.684,169 832,317.316 832,500C832,682.684 683.684,831 501,831C318.316,831 170,682.684 170,500C170,317.316 318.316,169 501,169Z" style="fill:rgb(255,38,84);"/>
<path d="M501,224C653.053,224 776.5,347.447 776.5,499.5C776.5,651.553 653.053,775 501,775C348.947,775 225.5,651.553 225.5,499.5C225.5,347.447 348.947,224 501,224ZM589.165,492.207C595.163,495.672 595.163,504.328 589.165,507.793L439.502,594.256C433.502,597.722 426,593.392 426,586.463L426,413.537C426,406.608 433.502,402.278 439.502,405.744L589.165,492.207Z" style="fill:rgb(255,38,84);"/>
</g>
</g>
</g>
<g transform="matrix(10.0544,0,0,10.0544,472.765,384.95)">
<g transform="matrix(16,0,0,16,0,0)">
<path d="M0.705,-0.473C0.685,-0.641 0.558,-0.737 0.389,-0.737C0.197,-0.737 0.05,-0.602 0.05,-0.364C0.05,-0.126 0.195,0.01 0.389,0.01C0.576,0.01 0.688,-0.114 0.705,-0.248L0.549,-0.249C0.535,-0.171 0.474,-0.126 0.392,-0.126C0.281,-0.126 0.206,-0.208 0.206,-0.364C0.206,-0.515 0.28,-0.601 0.393,-0.601C0.477,-0.601 0.538,-0.553 0.549,-0.473L0.705,-0.473Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
<g transform="matrix(16,0,0,16,12.0341,0)">
<path d="M0.06,-0L0.212,-0L0.212,-0.545L0.06,-0.545L0.06,-0ZM0.136,-0.616C0.181,-0.616 0.218,-0.65 0.218,-0.692C0.218,-0.734 0.181,-0.769 0.136,-0.769C0.092,-0.769 0.055,-0.734 0.055,-0.692C0.055,-0.65 0.092,-0.616 0.136,-0.616Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
<g transform="matrix(16,0,0,16,16.3864,0)">
<path d="M0.261,0.009C0.349,0.009 0.395,-0.042 0.416,-0.087L0.423,-0.087L0.423,-0L0.572,-0L0.572,-0.727L0.421,-0.727L0.421,-0.454L0.416,-0.454C0.396,-0.498 0.352,-0.553 0.261,-0.553C0.141,-0.553 0.04,-0.46 0.04,-0.272C0.04,-0.089 0.137,0.009 0.261,0.009ZM0.309,-0.112C0.235,-0.112 0.195,-0.178 0.195,-0.273C0.195,-0.367 0.234,-0.432 0.309,-0.432C0.383,-0.432 0.424,-0.37 0.424,-0.273C0.424,-0.175 0.382,-0.112 0.309,-0.112Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
<g transform="matrix(16,0,0,16,26.5511,0)">
<path d="M0.309,0.011C0.444,0.011 0.535,-0.055 0.556,-0.156L0.416,-0.165C0.401,-0.124 0.362,-0.102 0.311,-0.102C0.236,-0.102 0.188,-0.152 0.188,-0.234L0.188,-0.234L0.559,-0.234L0.559,-0.276C0.559,-0.461 0.447,-0.553 0.303,-0.553C0.142,-0.553 0.038,-0.439 0.038,-0.27C0.038,-0.097 0.141,0.011 0.309,0.011ZM0.188,-0.328C0.191,-0.39 0.238,-0.44 0.305,-0.44C0.371,-0.44 0.417,-0.393 0.417,-0.328L0.188,-0.328Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
<g transform="matrix(16,0,0,16,36.1136,0)">
<path d="M0.06,-0L0.212,-0L0.212,-0.309C0.212,-0.376 0.261,-0.422 0.327,-0.422C0.348,-0.422 0.377,-0.418 0.391,-0.414L0.391,-0.548C0.378,-0.551 0.359,-0.553 0.344,-0.553C0.283,-0.553 0.233,-0.518 0.213,-0.45L0.207,-0.45L0.207,-0.545L0.06,-0.545L0.06,-0Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
</g>
</g>
<g transform="matrix(0.0132579,0,0,-0.0132579,266.642,57.2123)">
<g id="g3003">
<path id="path3005" d="M1611,832C1611,796.667 1598.67,766.667 1574,742L923,91C897.667,65.667 867.333,53 832,53C796,53 766,65.667 742,91L91,742C65.667,766 53,796 53,832C53,867.333 65.667,897.667 91,923L165,998C191,1022.67 221.333,1035 256,1035C291.333,1035 321.333,1022.67 346,998L832,512L1318,998C1342.67,1022.67 1372.67,1035 1408,1035C1442.67,1035 1473,1022.67 1499,998L1574,923C1598.67,897 1611,866.667 1611,832Z" style="fill:rgb(235,235,235);fill-rule:nonzero;"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View file

@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="300">
<title>dark blue star</title>
<g display="inline">
<title>Layer 1</title>
<g id="layer1">
<path fill="#edf2f7" stroke="#ebeff4" stroke-width="0" stroke-linejoin="round" stroke-miterlimit="4" id="path4968" d="m239.381653,284.769073l-88.929474,-65.136902l-88.903381,65.236145l34.561218,-104.601654l-89.610046,-64.294891l110.283875,0.496246l33.537506,-104.96814l33.60675,104.913116l110.317139,-0.588898l-89.513672,64.339386l34.650085,104.605591z"/>
<path fill="#edf2f7" stroke="#ebeff4" stroke-width="0" stroke-linejoin="round" stroke-miterlimit="4" id="path4960" d="m150.317963,11.500015l-33.534088,104.967941l-110.283875,-0.489197l89.606323,64.291809l-34.555267,104.604431l88.8927,-65.241547l0.671539,0.489166l0,-206.135345l-0.797333,-2.487259l0,0z"/>
</g>
</g>
<g>
<title>spear</title>
</g>
</svg>

After

Width:  |  Height:  |  Size: 883 B

View file

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 112.197 112.197" style="enable-background:new 0 0 112.197 112.197;" xml:space="preserve">
<g>
<circle style="fill:#55ACEE;" cx="56.099" cy="56.098" r="56.098"/>
<g>
<path style="fill:#F1F2F2;" d="M90.461,40.316c-2.404,1.066-4.99,1.787-7.702,2.109c2.769-1.659,4.894-4.284,5.897-7.417
c-2.591,1.537-5.462,2.652-8.515,3.253c-2.446-2.605-5.931-4.233-9.79-4.233c-7.404,0-13.409,6.005-13.409,13.409
c0,1.051,0.119,2.074,0.349,3.056c-11.144-0.559-21.025-5.897-27.639-14.012c-1.154,1.98-1.816,4.285-1.816,6.742
c0,4.651,2.369,8.757,5.965,11.161c-2.197-0.069-4.266-0.672-6.073-1.679c-0.001,0.057-0.001,0.114-0.001,0.17
c0,6.497,4.624,11.916,10.757,13.147c-1.124,0.308-2.311,0.471-3.532,0.471c-0.866,0-1.705-0.083-2.523-0.239
c1.706,5.326,6.657,9.203,12.526,9.312c-4.59,3.597-10.371,5.74-16.655,5.74c-1.08,0-2.15-0.063-3.197-0.188
c5.931,3.806,12.981,6.025,20.553,6.025c24.664,0,38.152-20.432,38.152-38.153c0-0.581-0.013-1.16-0.039-1.734
C86.391,45.366,88.664,43.005,90.461,40.316L90.461,40.316z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -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,
@ -26,90 +26,93 @@ const CiderAudio = {
}
}, 1000);
},
off: function(){
try{
try{
CiderAudio.audioNodes.gainNode.disconnect(); } catch(e){}
try{ CiderAudio.audioNodes.spatialNode.disconnect();} catch(e){}
try{
for (var i of CiderAudio.audioNodes.analogWarmth){
i.disconnect();
}
for (var i of CiderAudio.audioNodes.llpw){
i.disconnect();
}
for (var i of CiderAudio.audioNodes.vibrantbassNode){
i.disconnect();
}
for (var i of CiderAudio.audioNodes.audioBands){
i.disconnect();
}
} catch(e){}
try{
off: function () {
try {
CiderAudio.hierarchical_unloading();
try {
CiderAudio.audioNodes = {
gainNode : null,
spatialNode : null,
gainNode: null,
spatialNode: null,
spatialInput: null,
audioBands : null,
audioBands: null,
vibrantbassNode: null,
llpw: null,
analogWarmth: null
}
} catch (e) {}
CiderAudio.source.connect(CiderAudio.context.destination);} catch(e){}
} catch (e) { }
CiderAudio.source.connect(CiderAudio.context.destination);
} catch (e) { }
},
connectContext: function (mediaElem) {
if (!CiderAudio.context) {
CiderAudio.context = new window.AudioContext({sampleRate: 96000}); // Don't ever remove the sample rate arg. Ask Maikiwi.
}
if (!CiderAudio.source){
if (!CiderAudio.source) {
CiderAudio.source = CiderAudio.context.createMediaElementSource(mediaElem);
} else {try{CiderAudio.source.disconnect(CiderAudio.context.destination)}catch(e){}}
} 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.equalizer();
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_Conv.wav').then(async (impulseData) => {
let bufferedImpulse = await impulseData.arrayBuffer();
CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);
CiderAudio.audioNodes.spatialNode.normalize = false;
let spatialProfile = CiderAudio.spatialProfiles.find(function (profile) {
return profile.id === app.cfg.audio.maikiwiAudio.spatialProfile;
});
break;
case 1:
fetch('./audio/impulses/CiderSpatial_Conv_v2.wav').then(async (impulseData) => {
let bufferedImpulse = await impulseData.arrayBuffer();
CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);
});
break;
default:
fetch('./audio/impulses/CiderSpatial_Conv.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 (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);
@ -129,12 +132,12 @@ const CiderAudio = {
};
CiderAudio.audioNodes.spatialNode.setRoomProperties(roomDimensions, roomMaterials);
CiderAudio.audioNodes.spatialInput = CiderAudio.audioNodes.spatialNode.createSource();
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);}
}
},
spatialOff: function (){
spatialOff: function () {
CiderAudio.hierarchical_loading();
},
sendAudio: function (){
sendAudio: function () {
if (!CiderAudio.ccON) {
CiderAudio.ccON = true
let searchInt = setInterval(async function () {
@ -265,7 +268,9 @@ const CiderAudio = {
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;
@ -278,59 +283,92 @@ const CiderAudio = {
clearInterval(searchInt);
}
}, 1000);
} else {if (CiderAudio.audioNodes.recorderNode != null && CiderAudio.context != null) {
} 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 = []
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].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;
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;
}
for (let i = 1; i < WARMTH_FREQUENCIES.length; i ++) {
CiderAudio.audioNodes.analogWarmth[i-1].connect(CiderAudio.audioNodes.analogWarmth[i]);
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) { }
break;
}
}
},
llpw_h2_2: function (status, hierarchy){
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];
@ -340,64 +378,111 @@ const CiderAudio = {
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) {
switch (app.cfg.audio.maikiwiAudio.ciderPPE_value) {
case "MAIKIWI":
CiderAudio.audioNodes.llpw[0] = CiderAudio.context.createConvolver();
CiderAudio.audioNodes.llpw[0].normalize = false;
fetch('./audio/impulses/CAP_Maikiwi.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 - MaikiwiSignature Mode");
break;
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 "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].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]);
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){}
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){}
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;
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]);
}
default:
CiderAudio.audioNodes.llpw[0] = CiderAudio.context.createConvolver();
CiderAudio.audioNodes.llpw[0].normalize = false;
fetch('./audio/impulses/CAP_Maikiwi.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[LLPW_FREQUENCIES.length-1].connect(CiderAudio.audioNodes.vibrantbassNode[0]);} catch(e){}
try { CiderAudio.audioNodes.llpw[0].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){}
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 - Classic Mode");
app.cfg.audio.maikiwiAudio.ciderPPE_value = "MAIKIWI";
console.debug("[Cider][Audio] CAP - MaikiwiSignature Mode (Defaulted from broki config)");
break;
}
}
},
vibrantbass_h2_1: function (status){
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;
@ -407,36 +492,234 @@ const CiderAudio = {
for (let i = 0; i < VIBRANTBASSBANDS.length; i++) {
CiderAudio.audioNodes.vibrantbassNode[i] = CiderAudio.context.createBiquadFilter();
CiderAudio.audioNodes.vibrantbassNode[i].type = 'peaking'; // 'peaking';
CiderAudio.audioNodes.vibrantbassNode[i].frequency.value = VIBRANTBASSBANDS[i];
CiderAudio.audioNodes.vibrantbassNode[i].frequency.value = VIBRANTBASSBANDS[i] ;
CiderAudio.audioNodes.vibrantbassNode[i].Q.value = VIBRANTBASSQ[i];
CiderAudio.audioNodes.vibrantbassNode[i].gain.value = VIBRANTBASSGAIN[i] * app.cfg.audio.maikiwiAudio.vibrantBass.multiplier;
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]);
}
CiderAudio.audioNodes.vibrantbassNode[VIBRANTBASSBANDS.length-1].connect(CiderAudio.audioNodes.audioBands[0]);
}
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) { }
break;
CiderAudio.audioNodes.vibrantbassNode[0].connect(CiderAudio.audioNodes.audioBands[0])
}
}
},
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){}
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 (app.cfg.audio.maikiwiAudio.vibrantBass.multiplier !== 0) { // Vibrant Bass
CiderAudio.vibrantbass_h2_1(true)
if (Math.max(...app.cfg.audio.equalizer.gain) != 0) {
CiderAudio.equalizer(true, 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.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]);
console.debug('[Cider][Audio] Equalizer, Vibrant Bass, CAP, Analog Warmth, Maikiwi Spatial')
}
else { // Vibrant Bass, CAP, Analog Warmth, Spatial
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')
}
}
else {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Equalizer, Vibrant Bass, CAP, Analog Warmth')
}
}
else {
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.llpw[0]);
app.cfg.audio.normalization = true
console.debug('[Cider][Audio] Equalizer, Vibrant Bass, CAP, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] Equalizer, Vibrant Bass, CAP, Spatial')
}
}
else {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] Equalizer, Vibrant Bass, CAP')
}
}
}
else {
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) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Equalizer, Vibrant Bass, Analog Warmth, Maikiwi Spatial')
}
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')
}
}
else {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Equalizer, Vibrant Bass, Analog Warmth')
}
}
else {
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]);
console.debug('[Cider][Audio] Equalizer, Vibrant Bass, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.debug('[Cider][Audio] Equalizer, Vibrant Bass, Spatial')
}
}
else {
app.cfg.audio.normalization = true;
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.vibrantbassNode[0]);
console.debug('[Cider][Audio] Equalizer, Vibrant Bass')
}
}
}
}
// Vibrant Bass ends here
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) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] Equalizer, CAP, Analog Warmth, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Equalizer, CAP, Analog Warmth, Spatial')
}
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Equalizer, CAP and Analog Warmth')
}
}
else {
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.llpw[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] Equalizer, CAP, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] Equalizer, CAP, Spatial')
}
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.llpw[0]);
console.debug('[Cider][Audio] Equalizer, CAP')
}
}
} // CAP ends here
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) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] Equalizer, Analog Warmth, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Equalizer, Analog Warmth, Spatial')
}
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.analogWarmth[0]);
console.debug('[Cider][Audio] Equalizer, Analog Warmth')
}
}
else {
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.audioBands[0]);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] Equalizer, Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]);
console.debug('[Cider][Audio] Equalizer, Spatial')
}
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]);
console.debug('[Cider][Audio] Equalizer')
}
}
}
}
}
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);
@ -464,7 +747,7 @@ const CiderAudio = {
console.debug('[Cider][Audio] Vibrant Bass, CAP, Analog Warmth')
}
}
else {
else { // if (app.cfg.audio.maikiwiAudio.analogWarmth) !== true
if (app.cfg.audio.spatial === true) {
if (app.cfg.audio.maikiwiAudio.spatial === true) {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialNode);
@ -533,7 +816,7 @@ const CiderAudio = {
// Vibrant Bass ends here
else {
if (app.cfg.audio.maikiwiAudio.ciderPPE === true) {
CiderAudio.llpw_h2_2(true, 1);
CiderAudio.llpw_h2_2(true, 0);
if (app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.analogWarmth_h2_3(true, 3);
@ -578,7 +861,7 @@ const CiderAudio = {
} // CAP ends here
else {
if (app.cfg.audio.maikiwiAudio.analogWarmth === true) {
CiderAudio.analogWarmth_h2_3(true, 1);
CiderAudio.analogWarmth_h2_3(true, 0);
if (app.cfg.audio.spatial === true) {
if (app.cfg.audio.maikiwiAudio.spatial === true) {
@ -602,35 +885,35 @@ const CiderAudio = {
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.audioBands[0]);
CiderAudio.audioNodes.spatialNode.connect(CiderAudio.context.destination);
app.cfg.audio.normalization = true;
console.debug('[Cider][Audio] Maikiwi Spatial')
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.spatialInput.input);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.audioNodes.audioBands[0]);
CiderAudio.audioNodes.spatialNode.output.connect(CiderAudio.context.destination);
console.debug('[Cider][Audio] Spatial')
}
}
else {
CiderAudio.audioNodes.gainNode.connect(CiderAudio.audioNodes.audioBands[0]);
console.debug('[Cider][Audio] Direct Mode to Equalizer')
CiderAudio.audioNodes.gainNode.connect(CiderAudio.context.destination);
console.debug('[Cider][Audio] Literal Nothing')
}
}
}
}
}
console.debug("[Cider][Audio] Finished hierarchical loading");
},
equalizer: function (){ // h1_1
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 = [];
for (let i = 0; i < BANDS.length; i++) {
CiderAudio.audioNodes.audioBands[i] = CiderAudio.context.createBiquadFilter();
CiderAudio.audioNodes.audioBands[i].type = 'peaking'; // 'peaking';
@ -639,12 +922,19 @@ const CiderAudio = {
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]);
}
CiderAudio.audioNodes.audioBands[BANDS.length-1].connect(CiderAudio.context.destination);
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}
export { CiderAudio }

Binary file not shown.

Binary file not shown.

View file

@ -105,6 +105,9 @@ function fallbackinitMusicKit() {
})
setTimeout(() => {
app.init()
if(app.cfg.visual.window_background_style == "mica" && !app.isDev) {
app.spawnMica()
}
}, 1000)
}
@ -131,6 +134,9 @@ document.addEventListener('musickitloaded', function () {
function waitForApp() {
if (typeof app.init !== "undefined") {
app.init()
if(app.cfg.visual.window_background_style == "mica" && !app.isDev) {
app.spawnMica()
}
}
else {
setTimeout(waitForApp, 250);

File diff suppressed because it is too large Load diff

2638
src/renderer/less/bootstrap-vue.min.less vendored Normal file

File diff suppressed because it is too large Load diff

6246
src/renderer/less/bootstrap.css vendored Normal file

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more