add output device switching

master
Vidocq 4 years ago
parent 970124f70d
commit 5223089dc7

@ -156,11 +156,11 @@ export default class {
Howler.masterGain.disconnect(); Howler.masterGain.disconnect();
const mediaStreamNode = Howler.ctx.createMediaStreamDestination(); const mediaStreamNode = Howler.ctx.createMediaStreamDestination();
Howler.masterGain.connect(mediaStreamNode); Howler.masterGain.connect(mediaStreamNode);
let audio = ''; let audio = "";
if (document.querySelector('audio') !== null) { if (document.querySelector("audio") !== null) {
audio = document.querySelector('audio'); audio = document.querySelector("audio");
} else { } else {
audio = document.createElement('audio'); audio = document.createElement("audio");
document.body.append(audio); document.body.append(audio);
} }
audio.autoplay = true; audio.autoplay = true;

@ -345,10 +345,19 @@ export default {
); );
}, },
filteredTracks() { filteredTracks() {
return this.tracks.filter(song => return this.tracks.filter(
song.name.toLowerCase().includes(this.playlistKeyword.toLowerCase()) || (song) =>
song.al.name.toLowerCase().includes(this.playlistKeyword.toLowerCase()) || song.name
song.ar.find(artist => artist.name.toLowerCase().includes(this.playlistKeyword.toLowerCase())) .toLowerCase()
.includes(this.playlistKeyword.toLowerCase()) ||
song.al.name
.toLowerCase()
.includes(this.playlistKeyword.toLowerCase()) ||
song.ar.find((artist) =>
artist.name
.toLowerCase()
.includes(this.playlistKeyword.toLowerCase())
)
); );
}, },
}, },
@ -397,7 +406,11 @@ export default {
this.lastLoadedTrackIndex = data.playlist.tracks.length - 1; this.lastLoadedTrackIndex = data.playlist.tracks.length - 1;
if (this.playlist.trackCount > this.tracks.length) { if (this.playlist.trackCount > this.tracks.length) {
window.addEventListener("scroll", this.handleScroll, true); window.addEventListener("scroll", this.handleScroll, true);
window.addEventListener("input", this.handleSearch, this.playlistKeyword); window.addEventListener(
"input",
this.handleSearch,
this.playlistKeyword
);
} }
return data; return data;
}) })

@ -80,7 +80,12 @@
</div> </div>
<div class="right"> <div class="right">
<select v-model="outputDevice"> <select v-model="outputDevice">
<option v-for="device in allOutputDevices" :key="device.deviceId" :value="device.deviceId" :selected="device.deviceId == outputDevice"> <option
v-for="device in allOutputDevices"
:key="device.deviceId"
:value="device.deviceId"
:selected="device.deviceId == outputDevice"
>
{{ device.label }} {{ device.label }}
</option> </option>
</select> </select>
@ -286,12 +291,19 @@ export default {
outputDevice: { outputDevice: {
get() { get() {
if (this.allOutputDevices.length == 0) this.getAllOutputDevices(); // Ensure devices loaded before get if (this.allOutputDevices.length == 0) this.getAllOutputDevices(); // Ensure devices loaded before get
const isValidDevice = this.allOutputDevices.find(device => device.deviceId === this.settings.outputDevice); const isValidDevice = this.allOutputDevices.find(
if (this.settings.outputDevice === undefined || isValidDevice === undefined) return "default"; // Default deviceId (device) => device.deviceId === this.settings.outputDevice
);
if (
this.settings.outputDevice === undefined ||
isValidDevice === undefined
)
return "default"; // Default deviceId
return this.settings.outputDevice; return this.settings.outputDevice;
}, },
set(deviceId) { set(deviceId) {
if (deviceId === this.settings.outputDevice || deviceId === undefined) return; if (deviceId === this.settings.outputDevice || deviceId === undefined)
return;
this.$store.commit("changeOutputDevice", deviceId); this.$store.commit("changeOutputDevice", deviceId);
document.querySelector("audio").setSinkId(deviceId); // Change output device document.querySelector("audio").setSinkId(deviceId); // Change output device
}, },
@ -383,9 +395,14 @@ export default {
}, },
methods: { methods: {
getAllOutputDevices() { getAllOutputDevices() {
return navigator.mediaDevices.enumerateDevices().then( return navigator.mediaDevices
devices => this.allOutputDevices = devices.filter(device => device.kind == "audiooutput") .enumerateDevices()
); .then(
(devices) =>
(this.allOutputDevices = devices.filter(
(device) => device.kind == "audiooutput"
))
);
}, },
logout() { logout() {
doLogout(); doLogout();

Loading…
Cancel
Save