我正在开发应用程序,我想测量车轮的转弯。我买了一个便宜的自行车里程表,它使用磁铁开关来计数自行车车轮的转数,当磁铁与传感器的距离足够近时,该开关会每转关闭一次电路。我的想法是将此磁铁开关添加到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/