如何在完成声音循环播放时避免用户输入

时间:2010-08-09 13:36:44

标签: iphone xcode audio nsarray

我有一些UIImageViews(动物),通过触摸它们,一个特定的soundloop开始播放。 但是如果用户在同一个视图上触摸两次或更多次,则适当的音量循环会重复开始。我想让触摸的声音播放一次直到结束,而不是用户可以在下次开始播放。 Soundloop的持续时间约为。 3秒。我尝试了一些“睡觉(3);但它在播放声音之前停止了编程...

但如果用户触摸另一个视图,则两种不同的声音可能重叠。

#pragma mark -

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
//Soundfile names in array arrAnimalde
arrAnimalde = [NSArray arrayWithObjects:@"Hund" ,@"Schwein" ,@"Ferkel", nil];

// here are some Views and their triggers
if([touch view] == img_hund){
    trigAnimal = 0;
    }

if([touch view] == img_schwein){
    trigAnimal = 1;
    }

if([touch view] == img_ferkel){
    trigAnimal = 2;
      }

    AudioServicesCreateSystemSoundID ((CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource: [arrAnimalde objectAtIndex: trigAnimal]
 ofType: @"wav"]], &soundFileObject);
    AudioServicesPlaySystemSound (self.soundFileObject);

//if the trigger is the same as before play the sound only once and completely
      }
}

请编写替代解决方案 - 也许有可能在每个if语句中启动和保持声音。

Thanxx

1 个答案:

答案 0 :(得分:1)

您可以在致电[[UIApplication sharedApplication] beginIgnoringInteractionEvents]之前致电AudioServicesPlaySystemSound。声音播放结束后,您可以拨打[[UIApplication sharedApplication] endIgnoringInteractionEvents]以允许再次进行互动。此调用将阻止应用程序中所有内容的交互,这意味着只要您的声音播放,您的用户就无法执行任何操作。请考虑仅阻止您的-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event邮件。你可以通过检查一个布尔值来实现这一点 如果你的声音还在播放。要找出声音何时结束,请使用此功能注册适当的回调:

OSStatus AudioServicesAddSystemSoundCompletion (
   SystemSoundID                           inSystemSoundID,
   CFRunLoopRef                            inRunLoop,
   CFStringRef                             inRunLoopMode,
   AudioServicesSystemSoundCompletionProc  inCompletionRoutine,
   void                                    *inClientData
);