如何在iPhone上以卡拉OK风格显示歌词?

我目前正在创build一个播放音乐的应用程序。 我想添加一个function,显示音乐播放时的音乐歌词,并标记文本的当前位置以匹配歌曲中的当前位置。 弹跳球效果,就像您在歌曲播放时在每个卡拉OK屏幕上看到的一样。 我一直在考虑扩展我的咖啡文件,添加“string块”,然后再读出来。 这是正确的方法来做到这一点? 有没有人知道一个更好/更容易/正常的方式来实现我的目标? 由于我不确定如何同步所有内容,因此我会很乐意提供任何build议,代码示例或有用的评论。 也许有人已经这样做了,并会很乐意为我提供build议。

提前感谢提供的任何信息。

艾伦

大多数卡拉OK应用程序这些天使用.Kar文件扩展名。 这是一个带有一些注释的稍微麻烦的MIDI文件,文件大小很小。

我不知道你会从哪里开始阅读。 你可以问这些家伙: http : //www.ikaraokeapp.com/

大多数小开发者乐于帮助别人。

您应该可以通过MusicPlayer API执行此操作,特别是假设miditypes的音乐可接受的MusicTrack MIDIMetaEvent

 MIDIMetaEvent Describes a MIDI metaevent such as lyric text, time signature, and so on. typedef struct MIDIMetaEvent { UInt8 metaEventType; UInt8 unused1; UInt8 unused2; UInt8 unused3; UInt32 dataLength; UInt8 data[1]; } MIDIMetaEvent; 

或者,你也可能会在iD3元数据上进行一些改进,以便存储歌词和时间信息。

无论哪种方式,将有大量的文件准备在歌词和时间到音乐文件。

执行此操作的标准方法是使用其他答案build议的kar文件扩展名。 这里是一些更多的细节。

.kar扩展名只是表示标准的MIDI文件包含歌词信息。 要build立你的卡拉OK播放器,你需要做两件事:播放midi文件的乐器部分并显示歌词。

这可以通过两种方式来实现。 您可以使用内置的MusicPlayer播放midi文件,然后从虚拟端点访问歌词信息: here

您需要访问代码为0x01(文本)或0x05(歌词)的midi元信息。 这些消息将歌词数据存储为一系列hex数字,其中每个hex数字表示一个ASCII字符。

这种方法允许您播放MIDI文件并访问歌词。 问题是你需要能够提前显示歌词,这样用户才能在播放之前阅读它们。

要做到这一点,你可以手动parsingMIDI文件: 这里

您需要循环播放MIDI文件并提取带有时间戳的文本歌词。 然后你可以提前显示一段歌词,改变颜色或者在歌词到期时做一个弹跳球效果。