ios - 在 iOS 中使用 GCD 发生意外冲突

标签 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);
    });
}

我检查了一般设置,振动模式已打开。我在没有麦克风委托(delegate)的情况下测试了其他应用程序,它们可以按预期振动。我也在viewDidLoad中调用了震动,也不能震动。所以我猜冲突与使用 GCD 的多线程有关。

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

最佳答案

你必须在打电话之前停止麦克风收听

AudioServicesPlaySystemSound

关于ios - 在 iOS 中使用 GCD 发生意外冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23283735/

相关文章:

iphone - 为体系结构 'GCC 4.2' 选择了不受支持的编译器 'armv7'

objective-c - 使用 "id"作为自定义 "init"方法的返回类型而不是指向该类的指针的优点和缺点?

ios - 无法使用 'ios:' .concat(data) 在 iOS 的 Web View 中从服务器调用数据

java - 我是否应该显式唤醒一个占用 BlockingQueue.take() 的线程以提高性能?

java - 同时调用两个线程并返回

iphone - 只能旋转一次UIImageView

ios - 如何获取 UITableView 中特定行的高度

java - Realm :记录顺序已更改

objective-c - GCD 和 RunLoop

c++ - C++ 中的 Posix 线程