swift tts
2.1.2 Error if built with macOS
تحتوي هذه الحزمة على بعض الأغلفة المباشرة للغاية حول TTS جزء من Avfoundation/AvspeechSynthesizer للسماح لك باستخدام النص إلى الكلام بسهولة.
SwiftTTS باستخدام Swift Concurrency مع async await ، اثنين من AsyncStreamSwiftTTSDependency غلاف حول المكتبة أعلاه تسهيل التكامل مع مكتبة التبعيات الخالية من النقاط أو مشروع مصنوع من الهندسة المعمارية القابلة للتكامل (TCA).SwiftTTSCombine لا تزال مكتبة OG متوفرة في هذه الحزمة speak(String) -> Void - اتصل بهذه الطريقة عندما تريد ببساطة استخدام TTS مع سلسلة بسيطةisSpeaking() -> AsyncStream<Bool> - لمعرفة متى يبدأ الكلام في الاستماع ، وعندما يتم إيقافهspeakingProgress() -> AsyncStream<Double> - لمعرفة التقدم ، من 0 إلى 1rateRatio() -> Float - اضبط المعدل لإبطاء أو تسريع محرك TTSsetRateRatio(Float) -> Void - اضبط المعدل لإبطاء أو تسريع محرك TTSvoice() -> AVSpeechSynthesisVoice? - صوت محرك TTS ، افتراضيًا ، إنه صوت en-GBsetVoice(AVSpeechSynthesisVoice) -> Void - اضبط صوت محرك 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 " ) أضف Reducer @Dependency(.tts) var tts
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
}
}
}
} يمكنك إنشاء كائن TTSEngine /حقنه ، له هذا السلوك
func speak(string: String) : اتصل بهذه الطريقة عندما تريد ببساطة استخدام TTS مع سلسلة بسيطةisSpeakingPublisher لمعرفة متى يبدأ الكلام في الاستماع ، وعندما يتم إيقافهspeakingProgressPublisher لمعرفة التقدم ، من 0 إلى 1var rateRatio: Float : اضبط المعدل لإبطاء أو تسريع محرك TTSvar voice: AVSpeechSynthesisVoice? : اضبط صوت محرك TTS ، بشكل افتراضي ، إنه صوت 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 " ) يمكنك إضافة swifttts libs إلى مشروع Xcode عن طريق إضافته كاعتماد على الحزمة.
قم بتحرير Package.swift الخاصة بك.
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
] ) ,
...
]
)