0

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

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

4

2 回答 2

1

MusicTimeStamp是一个原始节拍计数,您需要知道您正在使用的音乐的速度(和速度图,速度不是不变的),以便将其转换为毫秒。

MTS之外的MusicSequence时间不能映射到墙上时间。

编辑:如果有帮助,可以将CoreMediaCMTime转换为挂墙时间。

于 2017-02-21T05:31:53.087 回答
1

MIKMIDI 中为此提供了新的 API。在我写这篇文章时它在一个分支 ( 1.8) 中,但应该很快被合并,并在 1.8 版本中发布。它使您要求的转换变得更加容易。

在序列的上下文中,执行以下操作:

let seconds = sequence.timeInSeconds(forMusicTimeStamp: musicTimeStamp)

还有一种方法可以反向转换。MIKMIDISequencer具有非常相似但更复杂的(考虑循环、速度覆盖等)方法来执行相同类型的转换。

如果没有 MIKMIDI 中的这个新 API,您仍然可以使用MusicSequenceGetSecondsForBeats(). 您可以使用其属性MusicSequence获取底层证券:MIKMIDISequencemusicSequence

var timeInSeconds = Float64(0)
MusicSequenceGetSecondsForBeats(sequence, musicTimeStamp, &timeInSeconds)

MusicPlayer据我所知,即使您使用API进行循环,也不会考虑循环,如果设置为 on MIKMIDISequencer,当然也不会被覆盖,所以如果可能的话,您应该更喜欢上面的 MIKMIDI 的 API。

于 2019-09-02T06:18:56.480 回答