From 7e33afa94d5169997f39f36e80fa9c029e654a05 Mon Sep 17 00:00:00 2001 From: Vidocq <949867756@qq.com> Date: Fri, 26 Feb 2021 00:00:12 +0800 Subject: [PATCH] fix media session --- src/locale/lang/en.js | 2 +- src/utils/Player.js | 36 +++++++++++++++++++----------------- src/views/settings.vue | 4 ++-- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/locale/lang/en.js b/src/locale/lang/en.js index f3052fe..d53ac46 100644 --- a/src/locale/lang/en.js +++ b/src/locale/lang/en.js @@ -117,7 +117,7 @@ export default { high: "High", lossless: "Lossless", }, - deviceSelector: "Output Device", + deviceSelector: "Audio Output Device", appearance: { text: "Appearance", auto: "Auto", diff --git a/src/utils/Player.js b/src/utils/Player.js index db594cf..b4c80d3 100644 --- a/src/utils/Player.js +++ b/src/utils/Player.js @@ -152,33 +152,19 @@ export default class { time, }); } - _setupAudioNode() { - Howler.masterGain.disconnect(); - const mediaStreamNode = Howler.ctx.createMediaStreamDestination(); - Howler.masterGain.connect(mediaStreamNode); - let audio = ''; - if (document.querySelector('audio') !== null) { - audio = document.querySelector('audio'); - } else { - audio = document.createElement('audio'); - document.body.append(audio); - } - audio.autoplay = true; - audio.srcObject = mediaStreamNode.stream; - audio.setSinkId(store.state.settings.outputDevice); - } _playAudioSource(source, autoplay = true) { Howler.unload(); - this._setupAudioNode(); this._howler = new Howl({ src: [source], - html5: false, + html5: true, format: ["mp3", "flac"], }); if (autoplay) { this.play(); document.title = `${this._currentTrack.name} ยท ${this._currentTrack.ar[0].name} - YesPlayMusic`; } + this.setOutputDevice(); + // this._updatePositionState(); this._howler.once("end", () => { this._nextTrackCallback(); }); @@ -272,6 +258,9 @@ export default class { navigator.mediaSession.setActionHandler("stop", () => { this.pause(); }); + navigator.mediaSession.setActionHandler("seekto", (event) => { + this.seek(event.seekTime); + }); } } _updateMediaSessionMetaData(track) { @@ -292,6 +281,15 @@ export default class { ], }); } + // _updatePositionState() { + // if ('setPositionState' in navigator.mediaSession) { + // navigator.mediaSession.setPositionState({ + // duration: this._currentTrack.dt / 1000, + // playbackRate: 1, + // position: this.seek(), + // }) + // } + // } _nextTrackCallback() { this._scrobble(true); if (this.repeatMode === "one") { @@ -358,6 +356,10 @@ export default class { this.volume = 0; } } + setOutputDevice() { + if (this._howler._sounds.length <= 0) return; + this._howler._sounds[0]._node.setSinkId(store.state.settings.outputDevice); + } replacePlaylist( trackIDs, diff --git a/src/views/settings.vue b/src/views/settings.vue index 2084dcd..d776fa8 100644 --- a/src/views/settings.vue +++ b/src/views/settings.vue @@ -243,7 +243,7 @@ export default { }; }, computed: { - ...mapState(["settings", "data"]), + ...mapState(["player", "settings", "data"]), isElectron() { return process.env.IS_ELECTRON; }, @@ -293,7 +293,7 @@ export default { set(deviceId) { if (deviceId === this.settings.outputDevice || deviceId === undefined) return; this.$store.commit("changeOutputDevice", deviceId); - document.querySelector("audio").setSinkId(deviceId); // Change output device + this.player.setOutputDevice(); }, }, showGithubIcon: {