diff --git a/submodules/Speak/BUILD b/submodules/Speak/BUILD new file mode 100644 index 0000000000..2cdcc0121b --- /dev/null +++ b/submodules/Speak/BUILD @@ -0,0 +1,15 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "Speak", + module_name = "Speak", + srcs = glob([ + "Sources/**/*.swift", + ]), + deps = [ + "//submodules/Display:Display", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/Speak/Sources/Speak.swift b/submodules/Speak/Sources/Speak.swift new file mode 100644 index 0000000000..1afd04258f --- /dev/null +++ b/submodules/Speak/Sources/Speak.swift @@ -0,0 +1,18 @@ +import Foundation +import AVFoundation + +// Incuding at least one Objective-C class in a swift file ensures that it doesn't get stripped by the linker +private final class LinkHelperClass: NSObject { +} + +public func speakText(_ text: String) { + guard !text.isEmpty else { + return + } + let speechSynthesizer = AVSpeechSynthesizer() + let utterance = AVSpeechUtterance(string: text) + if #available(iOS 11.0, *), let language = NSLinguisticTagger.dominantLanguage(for: text) { + utterance.voice = AVSpeechSynthesisVoice(language: language) + } + speechSynthesizer.speak(utterance) +}