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 @@