@@ -66,11 +66,11 @@ speechNavigator.on("error", (event) => {
6666// Initialize the application
6767async function init ( ) {
6868 try {
69- // Initialize the voice manager
69+ // Initialize the voice manager with preferred languages
7070 voiceManager = await WebSpeechVoiceManager . initialize ( ) ;
7171
7272 // Sort those voices by browser preference using sortVoicesByRegions
73- const voices = voiceManager . sortVoicesByRegions ( window . navigator . languages ) ;
73+ const voices = await voiceManager . sortVoicesByRegions ( window . navigator . languages ) ;
7474
7575 // Get languages
7676 languages = voiceManager . getLanguages ( window . navigator . languages [ 0 ] , { removeDuplicates : true } , voices ) ;
@@ -201,18 +201,18 @@ function displayVoiceProperties(voice) {
201201}
202202
203203// Replace current voice with a new default voice if it gets filtered out
204- function replaceCurrentVoiceIfFilteredOut ( language ) {
204+ async function replaceCurrentVoiceIfFilteredOut ( language ) {
205205 const currentVoiceFilteredOut = currentVoice && ! filteredVoices . some ( voice => voice . voiceURI === currentVoice . voiceURI ) ;
206206 const needNewVoice = ! currentVoice && filteredVoices . length > 0 ;
207207
208208 if ( currentVoiceFilteredOut || needNewVoice ) {
209209 // Current voice was filtered out or no voice selected, pick a new default voice based on language
210210 if ( filteredVoices . length > 0 ) {
211- currentVoice = voiceManager . getDefaultVoice ( language , filteredVoices ) ;
211+ currentVoice = await voiceManager . getDefaultVoice ( language , filteredVoices ) ;
212212
213213 if ( currentVoice ) {
214214 try {
215- speechNavigator . setVoice ( currentVoice ) ;
215+ await speechNavigator . setVoice ( currentVoice ) ;
216216 displayVoiceProperties ( currentVoice ) ;
217217 updateTestUtterance ( currentVoice , language ) ;
218218
@@ -235,7 +235,7 @@ function replaceCurrentVoiceIfFilteredOut(language) {
235235}
236236
237237// Filter voices based on current filters
238- function filterVoices ( ) {
238+ async function filterVoices ( ) {
239239 const language = languageSelect . value ;
240240 const gender = genderSelect . value ;
241241 const source = sourceSelect . value ;
@@ -269,16 +269,16 @@ function filterVoices() {
269269 filteredVoices = voicesFilteredExceptLanguage ;
270270 }
271271
272- populateVoiceDropdown ( language ) ;
272+ await populateVoiceDropdown ( language ) ;
273273
274274 // Replace current voice if it was filtered out
275- replaceCurrentVoiceIfFilteredOut ( language ) ;
275+ await replaceCurrentVoiceIfFilteredOut ( language ) ;
276276
277277 updateUI ( ) ;
278278}
279279
280280// Populate the voice dropdown with filtered voices
281- function populateVoiceDropdown ( ) {
281+ async function populateVoiceDropdown ( ) {
282282 voiceSelect . innerHTML = "<option value='' disabled selected>Select a voice</option>" ;
283283
284284 try {
@@ -291,7 +291,7 @@ function populateVoiceDropdown() {
291291 }
292292
293293 // Sort voices with browser's preferred languages first
294- const sortedVoices = voiceManager . sortVoicesByRegions ( window . navigator . languages , [ ...filteredVoices ] ) ;
294+ const sortedVoices = await voiceManager . sortVoicesByRegions ( window . navigator . languages , [ ...filteredVoices ] ) ;
295295
296296 // Group the sorted voices by region
297297 const voiceGroups = voiceManager . groupVoices ( "region" , sortedVoices ) ;
@@ -550,22 +550,22 @@ function setupEventListeners() {
550550 displayVoiceProperties ( null ) ;
551551
552552 // Filter voices for the selected language
553- filterVoices ( ) ;
553+ await filterVoices ( ) ;
554554
555555 // Get the default voice for the selected language using pre-filtered voices
556556 if ( baseLanguage ) {
557557 // Use the full navigator.languages array for proper language preference handling
558558 const preferredLanguages = [ ...( window . navigator . languages || [ window . navigator . language ] || [ baseLanguage ] ) ] ;
559559
560- currentVoice = voiceManager . getDefaultVoice (
560+ currentVoice = await voiceManager . getDefaultVoice (
561561 preferredLanguages ,
562562 filteredVoices . length ? filteredVoices : undefined
563563 ) ;
564564
565565 if ( currentVoice ) {
566566 try {
567567 // Set the voice for the navigator
568- speechNavigator . setVoice ( currentVoice ) ;
568+ await speechNavigator . setVoice ( currentVoice ) ;
569569
570570 // Update the voice dropdown to reflect the selected voice
571571 const voiceOption = voiceSelect . querySelector ( `option[value="${ currentVoice . name } "]` ) ;
@@ -600,7 +600,7 @@ function setupEventListeners() {
600600 if ( currentVoice ) {
601601 try {
602602 // Set the voice for the navigator
603- speechNavigator . setVoice ( currentVoice ) ;
603+ await speechNavigator . setVoice ( currentVoice ) ;
604604
605605 // Display voice properties
606606 displayVoiceProperties ( currentVoice ) ;
@@ -655,18 +655,18 @@ function setupEventListeners() {
655655 } ) ;
656656
657657 // Update voices when gender filter changes
658- genderSelect . addEventListener ( "change" , ( ) => {
659- filterVoices ( ) ;
658+ genderSelect . addEventListener ( "change" , async ( ) => {
659+ await filterVoices ( ) ;
660660 } ) ;
661661
662662 // Update voices when source filter changes
663- sourceSelect . addEventListener ( "change" , ( ) => {
664- filterVoices ( ) ;
663+ sourceSelect . addEventListener ( "change" , async ( ) => {
664+ await filterVoices ( ) ;
665665 } ) ;
666666
667667 // Update voices when offline filter changes
668- offlineOnlyCheckbox . addEventListener ( "change" , ( ) => {
669- filterVoices ( ) ;
668+ offlineOnlyCheckbox . addEventListener ( "change" , async ( ) => {
669+ await filterVoices ( ) ;
670670 } ) ;
671671
672672 // Update test utterance when language changes
0 commit comments