【问题标题】:Display subtitles while playing mp3 audio播放 mp3 音频时显示字幕
【发布时间】:2014-04-08 10:40:03
【问题描述】:

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

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

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

有人可以提出更好的选择吗?

【问题讨论】:

    标签: ios metadata core-audio


    【解决方案1】:

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

    4.9。同步歌词/文本

    这是合并单词的另一种方式,说或唱 歌词,在音频文件中作为文本,但是,这一次,与 音频。它也可能用于描述事件,例如 与音频同步发生在舞台或屏幕上。这 标头包含一个内容描述符,表示为 终止的文本字符串。如果没有输入描述符,'Content 描述符'仅为 $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 是机芯/零件名称(例如“Adagio”) $04 是事件(例如“唐吉诃德上台”) $05 是和弦(例如“Bb F Fsus”) $06 是琐事/'弹出'信息 $07 是网页的 URL $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 ...)
    

    “时间戳”设置为零或忽略整个同步如果
    直接位于声音的开头。所有时间戳
    应按时间顺序排列。可以考虑同步
    作为后续字符串的验证器。

    所有“SYLT”帧中都允许使用换行符,并且必须 在框架中的每个条目(名称、事件等)之后使用 内容类型 $03 - $04。

    关于空白字符的一些注意事项:空白
    分隔词应该标记一个新词的开始,因此
    出现在新词的第一个音节之前。这也是
    对换行符有效。一个音节后跟一个逗号应该
    不被同步分开(音节和逗号
    应该在同步之前)。

    一个例子:“USLT”段落

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

    将“SYLT”编码为:

     "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
    

    每个标签中可能有多个“SYLT”框架,但只有一个
    具有相同的语言和内容描述符。

    截至几天前,taglib (https://github.com/taglib/taglib) 的主分支支持SYLT 框架。您可以使用 taglib 来提取同步的歌词以供显示。

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 2021-05-09
      相关资源
      最近更新 更多