From 144127f1428193d4f105c1b9abe5c2e8528fa439 Mon Sep 17 00:00:00 2001 From: Amaru8 <52407090+Amaru8@users.noreply.github.com> Date: Mon, 25 Apr 2022 07:55:13 +0200 Subject: [PATCH] Added Playback Rate functionality (#933) * Add () to openAudioControls function call * Duplicate new placeholder modal * Add to app.modals * Make modal do something * Changed input to slider * Change i18n string name and remove con.log * Finalized i18n strings * Add to store.ts and update i18n hehe * Save rate to cfg * fuck off * AAHH * Make auto-set more reliable * no nightcore stuff here Co-authored-by: cryptofyre --- src/i18n/README.md | 7 ++- src/i18n/en_US.json | 3 ++ src/i18n/hu_HU.json | 3 ++ src/i18n/source/en_US.json | 3 ++ src/main/base/browserwindow.ts | 1 + src/main/base/store.ts | 1 + src/preload/cider-preload.js | 13 ++++++ src/renderer/main/vueapp.js | 1 + src/renderer/style.css | 4 ++ src/renderer/style.less | 5 +++ src/renderer/views/app/panels.ejs | 3 ++ .../views/components/audio-playbackrate.ejs | 43 +++++++++++++++++++ .../views/components/audio-settings.ejs | 11 ++++- src/renderer/views/pages/settings.ejs | 10 +++++ 14 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 src/renderer/views/components/audio-playbackrate.ejs diff --git a/src/i18n/README.md b/src/i18n/README.md index 74d864b2..98c4e36c 100644 --- a/src/i18n/README.md +++ b/src/i18n/README.md @@ -271,6 +271,12 @@ Update 22/04/2022 16:00 UTC * `settings.option.visual.theme.github.openfolder`: Added for `en_US` +Update 24/04/2022 19:00 UTC + +* `settings.option.audio.changePlaybackRate`: Added for `en_US` +* `settings.option.audio.playbackRate`: Added for `en_US` +* `settings.option.audio.playbackRate.change`: Added for `en_US` + Update 25/04/2022 00:21 UTC * `settings.description.search`: Added for `en_US` @@ -284,4 +290,3 @@ Update 25/04/2022 00:21 UTC * `settings.description.cast`: Added for `en_US` * `settings.description.settings`: Added for `en_US` * `settings.description.developer`: Added for `en_US` - diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index 1c3ad5ef..56cb0c9b 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -300,6 +300,9 @@ "settings.header.audio.description": "Adjust the audio settings for Cider.", "settings.option.audio.volumeStep": "Volume Step", "settings.option.audio.maxVolume": "Max Volume", + "settings.option.audio.changePlaybackRate": "Change Playback Rate", + "settings.option.audio.playbackRate": "Playback Rate", + "settings.option.audio.playbackRate.change": "Change", "settings.option.audio.quality": "Audio Quality", "settings.header.audio.quality.hireslossless": "Hi-Res Lossless", "settings.header.audio.quality.hireslossless.description": "up to 24-bit/192 kHz", diff --git a/src/i18n/hu_HU.json b/src/i18n/hu_HU.json index 3b5cd4ad..89db1fe3 100644 --- a/src/i18n/hu_HU.json +++ b/src/i18n/hu_HU.json @@ -289,6 +289,9 @@ "settings.header.audio.description": "A Cider hangbeállításainak módosítása.", "settings.option.audio.volumeStep": "Hangerő lépték", "settings.option.audio.maxVolume": "Maximum hangerő", + "settings.option.audio.changePlaybackRate": "Lejátszási sebesség módosítása", + "settings.option.audio.playbackRate": "Sebesség", + "settings.option.audio.playbackRate.change": "Módosítás", "settings.option.audio.quality": "Hangminőség", "settings.header.audio.quality.hireslossless": "Nagy felbontású veszteségmentes", "settings.header.audio.quality.hireslossless.description": "max. 24-bit/192 kHz sebességen", diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index 7f4c0d89..cb7cb1da 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -300,6 +300,9 @@ "settings.header.audio.description": "Adjust the audio settings for Cider.", "settings.option.audio.volumeStep": "Volume Step", "settings.option.audio.maxVolume": "Max Volume", + "settings.option.audio.changePlaybackRate": "Change Playback Rate", + "settings.option.audio.playbackRate": "Playback Rate", + "settings.option.audio.playbackRate.change": "Change", "settings.option.audio.quality": "Audio Quality", "settings.header.audio.quality.hireslossless": "Hi-Res Lossless", "settings.header.audio.quality.hireslossless.description": "up to 24-bit/192 kHz", diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index 0b08af18..f08f1c98 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -72,6 +72,7 @@ export class BrowserWindow { "components/audio-settings", "components/plugin-menu", "components/audio-controls", + "components/audio-playbackrate", "components/qrcode-modal", "components/moreinfo-modal", "components/equalizer", diff --git a/src/main/base/store.ts b/src/main/base/store.ts index 3436d807..fe9cd36e 100644 --- a/src/main/base/store.ts +++ b/src/main/base/store.ts @@ -68,6 +68,7 @@ export class Store { "maxVolume": 1, "lastVolume": 1, "muted": false, + "playbackRate": '1', "quality": "HIGH", "seamless_audio": true, "normalization": false, diff --git a/src/preload/cider-preload.js b/src/preload/cider-preload.js index 9074ffe1..309eb381 100644 --- a/src/preload/cider-preload.js +++ b/src/preload/cider-preload.js @@ -37,6 +37,12 @@ const MusicKitInterop = { if (trackFilter || !app.cfg.lastfm.filterLoop) { global.ipcRenderer.send('nowPlayingItemDidChangeLastFM', attributes); } + + if (MusicKit.getInstance().nowPlayingItem) { + await this.sleep(1000); + console.log("Auto-updating Playback Rate from " + MusicKit.getInstance().playbackRate + " x to " + app.cfg.audio.playbackRate + " x"); + MusicKit.getInstance().playbackRate = app.cfg.audio.playbackRate; + } }); MusicKit.getInstance().addEventListener(MusicKit.Events.authorizationStatusDidChange, () => { @@ -47,6 +53,13 @@ const MusicKitInterop = { console.warn(`[mediaPlaybackError] ${e}`); }) }, + + sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); + }, + async modifyNamesOnLocale() { if (app.mklang === '' || app.mklang == null) { return; diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index e58363c3..78937242 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -203,6 +203,7 @@ const app = new Vue({ audioSettings: false, pluginMenu: false, audioControls: false, + audioPlaybackRate: false, showPlaylist: false, castMenu: false, moreInfo: false, diff --git a/src/renderer/style.css b/src/renderer/style.css index 33e4b4db..180d1296 100644 --- a/src/renderer/style.css +++ b/src/renderer/style.css @@ -12954,6 +12954,10 @@ body[platform='darwin'] .app-chrome .app-chrome-item > .app-mainmenu { .percent::after { content: '%'; } +.playbackrate-text { + align-items: end; + margin-right: 5px; +} .spatialproperties-panel.modal-fullscreen { flex-direction: column; } diff --git a/src/renderer/style.less b/src/renderer/style.less index 133469dd..e5d7d66f 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -3294,6 +3294,11 @@ body[platform='darwin'] { content: '%'; } +.playbackrate-text { + align-items: end; + margin-right: 5px; +} + .modal .close { color: transparent; } diff --git a/src/renderer/views/app/panels.ejs b/src/renderer/views/app/panels.ejs index 2cbf16af..69a6f18e 100644 --- a/src/renderer/views/app/panels.ejs +++ b/src/renderer/views/app/panels.ejs @@ -19,6 +19,9 @@ + + + diff --git a/src/renderer/views/components/audio-playbackrate.ejs b/src/renderer/views/components/audio-playbackrate.ejs new file mode 100644 index 00000000..c50d5598 --- /dev/null +++ b/src/renderer/views/components/audio-playbackrate.ejs @@ -0,0 +1,43 @@ + + + \ No newline at end of file diff --git a/src/renderer/views/components/audio-settings.ejs b/src/renderer/views/components/audio-settings.ejs index a26ae1b3..c8e0c5d4 100644 --- a/src/renderer/views/components/audio-settings.ejs +++ b/src/renderer/views/components/audio-settings.ejs @@ -18,10 +18,15 @@
{{app.getLz('settings.option.audio.enableAdvancedFunctionality.audioSpatialization')}}
+ +
+
+ {{$root.getLz('settings.option.audio.changePlaybackRate')}} +
+
+ +
+
{{$root.getLz('settings.option.audio.seamlessTransition')}}