diff --git a/src/locale/index.js b/src/locale/index.js
index 2d41179..6882a6e 100644
--- a/src/locale/index.js
+++ b/src/locale/index.js
@@ -13,6 +13,7 @@ const i18n = new VueI18n({
en,
"zh-CN": zhCN,
},
+ silentTranslationWarn: true,
});
export default i18n;
diff --git a/src/locale/lang/en.js b/src/locale/lang/en.js
index c2657a2..29983e4 100644
--- a/src/locale/lang/en.js
+++ b/src/locale/lang/en.js
@@ -119,6 +119,8 @@ export default {
lossless: "Lossless",
},
deviceSelector: "Audio Output Device",
+ permissionDenied: "Microphone Permission Denied",
+ permissionRequired: "Microphone Permission Required",
appearance: {
text: "Appearance",
auto: "Auto",
diff --git a/src/locale/lang/zh-CN.js b/src/locale/lang/zh-CN.js
index cb030d7..10c7eec 100644
--- a/src/locale/lang/zh-CN.js
+++ b/src/locale/lang/zh-CN.js
@@ -120,6 +120,8 @@ export default {
lossless: "无损",
},
deviceSelector: "音频输出设备",
+ permissionDenied: "无麦克风权限",
+ permissionRequired: "需要麦克风权限",
appearance: {
text: "外观",
auto: "自动",
diff --git a/src/views/settings.vue b/src/views/settings.vue
index 38f090e..f70a413 100644
--- a/src/views/settings.vue
+++ b/src/views/settings.vue
@@ -79,14 +79,14 @@
{{ $t("settings.deviceSelector") }}
-
@@ -244,7 +244,11 @@ export default {
size: "0KB",
length: 0,
},
- allOutputDevices: [],
+ allOutputDevices: [{
+ deviceId: "default",
+ label: "settings.permissionRequired"
+ }],
+ withoutAudioPriviledge: true,
};
},
computed: {
@@ -290,7 +294,7 @@ export default {
},
outputDevice: {
get() {
- if (this.allOutputDevices.length == 0) this.getAllOutputDevices(); // Ensure devices loaded before get
+ if (this.withoutAudioPriviledge === true) this.getAllOutputDevices();
const isValidDevice = this.allOutputDevices.find(
(device) => device.deviceId === this.settings.outputDevice
);
@@ -395,14 +399,25 @@ export default {
},
methods: {
getAllOutputDevices() {
- return navigator.mediaDevices
- .enumerateDevices()
- .then(
- (devices) =>
- (this.allOutputDevices = devices.filter(
- (device) => device.kind == "audiooutput"
- ))
- );
+ navigator.mediaDevices.
+ getUserMedia({ audio: true })
+ .then(() => {
+ this.withoutAudioPriviledge = false;
+ navigator.mediaDevices
+ .enumerateDevices()
+ .then(
+ (devices) =>
+ (this.allOutputDevices = devices.filter(
+ (device) => device.kind == "audiooutput"
+ ))
+ );
+ })
+ .catch(() => {
+ this.allOutputDevices = [{
+ deviceId: "default",
+ label: "settings.permissionDenied",
+ }];
+ })
},
logout() {
doLogout();