add TencentTTS

This commit is contained in:
oscarz
2024-08-30 17:46:21 +08:00
parent 27c160beaf
commit 487aead433
30 changed files with 1558 additions and 14 deletions

View File

@ -8,6 +8,7 @@
import SwiftUI
import AVFoundation
import ToastUI
import FirebaseAnalytics
struct SubmitTextEditor: UIViewRepresentable {
@Binding var text: String
@ -271,7 +272,9 @@ struct TranslateCardView: View {
var onEdit: (String) -> Void
var onCopy: (String) -> Void
var onFeedback: (TranslateFeedback) -> Void
let synthesizer = AVSpeechSynthesizer()
//
@State private var isSynthesizing = false
var body: some View {
VStack {
@ -285,15 +288,15 @@ struct TranslateCardView: View {
Text(translation.input)
.padding(.bottom, 3)
HStack {
/*
Button(action: {
speakText(translation.input)
synthesizeAndPlay(text: translation.input, lang: "Original")
}) {
Image(systemName: "speaker.wave.2")
.foregroundColor(.blue)
.padding(.trailing)
}
*/
Spacer()
Button(action: {
onEdit(translation.input)
@ -315,14 +318,14 @@ struct TranslateCardView: View {
.padding(.vertical, 1) // 线
.padding(.bottom, 3) //
HStack {
/*
Button(action: {
speakText(translation.translation)
synthesizeAndPlay(text: translation.translation, lang: "Translated")
}) {
Image(systemName: "speaker.wave.2")
.foregroundColor(.blue)
}
*/
Spacer()
HStack(spacing: 15) {//
Button(action: {
@ -362,14 +365,27 @@ struct TranslateCardView: View {
.background(Color.gray.opacity(0.2)) // LightGray
.overlay(RoundedRectangle(cornerRadius: 10).stroke(Color.gray, lineWidth: 1))
}
func speakText(_ text: String) {
let utterance = AVSpeechUtterance(string: text)
utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
synthesizer.speak(utterance)
func synthesizeAndPlay(text: String, lang: String) {
//
Analytics.logEvent("TTSClick", parameters: [
"vendor": "TencentTTS",
"lang" : lang
])
isSynthesizing = true
TTSManager.shared.synthesizeAndPlay(text: text, isVIP: globalEnvironment.isVip, onSuccess: {
isSynthesizing = false
logger.info("Synthesis succ.")
}, onFailure: { error in
isSynthesizing = false
logger.info("Synthesis error: \(error)")
})
}
}
extension View {
func dashed() -> some View {
self.overlay(