ios - 如何使用iPhone麦克风输入进行开关以计数轮转?

标签 ios audio input microphone jack

我正在开发应用程序,我想测量车轮的转弯。我买了一个便宜的自行车里程表,它使用磁铁开关来计数自行车车轮的转数,当磁铁与传感器的距离足够近时,该开关会每转关闭一次电路。我的想法是将此磁铁开关添加到iphone耳机的麦克风电路中,然后使用音频框架来管理麦克风的连接,从而制作一个开关,可以确定麦克风是否处于麦克风状态。连接,然后对其进行计数。我可以进行切换的方法是将AVFoundation框架与[AVCaptureDevice]类一起使用,因为我发现这是区分[this-post]回答的问题的内部和外部麦克风的唯一方法。

我从代码中粘贴摘录来测试开关。计时器循环中的代码。

NSString *name;
static int micSwitch=0;
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio];
    for (AVCaptureDevice *device in devices) {
        name = [ device localizedName];
    }
    if ([name isEqual:@"iPhone Microphone"]) {
        micSwitch=0;
    }
    else{
        micSwitch=1;
    }

但是,此开关的更新速度比我需要的慢。根据我的估计,开关将需要在不到1.5ms的时间内更新。有人有更好的主意,如何使用音频插孔输入做到这一点?

最佳答案

不用将簧片开关卡在麦克风电路上,以至于它实际上连接和断开了耳机,而是让开关直接在麦克风线路输入端产生噪声并处理音频输入。根据线路的嘈杂程度,您可能需要对输入的音频数据应用非常短的周期平均滤波器,以便可靠地检测尖峰。

如果您无法通过舌簧开关在开/关时产生足够长且嘈杂的尖峰信号,则应在其位置安装一个小线圈,将磁铁固定在车轮上,以解决问题。

更新:我发现本教程用于检测吹入麦克风的噪声峰值-检测簧片开关或线圈的喀哒声的原理应该相同(检测窗口要短得多),并且代码也非常相似。

http://mobileorchard.com/tutorial-detecting-when-a-user-blows-into-the-mic/

关于ios - 如何使用iPhone麦克风输入进行开关以计数轮转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15959242/

相关文章:

ios - Tableview 动态开关有问题,如果我选择开关并立即打开它,它不会快速打开

ios - 核心数据映射模型版本哈希与源模型版本哈希不匹配

iphone - SystemSoundID有时随设备音量而变化

android - 让媒体播放器先在右扬声器上播放,然后在左扬声器上播放

c - C程序控制台输入的奇怪现象

javascript - 重置标签的值

ios - 使用 NSPredicate 过滤年/月的 fetchRequest

ios - Xcode 更新后无法编译具有 Carthage 依赖项的应用程序

ios - 如何在 iPhone/iPad 中播放流式音频

css - 弹出窗口内的输入字段在聚焦时跳跃