Skip to content

Commit 43580fc

Browse files
committed
Add TTSEngine.voiceWithIdentifier()
1 parent d9d27b7 commit 43580fc

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

Sources/Navigator/TTS/AVTTSEngine.swift

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,13 @@ public class AVTTSEngine: NSObject, TTSEngine, AVSpeechSynthesizerDelegate, Logg
4848
}
4949

5050
public lazy var availableVoices: [TTSVoice] =
51-
AVSpeechSynthesisVoice.speechVoices().map { v in
52-
TTSVoice(
53-
identifier: v.identifier,
54-
language: Language(code: .bcp47(v.language)),
55-
name: v.name,
56-
gender: .init(voice: v),
57-
quality: .init(voice: v)
58-
)
59-
}
51+
AVSpeechSynthesisVoice.speechVoices()
52+
.map { TTSVoice(voice: $0) }
53+
54+
public func voiceWithIdentifier(_ id: String) -> TTSVoice? {
55+
AVSpeechSynthesisVoice(identifier: id)
56+
.map { TTSVoice(voice: $0) }
57+
}
6058

6159
public func speak(_ utterance: TTSUtterance) {
6260
synthesizer.stopSpeaking(at: .immediate)
@@ -123,6 +121,18 @@ public class AVTTSEngine: NSObject, TTSEngine, AVSpeechSynthesizerDelegate, Logg
123121
}
124122
}
125123

124+
private extension TTSVoice {
125+
init(voice: AVSpeechSynthesisVoice) {
126+
self.init(
127+
identifier: voice.identifier,
128+
language: Language(code: .bcp47(voice.language)),
129+
name: voice.name,
130+
gender: Gender(voice: voice),
131+
quality: Quality(voice: voice)
132+
)
133+
}
134+
}
135+
126136
private extension TTSVoice.Gender {
127137
init(voice: AVSpeechSynthesisVoice) {
128138
if #available(iOS 13.0, *) {

Sources/Navigator/TTS/TTSController.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ public class TTSController: Loggable, TTSEngineDelegate {
4949
engine.availableVoices
5050
}
5151

52+
public func voiceWithIdentifier(_ id: String) -> TTSVoice? {
53+
engine.voiceWithIdentifier(id)
54+
}
55+
5256
public weak var delegate: TTSControllerDelegate?
5357

5458
private let publication: Publication

Sources/Navigator/TTS/TTSEngine.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public protocol TTSEngine: AnyObject {
1212
var config: TTSConfiguration { get set }
1313
var delegate: TTSEngineDelegate? { get set }
1414
var availableVoices: [TTSVoice] { get }
15+
func voiceWithIdentifier(_ id: String) -> TTSVoice?
1516

1617
func speak(_ utterance: TTSUtterance)
1718
func stop()

0 commit comments

Comments
 (0)