2014-02-26 58 views
0

我一直在爲使用libspotify的項目編寫Spotify支持,並且當我想實現搜索時,我注意到顯然沒有獲取當前播放位置的函數。換句話說,與sp_session_player_seek()相對應,它返回當前偏移量。如何使用libspotify獲取當前播放位置?

有些人似乎做的是保存上次seek()調用中使用的偏移量,然後在music_delivery中的計數器中累積幀數。加上存儲的偏移量,當前位置可以這樣計算,是的 - 但是這是真正的唯一方法嗎?

我知道Spotify Web API有一種獲取當前位置的方法,所以很奇怪libspotify沒有。

回答

1

保持跟蹤它自己的方式來做到這一點。

查看它的方法是這樣的:libspotify實際上不播放音樂,所以它不可能知道當前位置。

所有libspotify是否會傳遞您的PCM數據。應用程序的職責是將其發佈給揚聲器,並且音頻流水線總是會有各種緩衝區和延遲以及不適用的地方。當你尋找時,你並不是說「將播放移到這裏」,而是說「從這一點開始給我PCM」。

事實上,如果你只是計算幀,然後將它們傳遞給音頻管道,你的位置可能不正確,如果不考慮到管道的緩衝區等

0

您可以隨時跟蹤定位自己。

例如:

void SpSeek(int position) 
{ 
    sp_session_player_seek(mSession, position); 
    mMsPosition = position; 
} 


int OnSessionMusicDelivery(sp_session *session, const sp_audioformat *format, const void *frames, int numFrames) 
{ 
    return SendToAudioDriver(...) 
} 

在我的情況我使用OpenSL(機器人),每當緩衝器光潔度哪裏numFrames是我更新的位置的這樣

值司機消耗的幀數。