2012-08-02 37 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

相关问题