Bug 237584 - AX: Speech Synthesis no longer returning list of voices in macOS 12.3
Summary: AX: Speech Synthesis no longer returning list of voices in macOS 12.3
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Accessibility (show other bugs)
Version: WebKit Nightly Build
Hardware: All All
: P2 Normal
Assignee: chris fleizach
URL:
Keywords: InRadar
: 238249 (view as bug list)
Depends on:
Blocks:
 
Reported: 2022-03-07 23:37 PST by chris fleizach
Modified: 2022-09-27 00:03 PDT (History)
10 users (show)

See Also:


Attachments
patch (3.92 KB, patch)
2022-03-07 23:41 PST, chris fleizach
andresg_22: review+
Details | Formatted Diff | Diff
patch (3.67 KB, patch)
2022-03-08 09:34 PST, chris fleizach
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description chris fleizach 2022-03-07 23:37:27 PST
Speech synthesis no longer returning a list of voices in macOS 12.3
Comment 1 Radar WebKit Bug Importer 2022-03-07 23:37:38 PST
<rdar://problem/89952347>
Comment 2 chris fleizach 2022-03-07 23:41:56 PST
Created attachment 454076 [details]
patch
Comment 3 Andres Gonzalez 2022-03-08 06:13:57 PST
(In reply to chris fleizach from comment #2)
> Created attachment 454076 [details]
> patch

--- a/LayoutTests/fast/speechsynthesis/speech-synthesis-voices-non-mock.html
+++ a/LayoutTests/fast/speechsynthesis/speech-synthesis-voices-non-mock.html
@@ -0,0 +1,38 @@

I'd suggest renaming the test just to voices-non-mock.html, removing speech-synthesis already in the dir name. I find the repetition of the dir name in the file names very inconvenient for both command lines and Finder.

+<script src="../../resources/js-test-pre.js"></script>

Include js-test.js instead of js-test-pre.js.

+<body id="body">

Remove id="body", not used.

+<div id="console"></div>

No need to include this line, remove.

+    description("This tests that we can get synthesizer voices ");

Extra space after "voices".

+    for (var k = 0; k < list.length; k++ ) {

Extra space after k++. Also, let k is better than var k in this case.

+        if (voice.lang == "en-US") {
+            foundEnglishVoice = true;
+        }
+        if (voice.default) {
+            foundDefaultVoice = true;
+        }

I don't think we use { } for a one line block.

+<script src="../../resources/js-test-post.js"></script>

No need to include this line, remove.
Comment 4 chris fleizach 2022-03-08 09:34:01 PST
Created attachment 454133 [details]
patch
Comment 5 EWS 2022-03-08 13:40:56 PST
Committed r291009 (248185@main): <https://commits.webkit.org/248185@main>

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454133 [details].
Comment 6 Alexey Proskuryakov 2022-03-23 09:57:16 PDT
*** Bug 238249 has been marked as a duplicate of this bug. ***
Comment 7 Brent Fulgham 2022-05-26 15:08:12 PDT
This fix shipped with Safari 15.5 (all platforms).
Comment 8 Marius Landwehr 2022-07-19 23:00:17 PDT
The bug seems fixed but we are still mising a major amount of Text-To-Speech features in Safari on our Webpage and as well on our Application that is depending on the WebView. Is there something we can do to enable the old TTS again or even to fix this on the JS-Side?
Comment 9 chris fleizach 2022-07-20 10:41:01 PDT
(In reply to Marius Landwehr from comment #8)
> The bug seems fixed but we are still mising a major amount of Text-To-Speech
> features in Safari on our Webpage and as well on our Application that is
> depending on the WebView. Is there something we can do to enable the old TTS
> again or even to fix this on the JS-Side?

What are these features that are missing?
Comment 10 Marius Landwehr 2022-07-22 02:29:15 PDT
Will speak with our QA Team which languages are currently missing. Will come back to you ASAP!
Comment 11 Saraphina Böttcher 2022-09-15 03:39:56 PDT
I can say for sure that german language has been missing since Safari 15.5.
Comment 12 Tyler Wilcock 2022-09-15 14:26:54 PDT
(In reply to Saraphina Böttcher from comment #11)
> I can say for sure that german language has been missing since Safari 15.5.
Few questions for you:

  1. What version of macOS are you running (assuming you're referring to Safari 15.5 on the Mac)?
  2. In the Web Inspector console, what is the result of `window.navigator.language`?
  3. Also from the Web Inspector console, could you please copy-paste the results of `window.speechSynthesis.getVoices()`?

I have a machine running macOS 12.6 + Safari 16, and the result of (3) includes 48 voices, one of which is Anna:

SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.anna", name: "Anna", lang: "de-DE", localService: true, default: true}

I also tried macOS 12.6 + Safari 15.6.1 and got the same results (48 voices including Anna).

Thanks!
Comment 13 Saraphina Böttcher 2022-09-15 23:20:11 PDT
Thank you very much for the speedy reply.

1. I just recently updated to macOS 12.6 with Safari 16.0 and a few days ago macOS 12.5.1 with Safari 15.6.1 and both didn't contain german

2. `window.navigator.language` yields "en-GB"

3. `window.speechSynthesis.getVoices()` returns 44 languages for me, not including Anna see here:
0 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.Alex", name: "Alex", lang: "en-US", localService: true, default: true}
1 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.alice", name: "Alice", lang: "it-IT", localService: true, default: true}
2 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.alva", name: "Alva", lang: "sv-SE", localService: true, default: true}
3 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.carmit", name: "Carmit", lang: "he-IL", localService: true, default: true}
4 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.damayanti", name: "Damayanti", lang: "id-ID", localService: true, default: true}
5 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.ellen", name: "Ellen", lang: "nl-BE", localService: true, default: true}
6 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.fiona", name: "Fiona", lang: "en-SCOTLAND", localService: true, default: true}
7 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.Fred", name: "Fred", lang: "en-US", localService: true, default: true}
8 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.ioana", name: "Ioana", lang: "ro-RO", localService: true, default: true}
9 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.joana", name: "Joana", lang: "pt-PT", localService: true, default: true}
10 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.jorge", name: "Jorge", lang: "es-ES", localService: true, default: true}
11 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.juan", name: "Juan", lang: "es-MX", localService: true, default: true}
12 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.kanya", name: "Kanya", lang: "th-TH", localService: true, default: true}
13 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.karen", name: "Karen", lang: "en-AU", localService: true, default: true}
14 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.kyoko", name: "Kyoko", lang: "ja-JP", localService: true, default: true}
15 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.laura", name: "Laura", lang: "sk-SK", localService: true, default: true}
16 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.lekha", name: "Lekha", lang: "hi-IN", localService: true, default: true}
17 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.luca", name: "Luca", lang: "it-IT", localService: true, default: true}
18 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.luciana", name: "Luciana", lang: "pt-BR", localService: true, default: true}
19 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.maged", name: "Maged", lang: "ar-SA", localService: true, default: true}
20 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.mariska", name: "Mariska", lang: "hu-HU", localService: true, default: true}
21 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.meijia", name: "Mei-Jia", lang: "zh-TW", localService: true, default: true}
22 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.melina", name: "Melina", lang: "el-GR", localService: true, default: true}
23 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.milena", name: "Milena", lang: "ru-RU", localService: true, default: true}
24 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.moira", name: "Moira", lang: "en-IE", localService: true, default: true}
25 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.monica", name: "Monica", lang: "es-ES", localService: true, default: true}
26 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.nora", name: "Nora", lang: "nb-NO", localService: true, default: true}
27 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.paulina", name: "Paulina", lang: "es-MX", localService: true, default: true}
28 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.rishi", name: "Rishi", lang: "en-IN", localService: true, default: true}
29 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.samantha", name: "Samantha", lang: "en-US", localService: true, default: true}
30 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.sara", name: "Sara", lang: "da-DK", localService: true, default: true}
31 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.satu", name: "Satu", lang: "fi-FI", localService: true, default: true}
32 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.sinji", name: "Sin-ji", lang: "zh-HK", localService: true, default: true}
33 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.tessa", name: "Tessa", lang: "en-ZA", localService: true, default: true}
34 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.thomas", name: "Thomas", lang: "fr-FR", localService: true, default: true}
35 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.tingting", name: "Ting-Ting", lang: "zh-CN", localService: true, default: true}
36 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.veena", name: "Veena", lang: "en-IN", localService: true, default: true}
37 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.Victoria", name: "Victoria", lang: "en-US", localService: true, default: true}
38 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.xander", name: "Xander", lang: "nl-NL", localService: true, default: true}
39 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.yelda", name: "Yelda", lang: "tr-TR", localService: true, default: true}
40 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.yuna", name: "Yuna", lang: "ko-KR", localService: true, default: true}
41 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.yuri", name: "Yuri", lang: "ru-RU", localService: true, default: true}
42 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.zosia", name: "Zosia", lang: "pl-PL", localService: true, default: true}
43 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.zuzana", name: "Zuzana", lang: "cs-CZ", localService: true, default: true}


Several colleagues who are also missing german and we have a lot of customers who also complain that german is missing, so if there is anything more i can provide you with, feel free to get in touch
Comment 14 chris fleizach 2022-09-15 23:24:29 PDT
(In reply to Saraphina Böttcher from comment #13)
> Thank you very much for the speedy reply.
> 
> 1. I just recently updated to macOS 12.6 with Safari 16.0 and a few days ago
> macOS 12.5.1 with Safari 15.6.1 and both didn't contain german
> 
> 2. `window.navigator.language` yields "en-GB"
> 
> 3. `window.speechSynthesis.getVoices()` returns 44 languages for me, not
> including Anna see here:
> 0 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.Alex",
> name: "Alex", lang: "en-US", localService: true, default: true}
> 1 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.alice",
> name: "Alice", lang: "it-IT", localService: true, default: true}
> 2 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.alva",
> name: "Alva", lang: "sv-SE", localService: true, default: true}
> 3 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.carmit",
> name: "Carmit", lang: "he-IL", localService: true, default: true}
> 4 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.damayanti", name: "Damayanti", lang:
> "id-ID", localService: true, default: true}
> 5 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.ellen",
> name: "Ellen", lang: "nl-BE", localService: true, default: true}
> 6 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.fiona",
> name: "Fiona", lang: "en-SCOTLAND", localService: true, default: true}
> 7 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.Fred",
> name: "Fred", lang: "en-US", localService: true, default: true}
> 8 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.ioana",
> name: "Ioana", lang: "ro-RO", localService: true, default: true}
> 9 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.joana",
> name: "Joana", lang: "pt-PT", localService: true, default: true}
> 10 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.jorge",
> name: "Jorge", lang: "es-ES", localService: true, default: true}
> 11 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.juan",
> name: "Juan", lang: "es-MX", localService: true, default: true}
> 12 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.kanya",
> name: "Kanya", lang: "th-TH", localService: true, default: true}
> 13 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.karen",
> name: "Karen", lang: "en-AU", localService: true, default: true}
> 14 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.kyoko",
> name: "Kyoko", lang: "ja-JP", localService: true, default: true}
> 15 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.laura",
> name: "Laura", lang: "sk-SK", localService: true, default: true}
> 16 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.lekha",
> name: "Lekha", lang: "hi-IN", localService: true, default: true}
> 17 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.luca",
> name: "Luca", lang: "it-IT", localService: true, default: true}
> 18 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.luciana", name: "Luciana", lang: "pt-BR",
> localService: true, default: true}
> 19 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.maged",
> name: "Maged", lang: "ar-SA", localService: true, default: true}
> 20 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.mariska", name: "Mariska", lang: "hu-HU",
> localService: true, default: true}
> 21 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.meijia", name: "Mei-Jia", lang: "zh-TW",
> localService: true, default: true}
> 22 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.melina", name: "Melina", lang: "el-GR",
> localService: true, default: true}
> 23 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.milena", name: "Milena", lang: "ru-RU",
> localService: true, default: true}
> 24 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.moira",
> name: "Moira", lang: "en-IE", localService: true, default: true}
> 25 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.monica", name: "Monica", lang: "es-ES",
> localService: true, default: true}
> 26 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.nora",
> name: "Nora", lang: "nb-NO", localService: true, default: true}
> 27 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.paulina", name: "Paulina", lang: "es-MX",
> localService: true, default: true}
> 28 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.rishi",
> name: "Rishi", lang: "en-IN", localService: true, default: true}
> 29 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.samantha", name: "Samantha", lang:
> "en-US", localService: true, default: true}
> 30 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.sara",
> name: "Sara", lang: "da-DK", localService: true, default: true}
> 31 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.satu",
> name: "Satu", lang: "fi-FI", localService: true, default: true}
> 32 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.sinji",
> name: "Sin-ji", lang: "zh-HK", localService: true, default: true}
> 33 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.tessa",
> name: "Tessa", lang: "en-ZA", localService: true, default: true}
> 34 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.thomas", name: "Thomas", lang: "fr-FR",
> localService: true, default: true}
> 35 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.tingting", name: "Ting-Ting", lang:
> "zh-CN", localService: true, default: true}
> 36 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.veena",
> name: "Veena", lang: "en-IN", localService: true, default: true}
> 37 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.Victoria", name: "Victoria", lang:
> "en-US", localService: true, default: true}
> 38 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.xander", name: "Xander", lang: "nl-NL",
> localService: true, default: true}
> 39 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.yelda",
> name: "Yelda", lang: "tr-TR", localService: true, default: true}
> 40 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.yuna",
> name: "Yuna", lang: "ko-KR", localService: true, default: true}
> 41 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.yuri",
> name: "Yuri", lang: "ru-RU", localService: true, default: true}
> 42 SpeechSynthesisVoice {voiceURI: "com.apple.speech.synthesis.voice.zosia",
> name: "Zosia", lang: "pl-PL", localService: true, default: true}
> 43 SpeechSynthesisVoice {voiceURI:
> "com.apple.speech.synthesis.voice.zuzana", name: "Zuzana", lang: "cs-CZ",
> localService: true, default: true}
> 
> 
> Several colleagues who are also missing german and we have a lot of
> customers who also complain that german is missing, so if there is anything
> more i can provide you with, feel free to get in touch

