[webkit-changes] [WebKit/WebKit] f99efc: [GStreamer] Implement Speech Synthesis with Flite
ChangSeok Oh
noreply at github.com
Sun Jan 22 14:48:04 PST 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: f99efce2948ad9f817f9e69e3272db98fafce4f0
https://github.com/WebKit/WebKit/commit/f99efce2948ad9f817f9e69e3272db98fafce4f0
Author: ChangSeok Oh <changseok at webkit.org>
Date: 2023-01-22 (Sun, 22 Jan 2023)
Changed paths:
M LayoutTests/platform/glib/TestExpectations
M Source/WebCore/PlatformGTK.cmake
M Source/WebCore/PlatformWPE.cmake
M Source/WebCore/platform/GStreamer.cmake
M Source/WebCore/platform/PlatformSpeechSynthesizer.h
M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
A Source/WebCore/platform/gstreamer/GUniquePtrFlite.h
A Source/WebCore/platform/gstreamer/PlatformSpeechSynthesizerGStreamer.cpp
A Source/WebCore/platform/gstreamer/WebKitFliteSourceGStreamer.cpp
A Source/WebCore/platform/gstreamer/WebKitFliteSourceGStreamer.h
M Source/WebKit/SourcesGTK.txt
M Source/WebKit/SourcesWPE.txt
A Source/WebKit/UIProcess/gstreamer/WebPageProxyGStreamer.cpp
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
A Source/cmake/FindFlite.cmake
M Source/cmake/OptionsGTK.cmake
M Source/cmake/OptionsWPE.cmake
M Tools/Scripts/webkitpy/style/checker.py
Log Message:
-----------
[GStreamer] Implement Speech Synthesis with Flite
https://bugs.webkit.org/show_bug.cgi?id=250628
Reviewed by Philippe Normand.
This change implements the Speech Synthesis part of Web speech with Flite, an open-source
speech synthesis engine for ports using GStreamer. Once Flite converts texts to a wave,
GStreamer controls the playback of the wave sound in a GStreamer pipeline.
This patch only implements basic functionalities such as play, pause, resume, stop, and voice
change. Other fine controls, such as pitch, rate, etc., will be supported in the following changes.
This change passes 11 out of 13 tests in fast/speechsynthesis. We enable those tests in this patch,
skipping failed ones temporarily. We will fix the failures in a different bug.
Tests: LayoutTests/fast/speechsynthesis
Combined changes:
* LayoutTests/platform/glib/TestExpectations:
* Source/WebCore/PlatformGTK.cmake:
* Source/WebCore/PlatformWPE.cmake:
* Source/WebCore/platform/GStreamer.cmake:
* Source/WebCore/platform/PlatformSpeechSynthesizer.h:
* Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp: A new gst element added, "webkitflitesrc".
(WebCore::registerWebKitGStreamerElements):
* Source/WebCore/platform/gstreamer/GUniquePtrFlite.h: Added.
* Source/WebCore/platform/gstreamer/PlatformSpeechSynthesizerGStreamer.cpp: Added. This file
implements the playback of speech with given texts.
(WebCore::GstSpeechSynthesisWrapper::GstSpeechSynthesisWrapper):
(WebCore::GstSpeechSynthesisWrapper::~GstSpeechSynthesisWrapper):
(WebCore::GstSpeechSynthesisWrapper::pause):
(WebCore::GstSpeechSynthesisWrapper::resume):
(WebCore::GstSpeechSynthesisWrapper::speakUtterance):
(WebCore::GstSpeechSynthesisWrapper::cancel):
(WebCore::GstSpeechSynthesisWrapper::resetState):
(WebCore::GstSpeechSynthesisWrapper::handleMessage):
(WebCore::PlatformSpeechSynthesizer::create):
(WebCore::PlatformSpeechSynthesizer::PlatformSpeechSynthesizer):
(WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
(WebCore::PlatformSpeechSynthesizer::pause):
(WebCore::PlatformSpeechSynthesizer::resume):
(WebCore::PlatformSpeechSynthesizer::speak):
(WebCore::PlatformSpeechSynthesizer::cancel):
(WebCore::PlatformSpeechSynthesizer::resetState):
* Source/WebCore/platform/gstreamer/WebKitFliteSourceGStreamer.cpp: Added. This file initializes
a gstreamer source element with flite, registers voices.
(webkitFliteSrcConstructed):
(webkitFliteSrcStart):
(webkitFliteSrcStop):
(webkitFliteSrcCreate):
(webkitFliteSrcSetCaps):
(webkit_flite_src_class_init):
(fliteVoices):
(fliteVoice):
(ensureFliteVoicesInitialized):
(webKitFliteSrcSetUtterance):
* Source/WebCore/platform/gstreamer/WebKitFliteSourceGStreamer.h: Added.
* Source/WebKit/SourcesGTK.txt:
* Source/WebKit/SourcesWPE.txt:
* Source/WebKit/UIProcess/gstreamer/WebPageProxyGStreamer.cpp: Added.
(WebKit::WebPageProxy::didStartSpeaking):
(WebKit::WebPageProxy::didFinishSpeaking):
(WebKit::WebPageProxy::didPauseSpeaking):
(WebKit::WebPageProxy::didResumeSpeaking):
(WebKit::WebPageProxy::speakingErrorOccurred):
(WebKit::WebPageProxy::boundaryEventOccurred):
(WebKit::WebPageProxy::voicesDidChange):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp: We don't install the speech synthesis client since
we want to run gstreamer in Web Process.
(WebKit::m_appHighlightsVisible):
* Source/cmake/FindFlite.cmake: Added.
* Source/cmake/OptionsGTK.cmake:
* Source/cmake/OptionsWPE.cmake:
* Tools/Scripts/webkitpy/style/checker.py: Add WebKitFliteSourceGStreamer files for naming exceptions.
Canonical link: https://commits.webkit.org/259197@main
More information about the webkit-changes
mailing list