ブラウザで音声合成ができる便利な時代です。
それも多言語サポートされていて、speechSynthesis.getVoices()をコールすると、様々な言語用のVoiceが取得できます。
ところが、少なくともMac版Google Chromeでは、初回のspeechSynthesis.getVoices()コールでは戻り値が空の配列です。
初回コールしてから少なくとも30ms程度経たないとgetVoices()の実体が得られないようです。
なので、対処方法として、デフォルト以外の声で音声合成する場合には、ダミーで一度speechSynthesis.getVoices()をコールしておきましょう。