Have you downloaded the enhanced version of Anna on your computer? I wonder if that is causing it to be excluded from the list without returning the compact version
Comment 15 Saraphina Böttcher 2022-09-15 23:29:53 PDT
Not that I know. How can i check that?
Comment 16 chris fleizach 2022-09-15 23:37:06 PDT
(In reply to Saraphina Böttcher from comment #15)
> Not that I know. How can i check that?

System Preferences > Accessibility> Spoken Content > Voice >. Manage Voices

See if Anna premium was downloaded
Comment 17 Saraphina Böttcher 2022-09-15 23:39:18 PDT
No it is not downloaded. Just for the record (not sure if this is important) i can only select "Anna" and nothing about premium
Comment 18 chris fleizach 2022-09-16 00:03:55 PDT
(In reply to Saraphina Böttcher from comment #17)
> No it is not downloaded. Just for the record (not sure if this is important)
> i can only select "Anna" and nothing about premium

With Ventura coming out sometime in the near future, I suspect this will be resolved. This is not a webkit issue, but something going on with the speech system on your Mac. It's possible we won't be able to fix on 12.x series. We can see if there's more data available if you want to file a Feedback.
Comment 19 Marius Landwehr 2022-09-26 23:55:04 PDT
Is there a known workaround to get this up and running again? 

We have many customers who are relying on the TTS Service and we can't really do anything about this...
Comment 20 Marius Landwehr 2022-09-27 00:03:09 PDT
(In reply to chris fleizach from comment #18)
> (In reply to Saraphina Böttcher from comment #17)
> > No it is not downloaded. Just for the record (not sure if this is important)
> > i can only select "Anna" and nothing about premium
> 
> With Ventura coming out sometime in the near future, I suspect this will be
> resolved. This is not a webkit issue, but something going on with the speech
> system on your Mac. It's possible we won't be able to fix on 12.x series. We
> can see if there's more data available if you want to file a Feedback.

I've created a Feedback with the number: FB11599855