完善音频输出设置功能

pull/166/head
lyswhut 2020-03-10 12:40:47 +08:00
parent a244c6d5e3
commit 4f238f4f62
6 changed files with 551 additions and 639 deletions

1138
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -51,7 +51,7 @@
"lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-formatter-friendly --fix src" "lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-formatter-friendly --fix src"
}, },
"browserslist": [ "browserslist": [
"Electron 8.0.1" "Electron 8.1.1"
], ],
"engines": { "engines": {
"node": ">= 12" "node": ">= 12"
@ -141,27 +141,27 @@
}, },
"homepage": "https://github.com/lyswhut/lx-music-desktop#readme", "homepage": "https://github.com/lyswhut/lx-music-desktop#readme",
"devDependencies": { "devDependencies": {
"@babel/core": "^7.8.4", "@babel/core": "^7.8.7",
"@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/polyfill": "^7.8.3", "@babel/polyfill": "^7.8.7",
"@babel/preset-env": "^7.8.4", "@babel/preset-env": "^7.8.7",
"autoprefixer": "^9.7.4", "autoprefixer": "^9.7.4",
"babel-eslint": "^10.0.3", "babel-eslint": "^10.0.3",
"babel-loader": "^8.0.6", "babel-loader": "^8.0.6",
"babel-minify-webpack-plugin": "^0.3.1", "babel-minify-webpack-plugin": "^0.3.1",
"babel-preset-minify": "^0.5.1", "babel-preset-minify": "^0.5.1",
"browserslist": "^4.9.0", "browserslist": "^4.9.1",
"cfonts": "^2.8.0", "cfonts": "^2.8.0",
"chalk": "^3.0.0", "chalk": "^3.0.0",
"changelog-parser": "^2.8.0", "changelog-parser": "^2.8.0",
"copy-webpack-plugin": "^5.1.1", "copy-webpack-plugin": "^5.1.1",
"core-js": "^3.6.4", "core-js": "^3.6.4",
"cos-nodejs-sdk-v5": "^2.5.14", "cos-nodejs-sdk-v5": "^2.5.20",
"cross-env": "^7.0.0", "cross-env": "^7.0.2",
"css-loader": "^3.4.2", "css-loader": "^3.4.2",
"del": "^5.1.0", "del": "^5.1.0",
"electron": "^8.0.2", "electron": "^8.1.1",
"electron-builder": "^22.3.2", "electron-builder": "^22.3.6",
"electron-debug": "^3.0.1", "electron-debug": "^3.0.1",
"electron-devtools-installer": "^2.2.4", "electron-devtools-installer": "^2.2.4",
"eslint": "^6.8.0", "eslint": "^6.8.0",
@ -195,7 +195,7 @@
"vue-loader": "^15.9.0", "vue-loader": "^15.9.0",
"vue-style-loader": "^4.1.2", "vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.6.11", "vue-template-compiler": "^2.6.11",
"webpack": "^4.41.6", "webpack": "^4.42.0",
"webpack-cli": "^3.3.11", "webpack-cli": "^3.3.11",
"webpack-dev-server": "^3.10.3", "webpack-dev-server": "^3.10.3",
"webpack-hot-middleware": "^2.25.0", "webpack-hot-middleware": "^2.25.0",
@ -206,18 +206,18 @@
"dnscache": "^1.0.2", "dnscache": "^1.0.2",
"electron-log": "^4.0.7", "electron-log": "^4.0.7",
"electron-store": "^5.1.1", "electron-store": "^5.1.1",
"electron-updater": "^4.2.2", "electron-updater": "^4.2.4",
"flac-metadata": "^0.1.1", "flac-metadata": "^0.1.1",
"js-htmlencode": "^0.3.0", "js-htmlencode": "^0.3.0",
"lrc-file-parser": "^1.0.0", "lrc-file-parser": "^1.0.0",
"needle": "^2.3.2", "needle": "^2.3.3",
"node-id3": "^0.1.13", "node-id3": "^0.1.14",
"request": "^2.88.2", "request": "^2.88.2",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-electron": "^1.0.6", "vue-electron": "^1.0.6",
"vue-i18n": "^8.15.4", "vue-i18n": "^8.15.5",
"vue-router": "^3.1.6", "vue-router": "^3.1.6",
"vuex": "^3.1.2", "vuex": "^3.1.3",
"vuex-electron": "^1.0.3", "vuex-electron": "^1.0.3",
"vuex-router-sync": "^5.0.0" "vuex-router-sync": "^5.0.0"
} }

