swift tts
2.1.2 Error if built with macOS
Dieses Paket enthält einige sehr einfache Wrapper um TTS -Teil von Avfoundation/avspeechSynthesizer, damit Sie Text mit SMECE mit Leichtigkeit verwenden können.
SwiftTTS mit Swift -Parallelität mit async await ein paar AsyncStreamSwiftTTSDependency Eine Wrapper in der obigen Bibliothek, die die Integration mit der punktfreien Abhängigkeitsbibliothek oder einem Projekt mit der komponierbaren Architektur (TCA) erleichtert.SwiftTTSCombine Die OG -Bibliothek ist in diesem Paket noch verfügbar speak(String) -> Void - Rufen Sie diese Methode auf, wenn Sie die TTS einfach mit einer einfachen Zeichenfolge verwenden möchtenisSpeaking() -> AsyncStream<Bool> - zu wissen, wann die Äußerung zu hören ist und wann es gestoppt istspeakingProgress() -> AsyncStream<Double> - Um den Fortschritt von 0 bis 1 zu kennenrateRatio() -> Float - Stellen Sie die Geschwindigkeit auf, um den TTS -Motor zu verlangsamen oder zu beschleunigensetRateRatio(Float) -> Void - Stellen Sie die Geschwindigkeit auf, um den TTS -Motor zu verlangsamen oder zu beschleunigenvoice() -> AVSpeechSynthesisVoice? - Die Stimme der TTS-Engine ist standardmäßig die Stimme für en-GBsetVoice(AVSpeechSynthesisVoice) -> Void - Stellen Sie die Stimme der TTS -Motor einimport SwiftTTS
let tts = SwiftTTS . live
tts . speak ( " Hello World! " )
Task {
for await isSpeaking in tts . isSpeaking ( ) {
print ( " TTS is currently ( isSpeaking ? " speaking " : " not speaking " ) " )
}
}
Task {
for await progress in tts . speakingProgress ( ) {
print ( " Progress: ( Int ( progress * 100 ) ) % " )
}
}
tts . setRateRatio ( 3 / 4 )
tts . speak ( " Hello World! But slower " ) Fügen Sie @Dependency(.tts) var tts in Ihrem Reducer hinzu, Sie haben Zugriff auf alle oben genannten Funktionen.
import ComposableArchitecture
import Foundation
import SwiftTTSDependency
public struct TTS : ReducerProtocol {
public struct State : Equatable {
public var text = " "
public var isSpeaking = false
public var speakingProgress = 1.0
public var rateRatio : Float = 1.0
public init (
text : String = " " ,
isSpeaking : Bool = false ,
speakingProgress : Double = 1.0 ,
rateRatio : Float = 1.0
) {
self . text = text
self . isSpeaking = isSpeaking
self . speakingProgress = speakingProgress
self . rateRatio = rateRatio
}
}
public enum Action : Equatable {
case changeRateRatio ( Float )
case speak
case startSpeaking
case stopSpeaking
case changeSpeakingProgress ( Double )
}
@ Dependency ( . tts ) var tts
public init ( ) { }
public var body : some ReducerProtocol < State , Action > {
Reduce { state , action in
switch action {
case let . changeRateRatio ( rateRatio ) :
state . rateRatio = rateRatio
tts . setRateRatio ( rateRatio )
return . none
case . speak :
tts . speak ( state . text )
return . run { send in
for await isSpeaking in tts . isSpeaking ( ) {
if isSpeaking {
await send ( . startSpeaking )
} else {
await send ( . stopSpeaking )
}
}
}
case . startSpeaking :
state . isSpeaking = true
return . run { send in
for await progress in tts . speakingProgress ( ) {
await send ( . changeSpeakingProgress ( progress ) )
}
}
case . stopSpeaking :
state . isSpeaking = false
return . none
case let . changeSpeakingProgress ( speakingProgress ) :
state . speakingProgress = speakingProgress
return . none
}
}
}
} Sie können TTSEngine -Objekt instanziieren/injizieren, es hat dieses Verhalten
func speak(string: String) : Rufen Sie diese Methode auf, wenn Sie einfach die TTs mit einer einfachen Zeichenfolge verwenden möchtenisSpeakingPublisher um zu wissen, wann die Äußerung zu hören ist und wann sie gestoppt wirdspeakingProgressPublisher , um den Fortschritt von 0 bis 1 zu kennenvar rateRatio: Float : Stellen Sie die Rate auf, um den TTS -Motor zu verlangsamen oder zu beschleunigenvar voice: AVSpeechSynthesisVoice? : Setzen Sie die Stimme der TTS-Engine standardmäßig die Stimme für en-GBimport Combine
import SwiftTTSCombine
let engine : TTSEngine = SwiftTTSCombine . Engine ( )
var cancellables = Set < AnyCancellable > ( )
engine . speak ( string : " Hello World! " )
engine . isSpeakingPublisher
. sink { isSpeaking in
print ( " TTS is currently ( isSpeaking ? " speaking " : " not speaking " ) " )
}
. store ( in : & cancellables )
engine . speakingProgressPublisher
. sink { progress in
print ( " Progress: ( Int ( progress * 100 ) ) % " )
}
. store ( in : & cancellables )
engine . rateRatio = 3 / 4
engine . speak ( string : " Hello World! But slower " ) Sie können Swifttts Libs zu einem Xcode -Projekt hinzufügen, indem Sie es als Paketabhängigkeit hinzufügen.
Bearbeiten Sie Ihr Package.swift , um eine der gewünschten Bibliotheken zu den drei verfügbaren hinzu.
let package = Package (
...
dependencies : [
. package ( url : " https://github.com/renaudjenny/swift-tts " , from : " 2.0.0 " ) ,
...
] ,
targets : [
. target (
name : " <Your project name> " ,
dependencies : [
. product ( name : " SwiftTTS " , package : " swift-tts " ) , // <-- Modern concurrency
. product ( name : " SwiftTTSDependency " , package : " swift-tts " ) , // <-- Point-Free Dependencies library wrapper
. product ( name : " SwiftTTSCombine " , package : " swift-tts " ) , // <-- Combine wrapper
] ) ,
...
]
)