【问题标题】:How to detect input data through the audio jack?如何通过音频插孔检测输入数据?
【发布时间】:2012-11-15 15:43:05
【问题描述】:

我知道某些设备的耳机端口(可能全部?这里的任何参考都很好)有 3 个通道,用于立体声和麦克风。所以我想知道是否有可能在这些设备上检测到 this pedal 之类的东西。

如果可能,使用audio recorder 就足够了吗?我正在研究应用程序的可能性,如果可能的话,这听起来很有希望。

谢谢

编辑

我正在搜索有关它的更多信息,我想知道踏板是否会与那些带按钮的耳机具有相同的效果。 It's deadly easy to override their effects, 我创建了一个简单的应用程序,现在我正在等待我的踏板尝试。有什么想法吗?

更新

我刚刚在踏板上试过了,但它不起作用。尽管我们设法使用踏板来暂停音乐应用程序。不过,该设备正在运行 Cyanogen。录音机也没有检测到按键上的任何内容。需要有关如何检测它的建议:)。

更新

由于赏金即将到期,因此进行了一次小更新。 @Nick.T 提供的最后一个链接得到了一些有用的信息,但我仍然无法创建样本来检测踏板。所以我对标题问题做了一个小改动,非常感谢任何关于这个方向的指导!

【问题讨论】:

  • 有趣的问题(我不知道但想了解自己)。我可以看到一个车库乐队风格的应用程序,它允许手动输入,例如转盘或其他电子输入(仪器)。
  • 考虑到square reader是基于使用音频端口,我想你所要求的也是可能的。
  • 那个踏板里面好像有一个电位器,没有别的。连接器是一个 3 针插孔(使用图片上的放大图),因此它可能将电位器的一端连接到插孔的接地引脚,因此电位器的另一端和滑块连接到其他两个引脚。 pinoutsguide.com/CellularPhones-P-W/… 的三星插孔引脚。所以电位器连接到左右音频输出,而不是麦克风。没有希望。

标签: android audio microphone


【解决方案1】:

我终于设法读取了踏板输入。 @emrys57 是对的,用 4 针连接器替换插孔,触发输入的方式与带有挂钩按钮的麦克风相同。但是偶尔它似乎也会触发音量增大和音量减小键。我想这与我用刀和胶带替换 4 针插孔有关。

重写 onKeyUp 相当简单。请注意,您还必须覆盖 onKeyDown 以防止默认行为:

@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
    int action = event.getAction();
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP
            || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
            || keyCode == KeyEvent.KEYCODE_HEADSETHOOK) {

        if (action == KeyEvent.ACTION_UP) {
            Log.d(TAG, "action_up");
            clickStart(null);
            return true;
        } else if (action == KeyEvent.ACTION_DOWN) {
            Log.d(TAG, "action_down");
            return true;
        } else {
            Log.d(TAG, "action:" + action);
            return true;
        }
    }
    return false;
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    int action = event.getAction();
    Log.d(TAG, "onKeyDown!");
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP
            || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
            || keyCode == KeyEvent.KEYCODE_HEADSETHOOK) {

        if (action == KeyEvent.ACTION_UP) {
            Log.d(TAG, "action_up");
            clickStart(null);
            return true;
        } else if (action == KeyEvent.ACTION_DOWN) {
            Log.d(TAG, "action_down");
            return false;
        } else {
            Log.d(TAG, "action:" + action);
            return true;
        }
    }
    if (keyCode == KeyEvent.KEYCODE_BACK) {         
        finish();
        return true;
    }
    Log.d(TAG, "returning false");
    return false;
}

