我使用的是米米迪框架,这使用的是AudioToolbox类型的MusicTimeStamp
如何将此时间戳转换为毫秒?
发布于 2017-02-21 05:31:53
MusicTimeStamp是一个原始的节拍计数,您需要知道您正在处理的音乐的速度(以及节奏映射,速度不是不变的),以便将其转换为毫秒。
在MusicSequence之外,MTS不能映射到墙时间。
编辑:如果有帮助,可以将CoreMedia CMTime转换为墙时间。
发布于 2019-09-02 06:18:56
在MIKMIDI中有新的API。在我写这篇文章时,它在一个分支(1.8)中,但是应该很快被合并,并在1.8版本中发布。它可以让你更容易完成你想要的转换。
在一个序列的上下文中,做:
let seconds = sequence.timeInSeconds(forMusicTimeStamp: musicTimeStamp)还有一种方法可以向相反的方向转换。MIKMIDISequencer有非常类似的,但更复杂(考虑循环,节奏覆盖等)。方法进行相同类型的转换。
在MIKMIDI中没有这个新的API,您仍然可以使用MusicSequenceGetSecondsForBeats()。可以使用MIKMIDISequence的musicSequence属性获取MIKMIDISequence的底层musicSequence:
var timeInSeconds = Float64(0)
MusicSequenceGetSecondsForBeats(sequence, musicTimeStamp, &timeInSeconds)据我所知,即使您是用MusicPlayer API执行循环,也不考虑循环,如果在MIKMIDISequencer上设置了循环,当然也不会考虑重写的速度,所以如果可能的话,您应该更喜欢使用MIKMIDI的API。
https://stackoverflow.com/questions/42331243
复制相似问题