Не самый лучший ответ, который я знаю, но очень похожее решение обсуждалось в одном из видеороликов WWDC 2011 с использованием Core Animation.
Найдите видео с названием Core Animation Essentials (должно быть видео 421 на iTunes U для WWDC 2011). Пример должен быть около минуты 29. По сути, сценарий состоял в том, что был какой-то шар, подпрыгивающий над лирикой, которую играли на песню. Проект рассказывает о том, как оживить время и положение над словами, используя интересную идею ...
Хотя на разработку потребуется немного времени, реализуйте проект с NSTimer и одновременно начинайте свою песню. Реализуйте проект таким образом, чтобы при каждом нажатии на экран смещение от последнего временного интервала вставлялось в массив NSMutableSArray, который затем записывается в файл. Теперь запустите проект и создайте временные метки для слов, нажимая вниз, когда каждое слово спето. (Это предполагает, что вы уже знаете, какие песни вы собираетесь исполнить заранее, и скорость пения не слишком высокая). Хорошо, теперь у вас есть метаданные.
Я бы рекомендовал сначала попробовать прыгающий мяч, потому что реализация уже описана, и я вижу пару проблем с тем, что вы пытаетесь реализовать. В частности, (я могу ошибаться), но я не думаю, что в UIlabel / NSString есть какие-либо методы для выделения подстрок. Это означает, что вам, возможно, придется сделать ярлык для каждого отдельного слова, что может стать очень утомительным ... Так что посмотрите это видео и, надеюсь, вы сможете что-то из этого извлечь. Удачи!