View File

@ -3,6 +3,7 @@
- 新增多语言设置目前软件内置了简体中文、繁体中文、英语三种语言欢迎提交PR翻译更多语言 - 新增多语言设置目前软件内置了简体中文、繁体中文、英语三种语言欢迎提交PR翻译更多语言
- 新增无法打开外部歌单FAQ - 新增无法打开外部歌单FAQ
- 新增启动参数`search`,使用例子:`.\lx-music-desktop.exe -search="突然的自我 - 伍佰"` - 新增启动参数`search`,使用例子:`.\lx-music-desktop.exe -search="突然的自我 - 伍佰"`
- 新增音频输出设置
### 优化 ### 优化
@ -12,3 +13,7 @@
### 修复 ### 修复
- 修复歌单详情处于加载状态时无法返回的问题 - 修复歌单详情处于加载状态时无法返回的问题
### 其他
- 更新Electron到 8.1.1

View File

@ -153,7 +153,7 @@ export default {
'setting.player.togglePlayMethod'(n) { 'setting.player.togglePlayMethod'(n) {
this.audio.loop = n === 'singleLoop' this.audio.loop = n === 'singleLoop'
}, },
'setting.player.mediaDeviceName'(n) { 'setting.player.mediaDeviceId'(n) {
this.setMediaDevice() this.setMediaDevice()
}, },
list(n, o) { list(n, o) {
@ -578,10 +578,10 @@ export default {
this.mediaBuffer.playTime = 0 this.mediaBuffer.playTime = 0
}, },
async setMediaDevice() { async setMediaDevice() {
let mediaDeviceName = this.setting.player.mediaDeviceName let mediaDeviceId = this.setting.player.mediaDeviceId
if (!mediaDeviceName) return if (!mediaDeviceId) return
const devices = await navigator.mediaDevices.enumerateDevices() const devices = await navigator.mediaDevices.enumerateDevices()
let device = devices.find(device => device.label === mediaDeviceName) let device = devices.find(device => device.deviceId === mediaDeviceId)
if (!device) return this.setMediaDeviceId('default') if (!device) return this.setMediaDeviceId('default')
console.log(device) console.log(device)
this.audio.setSinkId(device.deviceId).catch((err) => { this.audio.setSinkId(device.deviceId).catch((err) => {

View File

@ -1,7 +1,7 @@
<template lang="pug"> <template lang="pug">
div(:class="[$style.select, show ? $style.active : '']") div(:class="[$style.select, show ? $style.active : '']")
div(:class="$style.label" ref="dom_btn" @click="handleShow") {{label}} div(:class="$style.label" ref="dom_btn" @click="handleShow") {{label}}
ul(:class="$style.list") ul.scroll(:class="$style.list")
li(v-for="item in list" :class="(itemKey ? item[itemKey] : item) == value ? $style.active : null" @click="handleClick(item)" :title="itemName ? item[itemName] : item") {{itemName ? item[itemName] : item}} li(v-for="item in list" :class="(itemKey ? item[itemKey] : item) == value ? $style.active : null" @click="handleClick(item)" :title="itemName ? item[itemName] : item") {{itemName ? item[itemName] : item}}
</template> </template>
@ -121,8 +121,9 @@ export default {
transition-property: transform, opacity; transition-property: transform, opacity;
z-index: 10; z-index: 10;
border-radius: @form-radius; border-radius: @form-radius;
overflow: hidden; box-shadow: 0 0 4px rgba(0, 0, 0, .15);
box-shadow: 0 1px 4px rgba(0, 0, 0, .12); overflow: auto;
max-height: 200px;
li { li {
cursor: pointer; cursor: pointer;

View File

@ -566,7 +566,7 @@ export default {
const devices = await navigator.mediaDevices.enumerateDevices() const devices = await navigator.mediaDevices.enumerateDevices()
const audioDevices = devices.filter(device => device.kind === 'audiooutput') const audioDevices = devices.filter(device => device.kind === 'audiooutput')
this.mediaDevices = audioDevices this.mediaDevices = audioDevices
console.log(this.mediaDevices) // console.log(this.mediaDevices)
}, },
handleMediaDeviceChange(audioDevice) { handleMediaDeviceChange(audioDevice) {
this.setMediaDeviceId(audioDevice.deviceId) this.setMediaDeviceId(audioDevice.deviceId)