簡體   English   中英

AudioToolbox AUAudioFilePlayer 屬性說明

[英]AudioToolbox AUAudioFilePlayer properties description

我對 AUAudioFilePlayer 的以下屬性感到困惑。 Apple 的文檔充其量是令人困惑的:

  1. kAudioUnitProperty_ScheduleStartTimeStamp

  2. kAudioUnitProperty_ScheduledFilePrime

  3. kAudioUnitProperty_ScheduledFileRegion

有人可以就每種用法提供一些說明嗎? 似乎它們的用法重疊? 謝謝。

是的,這很混亂。

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 的副本,因此您可以在堆棧上創建它們,或者在調度它們后立即重用/處置它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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