2012-08-02 36 views
2

我試圖播放聲音時,它的一個按鈕,它使用iOS 5文件播放器音頻單元。設置ScheduledAudioFileRegion重新開始

文件播放器播放使用ScheduledAudioFileRegion音頻和可以預定需要

ScheduledAudioFileRegion rgn; 
memset (&rgn.mTimeStamp, 0, sizeof(rgn.mTimeStamp)); 
rgn.mTimeStamp.mFlags = kAudioTimeStampSampleTimeValid; 
rgn.mTimeStamp.mSampleTime = 0; 
rgn.mCompletionProc = NULL; 
rgn.mCompletionProcUserData = NULL; 
rgn.mAudioFile = audioFile; 
rgn.mLoopCount = INT_MAX; 
rgn.mStartFrame = 0; 
rgn.mFramesToPlay = nPackets * fileASBD.mFramesPerPacket; // plays entire file. 

我怎樣才能知道這個文件的播放,只要按下一個按鈕,從一開始就播放聲音玩儘可能多的幀,還是每次都必須創建一個新的區域和memset?我希望從開始到結束按下按鈕時播放的聲音,但是當再次點擊按鈕時,即使文件正在播放,也應該從頭開始播放。這是可能的文件播放器音頻單元?

+0

您不需要使用'INT_MAX'來獲取無限循環,將'mLoopCount'設置爲'-1'將導致該區域無限循環。 – 2012-08-14 14:58:21

+0

是否這樣,你*只*想要一個聲音文件播放時按下按鈕,或者你想做的比例如,觸發重疊的聲音文件,添加效果等?如果它只是一個簡單的觸發器,那麼按照[這裏](http://stackoverflow.com/a/2778996/172218)的描述使用'AudioServicesPlaySystemSound'會更加直接。對於簡單的聲音文件觸發,AudioUnit是矯枉過正的。 – 2012-08-14 15:08:56

+0

我正在使用核心音頻音頻單元捕捉聲音並創建子圖的電子地圖。我需要在主混音中捕捉這些觸發的聲音。 – jarryd 2012-08-18 13:18:46

回答

1

你可不只是讓你的UIButton在調用Play之前觸發一個Stop動作。

+1

如果我可能會問,該怎麼辦?我需要最大的響應速度,而不需要通過更高級別的框架重定向代碼。我正在使用核心音頻,因爲我需要Tim的答案。 – jarryd 2013-01-04 20:44:58

3

撥打AudioUnitReset停止播放,然後重播並再次播放。瞬間發生(或儘量接近沒什麼區別。)

做到這一點,只要您的用戶按下按鈕:

// Reset 
AudioUnitReset(filePlayerUnit, kAudioUnitScope_Global, 0); 
// Prime (have to do this before every play call.) 
UInt32 defaultVal = 0; 
AudioUnitSetProperty(filePlayerUnit, 
        kAudioUnitProperty_ScheduledFilePrime,     
        kAudioUnitScope_Global, 
        0, 
        &defaultVal, 
        sizeof(defaultVal)); 
// Play (again) 
AudioUnitSetProperty(_playerUnit, 
        kAudioUnitProperty_ScheduleStartTimeStamp, 
        kAudioUnitScope_Global, 
        0, 
        &startTime, 
        sizeof(startTime)); 

你已經有時間戳的地區。你需要這些,但你也必須創建一個AudioTimeStamp

AudioTimeStamp startTime; 
memset(&startTime, 0, sizeof(startTime)); 
startTime.mFlags = kAudioTimeStampSampleTimeValid; 
startTime.mSampleTime = -1; 

創建此,並呼籲從第一個片段相關的SetProperty上面,你叫打在第一時間之前。

+0

謝謝蒂姆,請看看這個。 – jarryd 2013-01-04 20:46:15

+0

我不得不設置地區也玩了! – Renetik 2014-10-07 18:18:18

相關問題