[英]Convert MusicTimeStamp (AudioToolbox) to Milliseconds
MusicTimeStamp
是原始節拍數,您需要知道您正在處理的音樂的速度(和速度圖,速度不是不變的),以便將其轉換為毫秒。
在MusicSequence
之外,無法將 MTS 映射到牆上時間。
編輯:如果有幫助,可以將 CoreMedia CMTime
轉換為掛牆時間。
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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.