ios - 在 iOS 上通过耳机插孔获取开关控制的输入

标签 ios swift audio avaudioplayer

作为一个小假期项目,我想通过一个辅助功能开关控制一个应用程序,该开关通过 3.5 毫米耳机插孔连接到 iOS 设备。

这是开关和插头:enter image description here

我的问题是我不知道按下按钮时会发出什么样的信号 - 我认为它的作用类似于耳机的 Remote 。

有没有办法测量这个输入,或者有人知道如何在iOS上获取按钮的输入?

最佳答案

您的按钮是“Big Buddy Button Switch”,由 AbleNet 为中度至重度上肢和运动障碍人士设计。它并非旨在插入 IOS 设备或任何移动平板电脑或手机。

有一个“Hook + Switch”接口(interface)(目前为 185 美元)设计用于在此按钮和 IOS 设备之间移动,允许将两个这样的按钮连接到闪电连接器。当以这种方式连接时,可以使用 Apple 辅助功能设置检测按钮按下并将其映射到许多不同类型的 IOS 操作。这是一大笔钱,但由于新 iPhone 甚至没有音频插孔,因此最终可能值得。

您的按钮的链接是 here .

Hook+ 开关接口(interface)的链接是 here .

Apple 有关辅助功能开关的信息的链接是 here .

Big Buddy Button 是一个被动的瞬时 Action 开关。附带的单声道 TS 插头在内部连接到瞬时 Action 常开开关,因此按下开关会将 TIP 短接到 SLEEVE。

将此 TS 插头插入设计用于接收 TRRS 插头的 ios 设备,即使未按下按钮,也会将 RING1、RING2 和 SLEEVE 短接在一起,这将无法实现任何有用的功能。按下按钮将进一步缩短 TIP 到 RING1、RING2 和 SLEEVE。如果直接插入 TS 插头,则无法从 ios 内部读取这样的按钮按下。

如果您想开发一个适用于许多移动设备(例如,android)的解决方案,您只需将 TS 插头替换为 TRRS 插头(或连接适配器)即可,如下所示:

两个 Big Button 导体之一应连接到 SLEEVE,它承载电源(用于麦克风)并且是内部感测的电压源以进行音量变化和切换。另一个大按钮导体应连接到 RING2,它是耳塞 channel 和麦克风的地线。不应将任何东西连接到 TIP 或 RING1。

按下大按钮会暂时将 Sleeve 缩短至 Ring2,这与按下耳塞线缆上的开关相同。如果您想模拟音量增大或音量减小命令,您可以在按钮上串联一个电阻(音量减小 220 欧姆,音量增大 600 欧姆)。

iOS 设备的音频插孔的电气连接与 Android 相同,但如果您想连接按钮并在 iOS 中检测到它们,则必须克服一个额外的障碍。作为他们的一部分 小额信贷机构 (为 iPod/iPhone 制作)程序,当任何东西插入音频插孔(或闪电连接器)时,Apple 使用启动识别啁啾序列。您的设备内部必须有正确的芯片(或模拟该芯片的行为),否则当您未能响应身份验证请求时,按钮控制界面将被禁用。该协议(protocol)似乎随着时间的推移而发生了变化,因为适用于一种手机型号的售后产品并不总是适用于另一种型号。苹果内部人士表示,MFI 芯片包含一个苹果可以在连接时读取的序列号。他们说逆向工程身份验证在今天有效,但 Apple 可以随时阻止它工作。

如果你想把这个设计成产品,你可以申请MFI计划here .

如果您只想构建少量设备,您将无法被 MFI 计划接受。在这种情况下,您需要购买 Hook + Switch 接口(interface)(或类似的东西),否则您需要添加一个像 Arduino 或 Teensy 这样的小型微处理器来模拟身份验证啁啾,正如 David Carne 所做的 here .

如果您只想构建一个可以工作的按钮,最简单的方法是使用一副包含必要芯片的现有耳机,然后将按钮线与 SLEEVE 和 RING2 平行。如果我这样做,我会得到一根 TRRS 延长线并将 Big Buddy Button 电线连接到延长线的正确两根电线上。只要将一副苹果认证的耳机插入扩展程序以提供身份验证,您的 Big Button 就应该可以工作。然后你会像往常一样检测按钮按下(描述为 here )。

EDIT: I tested connecting an accessory button to SLEEVE and RING2 of a TRRS extension cable that's plugged into the iPhone, and as long as a functioning headset is plugged into the extension cable, the accessory button does work. This way the accessory button ends up in parallel to the built-in button, without having to cut apart the headset.



您还可以采用其他替代方案。例如,您可以构建一个电路,每当按下按钮时,它就会在两个导体上传输麦克风级别的音调。然后将该信号插入 SLEEVE 和 RING2 之间的 iOS 设备,然后编写一个 iOS 程序来监听声音并将其视为按下按钮。这种方法不需要 MFI 身份验证,并且现有的实用程序可以让您完成 90% 的工作。你可以找到一个例子 here .

也可以在不注册 MFI 的情况下通过 BLE 连接到 iOS,并且由于 Apple Accessibility 包括使用蓝牙设备控制某些 iOS 功能的能力,因此您可能无需身份验证即可执行此操作。

显示大多数移动设备(包括 iPhone)上 TRRS 连接器连接示意图的图像是 here .

为方便起见,转载于此。
  • 功能/麦克风 == socket
  • 公共(public)/接地 == RING2
  • 右/R+ == RING1
  • 左/L+ == 提示

  • enter image description here

    关于ios - 在 iOS 上通过耳机插孔获取开关控制的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53877830/

    相关文章:

    ios - 以编程方式创建的 UIViewController 上没有 segues

    iphone - 当观察者变为零时观察者会自动移除吗?

    ios - Swift - 火种效果

    ios - 我想获取屏幕左侧的后退按钮,但无法获取它

    java - Android中的简单音频播放停止

    ios - 设置以编程方式绘制的 View 的颜色

    ios - iOS 应用上的 Paypal

    ios - 向正则表达式添加一些字符以进行主题标签识别

    c++ - RtAudio-播放wav文件中的样本

    c# - 通过此代码更改音频采样率,当前会更改位深度吗?