2014-10-01 46 views
1

我很困惑AUAudioFilePlayer的以下屬性。從蘋果公司的文件是混淆充其量:AudioToolbox AUAudioFilePlayer屬性說明

  1. kAudioUnitProperty_ScheduleStartTimeStamp

  2. kAudioUnitProperty_ScheduledFilePrime

  3. kAudioUnitProperty_ScheduledFileRegion

可有人請提供關於每個使用一些澄清?這似乎是他們的用法重疊?謝謝。

回答

2

是的,它很混亂。

StartTime正是您想象的那樣:它爲您爲該音頻單元安排的所有片/區定義了播放時間線的開始。由於在播放之前需要將音頻數據拉入RAM,因此「啓動」基本上告訴系統開始將音頻文件(指定數量的幀)讀入存儲器。

您可以選擇僅播放文件的一部分(在文件的末尾開始一些幀數和/或結束一些幀數)。這些被稱爲「區域」,如果您只想播放音頻文件的一部分(或區域),則這是您使用的屬性。

看一看AudioUnitProperties.h:

開始時間

音頻單元將不播放任何片下面的初始化或重置,直到 其開始時間還沒有確定。開始時間確定時間軸 的開始:時間表中所有切片的時間戳相對於 開始時間。

通過設置具有AudioTimeStamp結構的kAudioUnitProperty_ScheduleStartTimeStamp 屬性來設置開始時間。如果時間戳包含有效採樣時間 (timestamp.mFlags & kAudioTimeStampSampleTimeValid),則當傳遞給AudioUnitRender函數的時間戳達到 指定採樣時間時,開始播放 。如果指定的採樣時間爲-1,則在下一個渲染週期的 開始播放。

如果開始時間戳不包含有效樣品的時間,但確實含有一個 有效主機時間(timestamp.mFlags & kAudioTimeStampHostTimeValid),則 指定的主機時間被轉換爲採樣時間處播放將 開始。主機時間爲0表示「在下一個渲染週期開始」。

可以查詢kAudioUnitProperty_ScheduleStartTimeStamp屬性,以獲得開始播放的時間 。如果尚未達到開始時間,則返回的時間戳將是上次設置的主機應用程序的任何內容。

底漆

你應該安排要播放 初始文件區之後,並開始播放前設定kAudioUnitProperty_ScheduledFilePrime。此SetProperty調用將開始讀取音頻文件,並且不會返回,直到讀取屬性值指定的幀數。

調度地區

要安排音頻文件的區域的重放,設置kAudioUnitProperty_ScheduledFileRegion屬性。這是一個ScheduledAudioFileRegion結構。 mTimeStamp.mSampleTime必須是有效的,並且相對於設備的開始時間進行解釋 - 開始時間語義(使用kAudioUnitProperty_ScheduleStartTimeStamp)與AUScheduledSoundPlayer的相同。與ScheduledAudioSlice結構不同,該單元製作了ScheduledAudioFileRegions的副本,因此您可以在堆棧上創建它們,或者在調度它們之後立即重新使用/處理它們。

+0

感謝,它仍然沒有解釋這一切,但它是很好的方便的信息,所以我格式化了一下 – believesInSanta 2014-10-03 10:49:00

+0

哪些部分不清楚? – Nick 2014-10-03 13:05:48

+0

我還有點不清楚Priming是做什麼的,以及開始時間和調度區域的'AudioTimeStamp'之間的區別...... – believesInSanta 2014-10-03 19:32:10