标签: avspeechsynthesizer

每当使用 AVSpeechSynthesizer 读取文本时,仪器都会报告内存泄漏

每次我使用 AVSpeechSynthesizer 朗读文本时,仪器都会报告 AXSpeechImplementation 库中的内存泄漏。这是我用来拨打电话的代码:

AVSpeechUtterance *speak = [AVSpeechUtterance speechUtteranceWithString:text];
speak.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
speak.rate = AVSpeechUtteranceMaximumSpeechRate * .2;
[m_speechSynth speakUtterance:speak];
Run Code Online (Sandbox Code Playgroud)

这是仪器屏幕截图的链接 http://imageshack.com/a/img690/7993/b9w5.png

memory-leaks avfoundation ios7 avspeechsynthesizer

3
推荐指数
1
解决办法
872
查看次数

如何在中间停止AVSpeechSynthesizer播放?

我在我的应用程序中使用AVSpeechSynthesizer进行文本到语音转换.是否可以在中间停止播放,例如,如果用户点击停止按钮?

iphone text-to-speech ios ios7 avspeechsynthesizer

2
推荐指数
2
解决办法
3622
查看次数

SpeechSynthesizer 不会在 Swift 中为句号提供自然停顿

我正在处理文本朗读任务。在其中我面临的问题是,如果我得到文本,例如:Hello everyone. 2 minutes to go.然后使用下面的代码进行语音合成器,它将整个文本视为一个句子,并且不会在Hello everyone.. 就像没有. (full stop)after一样,它将整个文本作为一个句子Hello everyone仅当标点符号后有数字时才会发生这种情况 . (full stop)

let utterance = AVSpeechUtterance(string: "Hello everyone. 2 minutes to go.")
utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
utterance.rate = AVSpeechUtteranceDefaultSpeechRate
synthesizer.speak(utterance)
Run Code Online (Sandbox Code Playgroud)

如果您担心我如何初始化会话和合成器,那么这里是下面的代码:

let synthesizer = AVSpeechSynthesizer()
let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
    try session.setActive(true)
} catch {
    print(error.localizedDescription)
}
Run Code Online (Sandbox Code Playgroud)

text-to-speech ios avspeechsynthesizer swift avspeechutterance

2
推荐指数
1
解决办法
845
查看次数

SwiftUI 中的 AVSpeechSynthesizerDelegate 实现

任何人都可以分享我们如何在 SwiftUI 中实现 AVSpeechSynthesizerDelegate。我们如何在 SwiftUI 应用程序中监听委托回调方法。

谢谢

avspeechsynthesizer ios13 swiftui

2
推荐指数
1
解决办法
616
查看次数

初始化器不会覆盖其超类 Swift 2.0 中指定的初始化器

通过此 appcoder 教程构建文本到语音应用程序教程并运行 swift 1.2-> swift 2.0 功能。

演示项目中有一个类... IOS 10.11.1 下的 Xcode 7.1.1 不喜欢它,给了我错误。覆盖 init() 语句上的“初始化器不会覆盖其超类中的指定初始化器”,后面跟着错误“必须调用超类 UISlider 的指定初始化器”。

好吧,对 Swift 来说还很陌生;我开始解决这个问题的地方让我有点迷失。

class CustomSlider: UISlider {

var sliderIdentifier: Int!

override init() { <--- error here
    super.init()  <--- error here

    sliderIdentifier = 0
}


required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    sliderIdentifier = 0
}

}
Run Code Online (Sandbox Code Playgroud)

这段代码应该说什么?

user-interface speech ios avspeechsynthesizer swift

1
推荐指数
1
解决办法
2000
查看次数

实时更改 AVSpeechUtterance 率

我目前正在开发一个使用 AVSynthesizer 将文本转换为语音的 iOS 应用程序。

我想要做的是,当合成器说话时,可以通过滑块更改发声率,并且说话的速度会发生变化。

我在滑块的 IBAction 中这样做: self.utterance = sender.value

但合成器不会改变速度。我一直在寻找信息,但我还没有找到。我能做什么?提前致谢。

xcode avfoundation ios avspeechsynthesizer avspeechutterance

1
推荐指数
1
解决办法
1648
查看次数

如何知道AVSpeechUtterance何时完成,以便继续应用活动?

当一个人AVSpeechUtterance说话时,我想等到它完成之后才做其他事情.

有一个属性AVSpeechSynthesizer似乎表明发言时间:

isSpeaking

由于这个问题可能听起来很愚蠢和简单,我想知道如何使用/检查此属性等到语音结束后再继续?

或者:

有一个代表,我对如何使用也毫无头绪,它有能力在话语结束时做某事:

AVSpeechSynthesizerDelegate

有一个答案,在这里,是说用这个.但这对我没有帮助,因为我不知道如何使用代表.

更新:

这就是我设置口语课的方式:

import AVFoundation

class CanSpeak: NSObject, AVSpeechSynthesizerDelegate {

    let voices = AVSpeechSynthesisVoice.speechVoices()
    let voiceSynth = AVSpeechSynthesizer()
    var voiceToUse: AVSpeechSynthesisVoice?

    override init(){
        voiceToUse = AVSpeechSynthesisVoice.speechVoices().filter({ $0.name == "Karen" }).first
    }

    func sayThis(_ phrase: String){
        let utterance = AVSpeechUtterance(string: phrase)
        utterance.voice = voiceToUse
        utterance.rate = 0.5
        voiceSynth.speak(utterance)
    }
}
Run Code Online (Sandbox Code Playgroud)

更新2:错误的解决方法......

使用上面提到的isSpeaking属性,在gameScene中:

voice.sayThis(targetsToSay)

    let initialPause = SKAction.wait(forDuration: 1.0)
    let holdWhileSpeaking = SKAction.run {
        while self.voice.voiceSynth.isSpeaking {print("STILL …
Run Code Online (Sandbox Code Playgroud)

ios avspeechsynthesizer swift

0
推荐指数
1
解决办法
2103
查看次数

将语音保存到文件 - 缓冲错误 - Swift

去年我问了一个关于如何将语音保存到文件的问题。 堆栈溢出问题 - 将语音合成录制到保存的文件中

感谢 kakaiikaka 的回答。虽然它确实有效,但缓冲时出现了一些错误。以下代码隔离了该问题。在 iOS 16 中,尽管存在错误,但它确实可以按预期工作。我按预期打印的完成处理程序。以下错误打印了 20 次左右。

2023-06-17 15:35:33.811838-0400 RecordSpeechFix [3899:1958883] [AXTTSCommon] TTSPlaybackEnqueueFullAudioQueueBuffer:错误-66686排队缓冲区

iOS 17(第一个测试版)存在一个更具描述性的错误,并且它不起作用。完成处理程序不打印。以下错误打印了 20 次左右。

输入数据过程返回不一致的 512 个数据包(2,048 字节);按每个数据包 2 字节计算,实际上是 1,024 个数据包

我假设这是同一个问题。修复 iOS16 的错误也将修复 iOS17 的错误。我的这个假设可能是错误的。

//
//  ContentView.swift
//  RecordSpeechFix
//
//  Created by Dennis Sargent on 6/16/23.
//

import AVFoundation
import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Record Speech")
        }
        .padding()
        .onTapGesture {
            saveSpeechUtteranceToFile(phrase: "This produces warnings.") {
                print("In …
Run Code Online (Sandbox Code Playgroud)

avfoundation ios avspeechsynthesizer swift swiftui

0
推荐指数
1
解决办法
547
查看次数