Swift: отображать транскрипцию с отметкой времени - PullRequest
0 голосов
/ 26 мая 2020

Я делаю приложение, которое преобразует речь в текст, и теперь я пытаюсь отобразить результат на экране, и мне интересно, как это сделать (из приложения Otter):

Basi c идея:

  • 1 разговор состоит из нескольких предложений
  • каждое предложение состоит из нескольких слов, у этих слов есть собственные временные метки и будет выделен, чтобы соответствовать текущему времени воспроизведения звука
  • Мы можем щелкнуть каждое слово, чтобы воспроизвести звук с этой отметкой времени
  • Вы можете видеть в конце GIF, мы можем прокрутить ползунок и слова будут автоматически выделены

Мои мысли:

  • Я думаю о рендеринге UILabel (или UIButton), который представляет для каждого словом, сделав это, мы можем щелкнуть по каждой метке и перейти к правильному времени, но я не знаю, как добавить UILabel к другому UILabel в той же строке, пробовал искать, но не могу найти решение. Предложение может быть длинным и содержать несколько слов, поэтому при необходимости его нужно будет разбить на многострочный
  • Также мне интересно, чтобы метки автоматически выделялись при воспроизведении звука (или при прокрутке ползунка) они должны каким-то образом «следить» за изменением времени воспроизведения звука (или изменением значения ползунка). 1 разговор может содержать много предложений, и если мы «смотрим» неэффективно, это приведет к снижению производительности

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

После некоторых исследований и попыток разобраться в себе я обнаружил, что Otter использует UITextView для отображения каждого предложения, и их идея вдохновила меня.

Я закончил sh с UITextView и Приписанный текст для получения такого же результата, как и они

Для наблюдения за изменениями времени воспроизведения я использую наблюдатель значения ключа. В каждом предложении будет соблюдаться время воспроизведения, и если время находится на временной границе предложения, тогда предложение определит, какое слово внутри него должно быть выделено

0 голосов
/ 26 мая 2020

Я бы предпочел использовать UIButton вместо UILabel, потому что для него легко настроить распознаватель касаний, и он поддерживает выделение из коробки. Если мы говорим о простом способе разместить несколько представлений одно за другим, первая мысль - использовать UIStackView - его легко настроить и использовать. Самая сложная часть - отследить воспроизведение звука и синхронизировать его с UI. Первый подход - отслеживать воспроизведение, и когда оно попадает в определенный диапазон транскрипции, получает свой индекс и кнопку выделения с тем же индексом arrangedSubviews из UIStackView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...