我正在使用MIKMIDI框架,这是使用AudioToolbox类型MusicTimeStamp
如何将此时间戳转换为毫秒?
答案 0 :(得分:1)
MusicTimeStamp
是原始节拍数,您需要知道您正在使用的音乐的速度(和速度图,速度不是不变量)才能将其转换为毫秒。< / p>
在MusicSequence
之外,MTS无法映射到待命时间。
编辑:如果有帮助,可以将CoreMedia CMTime
转换为挂号时间。
答案 1 :(得分:0)
MIKMIDI中有一个新的API。在我撰写本文时,它位于分支(1.8
)中,但应尽快合并,并在1.8版本中发布。可以轻松进行您要的转换。
在序列的上下文中,执行以下操作:
let seconds = sequence.timeInSeconds(forMusicTimeStamp: musicTimeStamp)
还有一种在相反方向转换的方法。 MIKMIDISequencer
具有非常相似但更复杂的方法(以解决循环,速度覆盖等),以进行相同类型的转换。
如果没有MIKMIDI中的新API,您仍然可以使用MusicSequenceGetSecondsForBeats()
。您可以使用其MusicSequence
属性获得MIKMIDISequence
的基础musicSequence
:
var timeInSeconds = Float64(0)
MusicSequenceGetSecondsForBeats(sequence, musicTimeStamp, &timeInSeconds)
据我所知,即使您使用MusicPlayer
API也不会考虑循环,如果在MIKMIDISequencer
上设置了速度,则肯定不会覆盖循环,因此如果可能的话,您应该更喜欢上面的MIKMIDI的API。