11

一部のデバイスのヘッドフォンポート(おそらくすべて?ここでの参照は良いでしょう)には、ステレオサウンドとマイク用に3つのチャネルがあることを知っています。それで、これらのデバイスでこのペダルのようなものを検出できるかどうか疑問に思っていました。

できればオーディオレコーダーで十分でしょうか?ここでアプリの可能性を研究していますが、可能であれば有望に思えます。

ありがとう

編集

私はそれについてもっと調べていて、ペダルがボタン付きのヘッドセットと同じ効果を持つかどうか疑問に思っていました. それらのエフェクトをオーバーライドするのは非常に簡単です。私はそれを行うシンプルなアプリを作成し、今は自分のペダルが試されるのを待っています. それについて何か考えはありますか?

アップデート

ペダルで試してみましたが、うまくいきません。ペダルを使って音楽アプリを一時停止することはできましたが. ただし、デバイスはCyanogenを実行していました。ボイスレコーダーも、キーを押しても何も検出しませんでした。それを検出する方法についての提案が必要です:)。

アップデート

バウンティの有効期限が近づいているため、マイナー アップデートを行います。@Nick.T によって提供された最後のリンクには役立つ情報がいくつかありますが、ペダルを検出するためのサンプルをまだ作成できません。そのため、タイトルの質問に小さな変更を加えました。その方向性に関するガイダンスは大歓迎です!

4

4 に答える 4

3

実際のハードウェアを手にしなくてもこれが機能するかどうかは明らかではありませんが... ジャックをソケットに完全に差し込まないでください。ジャックの先端は、この図の左オーディオ出力のピン 2 に接続する必要があります : http://pinoutsguide.com/CellularPhones-PW/samsung_galaxy_headset_pinout.shtmlジャックを完全に差し込むと、ジャックの接地ピンがマイク入力を短絡し、何も検出されなくなります - https://en.wikipedia.org/wiki/File:Photo-audiojacks.jpgの写真は、接続が合致します。

左チャンネルからオーディオを再生し、マイク チャンネルで録音し、振幅を測定します。すべてが正しく配線されていれば、ペダルの位置がわかります。ポテンショメータの遠端がジャックのリングに接続されている場合、それは機能しません。

それはすべてヒース・ロビンソンのように聞こえます。インライン 3 ピン メス ジャック ソケットと 4 ピン オス ジャック プラグを購入し、2 つを一緒に配線して、必要なピン配列を得ることができます。電子機器はありません。コネクターとワイヤーのかけらだけ!または、次のようなケーブルを使用します: 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 と鋭いナイフと粘着テープ。

もう 1 つの問題は、ジャックが完全に差し込まれていないときに電話機がジャックへのオーディオの送信を拒否した場合に発生します。ソケットには、それを機械的に検出する余分な接点があります。ただし、3 ピンから 4 ピンへのアダプターを作成すれば機能します。

または、(光沢のある新しい)エクスプレッション ペダルから 3.5mm ジャックを切り取るだけです。あなたが横たわっている壊れた電話ヘッドセットの1つから離れた4ピンコネクタと交換してください.

于 2012-12-06T19:58:16.050 に答える
2

前回のアップデートによると、ペダルはハンズフリー ヘッドセットのボタンのように反応するようです。いわば、音楽の再生、一時停止、スキップ、または電話のピックアップ/ハングアップです。API の基本がそれを取得する方法を提供しない場合 (私には疑問です)、NDK に移動して、ネイティブ レベルでキャッチできるかどうかを確認できます。

私はそれを調べて、これがあなたの道を見つけるのに役立つかもしれないと思いました:

まだわからない...

于 2012-12-04T15:10:05.327 に答える
1

ここには2つの可能性のある道があります。

  • 1つは、ヘッドセット(またはより具体的にはマイク)の存在検出回路を使用し、適切なAPIを介してそのステータスを読み取ることです。これはかなり簡単です(実際のヘッドセットのどのプロパティが測定されているかを把握する必要があります)。ただし、電話はオーディオ構成の変更を行う可能性があり、ヘッドセットが接続または切断されていることが「確実」になるまで変更を望まないため、応答がかなり遅くなる可能性があります。また、最も単純な非マイクヘッドセットの検出は、モデル間で電気的に作動させるのが難しいジャックの機械的メカニズムを介して行われる場合があります。

  • より複雑なアイデアは、マイク入力にいくつかの音を結合し、ソフトウェアでそれを検出することです。ただし、マイクの帯域幅は通常DCまでの範囲ではないため、発振信号である必要があります。定常電圧を印加するだけでは、変化したときに「クリック」トランジェントが発生しますが、それ以外の場合は発生しません。可聴周波数信号を注入するには電源が​​必要です。注意深く設計すれば、マイクのバイアス電源から小さな発振器を実行するのに十分な電力を盗むことができる場合があります。しかし、おそらくもっと簡単なのは、ソフトウェアでスピーカーにオーディオトーンを出力し、ペダルスイッチでこれを小さなコンデンサーを介してマイクに結合することです。

于 2012-11-27T22:19:07.730 に答える
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;
}
于 2013-03-06T15:53:51.413 に答える