我使用AUGraph,其中包含几个(例如10个)播放器,混音器和输出。 如果我打开延迟大约0.2秒的玩家 - 没关系,他们都玩,但如果我同时打开它们,只有3-4个玩家玩。
没关系,所有玩家都玩,但有延迟:
for(int i=0; i<10; i++){
[players[i] play];
usleep(200000);
}
不行,只有2-3名球员参赛,但同步:
for(int i=0; i<10; i++){
[players[i] play];
}
在[player play]
方法中:
AudioTimeStamp startTime;
memset (&startTime, 0, sizeof(startTime));
startTime.mFlags = kAudioTimeStampSampleTimeValid;
startTime.mSampleTime = -1;
AudioUnitSetProperty(audioUnit,
kAudioUnitProperty_ScheduleStartTimeStamp,
kAudioUnitScope_Global,
0,
&startTime,
sizeof(startTime));
AudioUnitSetProperty
返回noErr。
似乎AudioUnitSetProperty中有几个线程存在冲突,我无法控制。
有什么想法吗?
答案 0 :(得分:0)
在kAudioUnitProperty_ScheduleStartTimeStamp解决问题之前添加kAudioUnitProperty_ScheduledFilePrime设置。
UInt32 defaultVal = 0;
AudioUnitSetProperty(audioUnit,
kAudioUnitProperty_ScheduledFilePrime,
kAudioUnitScope_Global,
0,
&defaultVal,
sizeof(defaultVal));