簡體   English   中英

將 MusicTimeStamp (AudioToolbox) 轉換為毫秒

[英]Convert MusicTimeStamp (AudioToolbox) to Milliseconds

我正在使用MIKMIDI框架,這是使用AudioToolbox類型MusicTimeStamp

如何將此時間戳轉換為毫秒?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM