gpt4 book ai didi

ios5 - 设置一个 ScheduledAudioFileRegion 重新开始

转载 作者:行者123 更新时间:2023-12-04 18:15:37 25 4
gpt4 key购买 nike

我正在尝试在点击按钮并使用 iOS 5 文件播放器音频单元时播放声音。

文件播放器使用 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它?我希望从开始到结束按下按钮时播放声音,但是当再次点击按钮时,即使文件当前正在播放,它也应该从头开始。文件播放器音频单元可以做到这一点吗?

最佳答案

调用 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;

创建它,并在第一次调用 play 之前从上面的第一个代码段调用相关的 SetProperty。

关于ios5 - 设置一个 ScheduledAudioFileRegion 重新开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11780946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com