2014-04-25 67 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