swift tts
2.1.2 Error if built with macOS
Paket ini berisi beberapa pembungkus yang sangat mudah di sekitar bagian TTS dari avfoundation/avspeechsynthesizer untuk memungkinkan Anda menggunakan teks untuk berbicara dengan mudah.
SwiftTTS menggunakan konkurensi cepat dengan async await , beberapa AsyncStreamSwiftTTSDependency Pembungkus di sekitar perpustakaan di atas memfasilitasi integrasi dengan perpustakaan dependensi bebas titik atau proyek yang dibuat dengan arsitektur komposisi (TCA).SwiftTTSCombine Perpustakaan OG masih tersedia dalam paket ini speak(String) -> Void - Panggil metode ini ketika Anda hanya ingin menggunakan TTS dengan string sederhanaisSpeaking() -> AsyncStream<Bool> - untuk mengetahui kapan ucapan mulai didengar, dan kapan berhentispeakingProgress() -> AsyncStream<Double> - Untuk mengetahui kemajuannya, dari 0 ke 1rateRatio() -> Float - atur laju untuk memperlambat atau mempercepat mesin TTSsetRateRatio(Float) -> Void - atur laju untuk memperlambat atau mempercepat mesin TTSvoice() -> AVSpeechSynthesisVoice? - Suara mesin TTS, secara default, itu suara untuk en-GBsetVoice(AVSpeechSynthesisVoice) -> Void - atur suara mesin TTSimport 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 " ) Tambahkan @Dependency(.tts) var tts di Reducer Anda, Anda akan memiliki akses ke semua fungsi yang disebutkan di atas.
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
}
}
}
} Anda dapat membuat/menyuntikkan objek TTSEngine , ia memiliki perilaku ini
func speak(string: String) : Panggil metode ini saat Anda hanya ingin menggunakan TTS dengan string sederhanaisSpeakingPublisher untuk mengetahui kapan ucapan mulai didengar, dan kapan berhentispeakingProgressPublisher untuk mengetahui kemajuannya, dari 0 ke 1var rateRatio: Float : atur laju untuk memperlambat atau mempercepat mesin TTSvar voice: AVSpeechSynthesisVoice? : Atur suara mesin TTS, secara default, ini adalah suara untuk 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 " ) Anda dapat menambahkan SWIFTTTS LIBS ke proyek XCode dengan menambahkannya sebagai ketergantungan paket.
Edit Package.swift Anda.swift untuk menambahkan salah satu perpustakaan yang Anda inginkan di antara tiga yang tersedia.
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
] ) ,
...
]
)