2014-04-25 33 views
0

我正在开发用于实时音频处理的应用程序,我使用'EZAudio'从麦克风(使用GCD)获取实时样本,并使用过滤器处理它们以提取信息一定的带宽。当信息提取成功时,我会让iPhone振动。但iPhone不振动。在iOS中使用GCD意外冲突

以下是使用GCD在EZMicrophoneDelegate中从麦克风获取的示例,缓冲区在填充bufferSize后重新加载。

// EZMicrophoneDelegate 

-(void) microphone:(EZMicrophone *)microphone 
    hasAudioReceived:(float **)buffer 
     withBufferSize:(UInt32)bufferSize 
withNumberOfChannels:(UInt32)numberOfChannels { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     // filtering 
     . 
     . 
     . 
     // information extracting 
     . 
     . 
     . 
     // if extracting succeeded, iPhone vibrate 
     AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 
    }); 
} 

我检查一般设置,振动模式打开。我测试其他没有麦克风代表的应用程序,他们可以按预期振动。我也叫viewDidLoad振动,也不能振动。所以我猜这场冲突与使用GCD的多线程相关。

有人可以给我一些关于如何解决这个问题的建议吗?谢谢!

+0

之前'这里,deleage方法在主队列中运行,无论如何。 – sleepwalkerfx

回答

1

你必须停止麦克风监听,通话

为什么你使用`dispatch_async(dispatch_get_main_queue()AudioServicesPlaySystemSound

+0

彼得是正确的,'AudioServicesPlaySystemSound( kSystemSoundID_Vibrate);如果有一个活动的麦克风监听器,''将不起作用。 – quellish