2013-01-25 33 views
0

我正在使用音頻單元(iOS)從文件播放音樂。我如何獲得我正在播放的音樂的當前時間戳?iOS音頻單元獲取當前時間戳

我發現在playbackCallback函數中有一個類型爲AudioTimeStamp的變量調用「inTimeStamp」。這是我尋找當前時間戳的正確位置嗎?

回答

2

給你:

AudioTimeStamp ts; 
UInt32 size = sizeof(ts); 

AudioUnitGetProperty(THIS->audioPlayerUnit, 
        kAudioUnitProperty_CurrentPlayTime, 
        kAudioUnitScope_Global, 
        0, &ts, &size); 

NSLog(@"TS%f", ts.mSampleTime); 

一種更好的方式來獲得秒是增加

THIS->currentTime = ts.mSampleTime/THIS.streamFormatDescription.mSampleRate; 
+0

我試着用這種方法來獲取我試圖使用音頻設備播放音頻文件的當前時間戳,但它返回一個空的「TS」結構。它根本不會改變以前的值。 (音頻播放正在工作) – neeraj

+0

我得到-10879,即kAudioUnitErr_InvalidProperty作爲返​​回值 – neeraj

+0

此方法僅適用於kAudioUnitSubType_AudioFilePlayer AudioUnit類型,因爲kAudioUnitProperty_CurrentPlayTime僅適用於此單位類型。 – lixing123

0

loretoparisi的答案不適合所有場景。如果你使用kAudioUnitSubType_AudioFilePlayer,那麼試試他的答案;但是如果您使用的是其他音頻單元類型(如RemoteIO單元),則需要設置一個全局變量來存儲音頻單元已渲染的幀數,並在每個渲染週期中更新該值。

player.progress += inNumberFrames/player.canonicalFormat.mSampleRate;