diff --git a/index.js b/index.js index 05eccf7..82cab39 100644 --- a/index.js +++ b/index.js @@ -131,15 +131,28 @@ const getStorage = async () => { } }; -const getVoices = () => { +const getVoices = async () => { try { if (!window.speechSynthesis) return null; - return window.speechSynthesis.getVoices().map((v) => ({ + + const mapVoice = (v) => ({ name: v.name, lang: v.lang, local: v.localService, default: v.default, - })); + }); + + const voices = window.speechSynthesis.getVoices(); + if (voices.length > 0) { + return voices.map((v) => mapVoice(v)); + } + + return await new Promise((resolve) => { + window.speechSynthesis.onvoiceschanged = () => { + const list = window.speechSynthesis.getVoices(); + resolve(list.map((v) => mapVoice(v))); + }; + }); } catch { return null; } @@ -267,7 +280,7 @@ export const get = async () => { mimes: [...(navigator.mimeTypes ?? [])].map(({ type, suffixes }) => ({ type, suffixes })), // Voices - voices: getVoices(), + voices: await getVoices(), // Network network: getNetwork(),