播放mp3音频时显示字幕

时间:2014-04-08 10:40:04

标签: ios metadata core-audio

我需要构建一个应用程序,它会在播放音频时突出显示String中的单词。我需要与声音同步完成。音频不是连续的。例如“你好,你好吗?” “Hello”和“How”之间可能存在延迟。

我检查了MIDI文件格式,但它只能保存音符,我的mp3有语音。

我看到的最后一个选项是维护一个文件,其中包含音频中单词的开始时间,并在显示时突出显示。

任何人都可以提出更好的选择吗?

1 个答案:

答案 0 :(得分:0)

ID3标记支持SYLT或同步的歌词框架。来自http://id3.org/id3v2.4.0-frames

  

4.9。同步歌词/文字

     

这是合并单词,说或唱的另一种方式   歌词,在音频文件中作为文本,但这次与...同步   音频。它也可能用于描述事件,例如   发生在舞台上或屏幕上与音频同步。该   标题包括内容描述符,用as表示   终止文本字符串。如果未输入描述符,则为“内容”   描述符'仅为$ 00(00)。

 <Header for 'Synchronised lyrics/text', ID: "SYLT">
 Text encoding        $xx
 Language             $xx xx xx
 Time stamp format    $xx
 Content type         $xx
 Content descriptor   <text string according to encoding> $00 (00)
     

内容类型:$ 00是其他                      01美元是歌词                      02美元是文本转录                      $ 03是机芯/部件名称(例如&#34; Adagio&#34;)                      $ 04是活动(例如&#34; Don Quijote进入舞台&#34;)                      $ 05是和弦(例如&#34; Bb F Fsus&#34;)                      $ 06是琐事/&#39;弹出&#39;信息                      $ 07是网页的网址                      $ 08是图片的网址

     

时间戳格式:

 $01  Absolute time, 32 bit sized, using MPEG [MPEG] frames as unit
 $02  Absolute time, 32 bit sized, using milliseconds as unit
     

绝对时间意味着每张邮票都包含来自中国的时间   文件的开头。

     

框架标题后面的文字与中文标题不同   不同步的歌词/文本转录在一个主要方面。每个
  音节(或任何大小的文字被认为是方便的   编码器)是一个以空字符结尾的字符串,后跟一个时间戳
  表示它所属的声音文件中的位置。因此每个同步具有
  以下结构:

 Terminated text to be synced (typically a syllable)
 Sync identifier (terminator to above string)   $00 (00)
 Time stamp                                     $xx (xx ...)
     

&#39;时间戳&#39;如果为
,则设置为零或省略整个同步   直接位于声音的开头。所有时间戳
  应按时间顺序排序。同步可以被认为是   作为后续字符串的验证器。

     

所有&#34; SYLT&#34;允许使用换行符。帧必须   在一个框架中的每个条目(名称,事件等)之后使用   内容类型$ 03 - $ 04。

     

关于空白字符的一些注意事项:空白字   分隔单词应标记新单词的开头,因此为   发生在新单词的第一个音节前面。这也是
  对新行字符有效。一个逗号后跟一个逗号应该是   不要用同步(音节和逗号)分开   应该在同步之前。)

     

一个例子:&#34; USLT&#34;通道

 "Strangers in the night" $0A "Exchanging glances"
     

将是&#34; SYLT&#34;编码为:

 "Strang" $00 xx xx "ers" $00 xx xx " in" $00 xx xx " the" $00 xx xx
 " night" $00 xx xx 0A "Ex" $00 xx xx "chang" $00 xx xx "ing" $00 xx
 xx "glan" $00 xx xx "ces" $00 xx xx
     

可能有多个&#34; SYLT&#34;每个标签中的框架,但只有一个   使用相同的语言和内容描述符。

并且几天前taglibhttps://github.com/taglib/taglib)的主分支支持SYLT帧。您可以使用taglib提取显示器的同步歌词。