将MusicTimeStamp(AudioToolbox)转换为毫秒

时间:2017-02-19 18:38:22

标签: ios audiotoolbox mikmidi

我正在使用MIKMIDI框架,这是使用AudioToolbox类型MusicTimeStamp

如何将此时间戳转换为毫秒?

2 个答案:

答案 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。