直接播放 AVSpeechSynthesizer 生成的音频缓冲区

2023-12-27

我们需要对输出进行音频处理AVSpeechSynthesizer。所以我们开始使用write的方法AVSpeechSynthesizer类在顶部应用处理。它的。我们目前拥有的:

var synthesizer = AVSpeechSynthesizer()
var playerNode: AVAudioPlayerNode = AVAudioPlayerNode()
fun play(audioCue: String){
   let utterance = AVSpeechUtterance(string: audioCue)
   synthesizer.write(utterance, toBufferCallback: {[weak self] buffer in
      // We do our processing including conversion from pcmFormatFloat16 format to pcmFormatFloat32 format which is supported by AVAudioPlayerNode
      self.playerNode.scheduleBuffer(buffer as! AVAudioPCMBuffer, completionCallbackType: .dataPlayedBack)
   }
}

在 iOS 16 之前,所有这些都工作正常,但在 iOS 16 中,我们开始遇到此异常:

[AXTTSCommon] TTSPlaybackEnqueueFullAudioQueueBuffer: error -66686 enqueueing buffer

不确定这个异常到底意味着什么。因此,我们正在寻找解决此异常的方法,或者可能是播放缓冲区的更好方法。

UPDATE:

创建了一个空项目进行测试,结果表明,如果使用空块调用 write 方法,则会生成以下日志:


我用于 Swift 项目的代码:

let synth = AVSpeechSynthesizer()    
let myUtterance = AVSpeechUtterance(string: message)
myUtterance.rate = 0.4
synth.speak(myUtterance)

可以移动让合成器 = AVSpeechSynthesizer()脱离此方法并在该类的顶部声明并使用。

为 Xcode14 和 iOS 16 启用的设置:如果您使用的是 XCode14 和 iOS16,可能是语音内容下的语音未下载,您将在控制台上收到错误消息,提示标识符、来源、内容为零。您需要做的就是,转到设置中的辅助功能 -> 语音内容 -> 语音 -> 选择任何语言并下载任何配置文件。运行您的声音后,您将能够听到传递的文本中的语音。

它现在对我有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

直接播放 AVSpeechSynthesizer 生成的音频缓冲区 的相关文章

随机推荐

  • “Hello World”——TDD 方式?

    自从我接触 TDD 以来 我一直在思考这个问题 构建 Hello World 应用程序的最佳方法是什么 这将在控制台上打印 Hello World 使用测试驱动开发 我的测试会是什么样子 以及大约什么班 Request No 类似维基百科
  • Apache Flink(如何唯一标记作业)

    是否可以使用唯一的名称来标记作业 以便我可以在以后停止它们 我真的不想 grep 并保留作业 ID 简而言之 我想在部署过程中停止一项作业并部署新作业 您可以在启动作业时为其命名execute name String 打电话 例如 val
  • 如何清除 IE 的图标缓存?

    我为我的网站定义了一个最喜欢的图标 任何访问过该网站的浏览器after我添加的图标可以很好地显示favicon 但我自己的浏览器拒绝显示图标 我已经尝试了我能想到的链接的所有变体
  • Java大文件AES加密很慢

    我正在尝试使用 AES CBC 算法加密 512 Mb 文件 大约需要 7 秒 这太长了 如何减少加密时间并使其更快 我使用固定密钥并尝试使用 CipherOutStream 以及 cipher update 而不是 cipher dofi
  • 为什么 Haskell 中基于 [Char] 的输入比基于 [Char] 的输出慢得多?

    这是一个不使用的常识 Char 在 Haskell 中读取大量数据 一用ByteString来完成这项工作 对此通常的解释是Chars 很大并且列表增加了它们的开销 然而 这似乎不会对输出造成任何问题 例如下面的程序 main intera
  • git重置后未暂存的文件消失了--hard

    我尝试过git reset hard HEAD n from git reflog我丢失了当前未暂存文件的所有内容 未暂存的文件是最后一个git add我做到了 在那之前我尝试过git reset到最后git commit 我所有的文件都消
  • 反应 onClick 问题

    我是 React 新手 我正在尝试将 onClick 事件连接到图像 以查看已按下的对象但无法使其工作 我已经尝试了在该网站上找到的几个答案 但没有一个起作用 可能是因为 var createItem jsx React DOM var R
  • Mono for Android OnPause 事件在 Galaxy Nexus 上未触发

    我整理了我的第一个 Mono for Android 项目 目标 API 级别 8 最低 Android 2 2 并将其部署到运行 2 3 4 的 HTC Incredible 1 一切都很顺利 并且在我的主要活动中出现了断点OnCreat
  • 对话框 ui 中的复选框不可选中

    我正在尝试使用 jQuery UI 对话框解决 z index 问题 类似于问题无法选择或取消选择 jQuery UI 模态对话框中的复选框 https stackoverflow com questions 10542327 cant s
  • 如何在 docker 容器中运行 npm 命令?

    我正在尝试在 docker 容器内以开发模式运行角度应用程序 但是当我使用 docker compose build 运行它时 它可以正常工作 但是当我尝试放置容器时 我收到以下错误 ERROR for sypgod Cannot star
  • jackson - 具有受控精度的双精度的 json 编码

    我正在使用双值数组对复杂的 Map 结构进行编码 高精度并不重要 输出大小才是重要的 所以我试图让 JSON 工具 在本例中为 Jackson 使用提供的 DecimalFormat 序列化双精度值 以下是我的最佳镜头 但由于对象映射器未选
  • C++(Windows)中的分配数及其可预测性

    我在用 CrtDump内存泄漏 http msdn microsoft com en gb library d41t22sb aspx识别我们软件中的内存泄漏 我们在多线程应用程序中使用第三方库 这个库确实存在内存泄漏 因此在我们的测试中
  • 加载 Google 地图时出现问题 - SensorNotRequired

    我正在尝试在 WordPress 网站上运行 Google 地图 代码在此完美运行JSFIDDLE http jsfiddle net 3VKQ8 55 但是当我将其带到 WordPress 时 我收到此错误 Google 地图 API 警
  • 线程过剩: glutPostRedisplay 被忽略

    我有一个程序可以更新程序输出 然后程序的状态会发生变化 当时间计时器 不是 openGL 计时器 而是在线程中实现的 发生时 以及从 glut 注册键盘输入 使用 glutKeyboardFunc 回调 时 就会发生这种情况 这两个事件都会
  • 缓冲区和缓存的区别?

    任何人都可以详细说明 系统内存中的缓冲区和缓存有什么区别 A buffer只是一个在短时间内保存数据的容器 当在任何给定时间出现的数据多于消费者可以使用 处理的数据时 这是一种先进先出的情况 数据传入 可能会被缓冲 并在一段时间后按照传入的
  • 为什么将 PDF 转换为纯文本如此困难?

    我需要将一些 PDF 转换回文本 我尝试了很多软件和在线工具 但结果总是平庸 从技术上来说为什么这么难 我们不要假设您正在谈论的 PDF 仅包含一些位图图像 因为很明显 在这种情况下您只能诉诸 OCR 及其所有限制 我们假设文本是在手边的
  • 如何从 heroku 访问私有 github 存储库?

    我有一个私人存储库 在部署到 Heroku 时我试图访问它 但是 Heroku 不允许我克隆私有存储库 并给出以下错误 正如我所期望的 Host key verification failed fatal The remote end hu
  • C:“zsh:中止”错误

    这是我的程序 include
  • SwiftUI - 按下按钮和导航时带有错误消息的表单

    我有以下场景 我有一个文本字段和一个按钮 我需要的是在该字段为空的情况下显示一条错误消息 如果不是 则将用户导航到下一个屏幕 我尝试通过使用字段值并检查按下按钮时是否为空来有条件地显示错误消息 但是 我不知道如何导航到下一个屏幕 struc
  • 直接播放 AVSpeechSynthesizer 生成的音频缓冲区

    我们需要对输出进行音频处理AVSpeechSynthesizer 所以我们开始使用write的方法AVSpeechSynthesizer类在顶部应用处理 它的 我们目前拥有的 var synthesizer AVSpeechSynthesi