Ios 如何使用iphone麦克风输入进行开关,以计算车轮的转数?

Ios 如何使用iphone麦克风输入进行开关,以计算车轮的转数?,ios,audio,input,microphone,jack,Ios,Audio,Input,Microphone,Jack,我正在开发和安装应用程序,我想测量车轮的转动情况。我买了一个便宜的自行车里程表,它使用磁铁开关计算自行车车轮的圈数,当磁铁离传感器足够近时,该开关每圈关闭一次电路。我有一个想法,将这个磁铁开关添加到iphone耳机的麦克风电路中,然后使用音频框架来管理麦克风的连接,制作一个开关,可以识别麦克风何时连接或未连接,然后用它制作一个计数器。我可以切换的方法是使用AVFoundation框架和类,因为我发现这是区分外部和内部话筒的唯一方法 我粘贴了一段代码摘录来测试开关。计时器循环中的代码 NSStri

我正在开发和安装应用程序,我想测量车轮的转动情况。我买了一个便宜的自行车里程表,它使用磁铁开关计算自行车车轮的圈数,当磁铁离传感器足够近时,该开关每圈关闭一次电路。我有一个想法,将这个磁铁开关添加到iphone耳机的麦克风电路中,然后使用音频框架来管理麦克风的连接,制作一个开关,可以识别麦克风何时连接或未连接,然后用它制作一个计数器。我可以切换的方法是使用AVFoundation框架和类,因为我发现这是区分外部和内部话筒的唯一方法

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

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.5毫秒的时间内更新。有人对如何使用音频插孔输入有更好的想法?

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

如果你不能让簧片开关在打开/关闭时产生足够长且有噪音的尖峰,那么在它的位置上放一个小线圈,将磁铁连接到车轮上就可以了

更新:我发现本教程用于检测吹入话筒的噪声尖峰-检测簧片开关或线圈发出的咔哒声的原理应该是相同的(检测窗口要短得多),代码将非常相似


我的数学很难。在距离车轮中心12'处的开关以20Hz的频率旋转时,其速度约为3800 sm/s。如果开关在5sm半径范围内工作,您有大约2ms的窗口来检测它,这意味着您需要能够在
N<1ms
处,而不是50ms处,每ns检查一次设备。是的,我明白您的意思。我已经很快地做了这个计算,只是考虑到转弯的时间。但考虑磁铁通过传感器的速度是关键。我正确测量了车轮尺寸和传感器与车轮中心的距离,得到了1.5毫秒的窗口。谢谢。Tks的建议,很抱歉耽搁了。我按照教程进行了测试。它工作得很好,可以检测峰值,但速度不够快,无法生成计数器。我的意思是,我使用示波器应用程序进行了测试,当开关被激活时会产生一个峰值。然后,我按照教程进行了测试,但NSLog显示“检测到话筒敲击”多次,但只有一个尖峰。我想这是因为计数尖峰功率或通道的时间窗口太长。你知道我怎么能有一个更短的窗口,因为[recorder updateMeters]无法更改??哦,我想内置音量计的过滤周期对于您的需要来说一定太长了。在这种情况下,您必须自己处理音频,而不是使用
AVAudioRecorder
。看看苹果公司的这个示例项目:-如果您测量多长时间(多少个样本)尖峰持续时间为您可以应用一个长度刚好小于该长度的非常短的过滤器来可靠地检测尖峰。您是如何完成此项目的?实际上我已经停止了这方面的工作一段时间。我一回来就让您更新。谢谢。