ios - Swift:使用时间戳渲染转录
问题描述
我正在制作一个从语音转换为文本的应用程序,现在我正在尝试在屏幕上显示结果,我想知道如何做这个(来自Otter
应用程序):
基本思路:
- 1 个对话包含多个句子
- 每个句子有多个单词,这些单词有自己的时间戳,并将突出显示以匹配当前音频播放时间
- 我们可以单击每个单词以在该时间戳播放音频
- 可以在 GIF 的末尾看到,我们可以滚动滑块,文字会自动突出显示
我的想法:
- 我正在考虑渲染
UILabel
(或UIButton
)代表每个单词,通过这样做我们可以点击每个标签并跳转到正确的时间,但我不知道如何附加UILabel
到同一行中的另一个UILabel
,尝试搜索但可以'找不到解决办法。一个句子可能很长并且包含多个单词,因为如果需要它需要分成多行 - 另外我想知道,为了在音频播放(或滚动滑块时)使标签自动突出显示,他们应该了解如何“观察”音频播放时间的变化(或滑块值的变化)。1 对话可能包含很多句子,如果我们以低效率的方式“观看”会导致性能不佳
解决方案
我宁愿推荐使用UIButton
而不是UILabel
,因为它很容易设置点击识别器并且它支持开箱即用的突出显示。如果我们谈论一个接一个地放置多个视图的简单方法,首先想到的是使用UIStackView
——它很容易定制和使用。最困难的部分是跟踪音频播放并将其与 UI 同步。第一种方法是跟踪播放,当它进入某个转录范围时,在同一索引处获取其索引和突出显示arrangedSubviews
按钮UIStackView
。
推荐阅读
- mongodb - 如何使用 ID 数组查询 mongodb
- identityserver4 - 从 ProfileService 访问声明
- keras - 使用自定义损失函数在 keras 顺序模型上编译错误
- sql - 在 SNOWFLAKE 的另一个表中使用一列的值作为标识符
- vue.js - 在计算中返回一个 getter 创建一个循环
- azure - AD B2C 直接登录显示 {OIDC:LoginHint} 而不是电子邮件地址
- matlab - 简化涉及查找数组最大元素位置的 Matlab 代码
- html - Div 高度与仅在 IE11 中的属性上声明的不同
- python - 如何创建将在今天或明天起作用的 Python“警报”
- google-apps-script - 超过一万行的 TextFinder 实例的 findNext 上的服务错误