![](/img/trans.png)
[英]UIPageViewController - start not at the beginning, but in the middle (page 2)
[英]How to start AUAudioFilePlayer in the middle of a track but loop to the beginning?
在iOS中,我正在使用AUAudioFilePlayer
,我試圖在循環整個音軌之前進行10秒的引導。 我將ScheduledAudioFileRegion
設置如下,以非零幀開始(詳情請參閱: https : //developer.apple.com/library/ios/qa/qa1786/_index.html )
ScheduledAudioFileRegion playRegion;
playRegion.mTimeStamp.mFlags = kAudioTimeStampSampleTimeValid;
playRegion.mTimeStamp.mSampleTime = 0;
playRegion.mCompletionProc = NULL;
playRegion.mCompletionProcUserData = NULL;
playRegion.mAudioFile = audioFileId;
playRegion.mLoopCount = UInt32(-1);
playRegion.mStartFrame = startFrame;
playRegion.mFramesToPlay = UInt32(-1); // i.e. all of it
_(AudioUnitSetProperty(_audioUnit,
kAudioUnitProperty_ScheduledFileRegion,
kAudioUnitScope_Global,
0,
&playRegion,
sizeof(playRegion)),
@"Error setting Audio File Region on the FilePlayer AU");
問題是,當它循環時,它會在startFrame
再次啟動。 我是如何從一開始就開始的?
答案是做兩個時間表。 mTimeStamp.mSampleTime
是相對於等待播放的預定開始時間的長度:
/////////////////////////////////////////
// PRE-AMBLE
/////////////////////////////////////////
// Tell it to play the whole file with optional looping...
// more details: https://developer.apple.com/library/ios/qa/qa1786/_index.html
ScheduledAudioFileRegion playRegion;
playRegion.mTimeStamp.mFlags = kAudioTimeStampSampleTimeValid;
playRegion.mTimeStamp.mSampleTime = 0; // PLAY IMMEDIATELY...
playRegion.mCompletionProc = NULL;
playRegion.mCompletionProcUserData = NULL;
playRegion.mAudioFile = audioFileId;
playRegion.mLoopCount = 0;
playRegion.mStartFrame = startFrame; // ...FROM REQUEST START FRAME
playRegion.mFramesToPlay = UInt32(-1); // i.e. all of it
_(AudioUnitSetProperty(_audioUnit,
kAudioUnitProperty_ScheduledFileRegion,
kAudioUnitScope_Global,
0,
&playRegion,
sizeof(playRegion)),
@"Error setting Audio File Region on the FilePlayer AU");
/////////////////////////////////////////
// LOOP
/////////////////////////////////////////
playRegion.mTimeStamp.mFlags = kAudioTimeStampSampleTimeValid;
playRegion.mTimeStamp.mSampleTime = lengthInFrames - startFrame; // WAIT UNTIL PREAMBLE IS DONE...
playRegion.mCompletionProc = NULL;
playRegion.mCompletionProcUserData = NULL;
playRegion.mAudioFile = audioFileId;
playRegion.mLoopCount = UInt32(-1);
playRegion.mStartFrame = 0; // ...THEN PLAY FROM THE BEGINNING
playRegion.mFramesToPlay = UInt32(-1); // i.e. all of it
_(AudioUnitSetProperty(_audioUnit,
kAudioUnitProperty_ScheduledFileRegion,
kAudioUnitScope_Global,
0,
&playRegion,
sizeof(playRegion)),
@"Error setting Audio File Region on the FilePlayer AU");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.