iOS中使用GCD的意外冲突

时间:2014-04-25 03:40:14

标签: ios objective-c multithreading grand-central-dispatch

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

以下是使用EZMicrophoneDelegate中的GCD从麦克风获取的样本,填充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的多线程有关。

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

1 个答案:

答案 0 :(得分:1)

在调用

之前,你必须停止麦克风收听

AudioServicesPlaySystemSound