【讨论】:

    【解决方案2】:

    如果我没有实际的硬件,这是否可以工作尚不清楚,但是...不要将插孔一直插入插座。然后,插孔的尖端应连接到此图中的引脚 2,左侧音频输出: http://pinoutsguide.com/CellularPhones-P-W/samsung_galaxy_headset_pinout.shtml 并且环应连接到针脚 3,麦克风输入。如果将插孔一直推入,插孔上的接地针会使麦克风输入短路,您将无法检测到任何东西 - https://en.wikipedia.org/wiki/File:Photo-audiojacks.jpg 上的图片显示了连接方式会交配。

    从左声道播放一些音频,在麦克风声道上录制,然后测量幅度。这可能 - 如果所有连接都正确 - 会告诉您踏板位置。如果电位器的远端连接到插孔的环上,那将不起作用。

    这听起来更像是 Heath Robinson。您可以购买一个直列 3 针母插孔插座和一个 4 针公插孔插头,然后将两者连接在一起以获得您需要的任何引脚排列。没有电子产品;只是连接器和一些电线!或者使用这样的电缆: http://www.ebay.co.uk/itm/1mt-3-5mm-4-Pin-Jack-Male-Plug-4-Pole-Jack-female-Socket-Extension-Lead-Cable-/251172651017?pt=UK_Computing_Sound_Vision_Audio_Cables_Adapters&hash=item3a7b0e8009&_uhb=1 还有一把锋利的刀和一些胶带。

    如果电话在插孔未完全插入时拒绝向插孔发送音频,则会出现另一个问题 - 插座中有一个额外的触点可以机械地检测到这一点。但是,如果您制作 3 针转 4 针适配器,它会起作用。

    或者,将 3.5 毫米插孔从您(闪亮的新)表情踏板上剪下来。将其替换为您身边的其中一个损坏的电话耳机上的 4 针连接器。

    【讨论】:

      【解决方案3】:

      根据您上次的更新,踏板的反应看起来像免提耳机上的按钮。也就是说,播放、暂停和跳过音乐或接听/挂断电话。 如果 API 的基础知识无法让您掌握它(我对此表示怀疑),那么您可以向下移动到 NDK,看看它是否可以被本机级别捕获。

      我查了一下,认为这可能会帮助您找到自己的方式:

      不知道...

      【讨论】:

      • 恰恰相反,它对我的​​覆盖键检测没有反应。我完全忘记了NDK。今晚我去看看!感谢您的建议!
      【解决方案4】:

      这里有两种可能的路径。

      • 一种方法是使用耳机(或者更具体地说是麦克风)存在检测电路,并通过适当的 API 读取该状态。这将相当简单(只需弄清楚正在测量的真实耳机的属性)。但是,很有可能响应可能相当慢,因为电话可能会经历一些音频配置更改,并且在“确定”耳机已连接或断开之前不会这样做。此外,最简单的非麦克风耳机检测可能是通过插孔中的机械机制进行的,这可能难以跨型号进行电动驱动。

      • 一个更复杂的想法是将一些声音耦合到麦克风输入中,并在软件中进行检测。但是,它必须是一个振荡信号,因为麦克风带宽通常不会低至 DC。如果你只是施加一个稳定的电压,当它改变时你会得到一个“咔哒”瞬变,但不会。注入音频信号需要电源 - 通过精心设计,您可能能够从麦克风偏置电源中窃取足够的功率来运行小型振荡器。但也许更简单的方法是让软件在扬声器上输出音频,然后让您的踏板开关通过一个小电容器将其耦合回麦克风。

      【讨论】:

      • 更准确地说,我只需要在银河选项卡上使用它。我可以使用录音机类检测麦克风的使用情况。我也不需要任何非常精确的东西。一个简单的被点击或不被点击的作品。问题是我还不能得到其中一个踏板。
      • 我很感激您在设置时提供任何建议,即如何找出正在测量的真实耳机的哪些属性。我不知道如何在没有踏板测试的情况下找到它。
      • 您最好将其发布在electronics.stackexchange.com 上。另请参阅此讨论electronics.stackexchange.com/questions/20731/…。使用按钮开关构建一个简单的电路很容易,您可以将其用作概念验证。
      • 嗯,我在电子方面的知识是 0。他们会给我一个踏板,只需要几天时间。我想走得更远,当我踩到踏板时准备好一个 sn-p 来测试,但我在电子方面的愚蠢技能真的很难继续前进:)。
      猜你喜欢
      • 2016-08-03
      • 1970-01-01
      • 2014-09-06
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2012-09-02
      相关资源
      最近更新 更多