2012-11-27 24 views
11

Wiem, że niektóre porty słuchawkowe niektórych urządzeń (być może wszystkie z nich - wszelkie odniesienia tutaj byłyby dobre) mają 3 kanały, dla dźwięku stereo i mikrofonu. Zastanawiałem się więc, czy można wykryć na takich urządzeniach coś podobnego do urządzenia: this pedal.Jak wykrywać dane wejściowe przez gniazdo audio?

Jeśli to możliwe, wystarczy użyć numeru audio recorder? Studiuję tutaj możliwości aplikacji, a to brzmi obiecująco, jeśli to możliwe.

Dzięki

EDIT

szukałem więcej na ten temat, a ja zastanawiałem się, czy pedał będzie miało taki sam efekt jak te słuchawki z przyciskami. It's deadly easy to override their effects, Stworzyłem prostą aplikację, która to robi i teraz czekam na mój pedał, aby spróbować. Jakieś przemyślenia na ten temat?

UPDATE

Właśnie próbowałem go w pedale i to nie działa. Mimo że udało nam się użyć pedału, aby wstrzymać aplikację muzyczną. Urządzenie działało jednak na Cyanogen. Dyktafon również nie wykrył niczego na klawiaturze. Potrzebujesz sugestii, jak to wykryć :).

UPDATE

jako nagroda za chwilę się zakończy, drobna zmiana. Ostatni link podany przez @ Nick.T zawiera przydatne informacje, ale nadal nie mogę utworzyć próbki do wykrycia pedału. Wprowadziłem więc niewielką zmianę w tytułowym pytaniu i wszelkie wskazówki dotyczące tego kierunku byłyby bardzo doceniane!

+0

Interesujące pytanie (nie mam pojęcia, ale chciałabym się poznać). Mogłem zobaczyć aplikację w stylu zespołu garażowego, która umożliwiałaby ręczne wprowadzanie, takie jak tablice obrotowe lub inne wejścia elektroniczne (instrumenty). –

+0

Biorąc pod uwagę, że [czytnik kwadratowy] (https://squareup.com/reader) opiera się na korzystaniu z portu audio, wyobrażam sobie, że to, o co prosisz, jest również możliwe. –

+0

Ten pedał wydaje się mieć potencjometr wewnątrz i nic więcej. Złącze to 3-pinowe gniazdo (użyj powiększenia na zdjęciu), więc prawdopodobnie ma jeden koniec garnka przymocowany do bolca uziemiającego gniazda, a tym samym drugi koniec i suwak puli połączony z pozostałymi dwoma szpilki. Wsuwanie pinów Samsung na http://pinoutsguide.com/CellularPhones-P-W/samsung_galaxy_headset_pinout.shtml. Garnek jest podłączony do lewego i prawego wyjścia audio, a nie do mikrofonu. Nie obiecujące. – emrys57

Odpowiedz

3

Nie jest jasne, czy to będzie działać bez posiadania Rzeczywisty sprzęt w moich rękach, ale ... Nie podłączaj wtyczki do gniazdka. Końcówka gniazda powinna następnie połączyć się ze stykiem 2, z lewej strony dźwięku, z tego schematu: http://pinoutsguide.com/CellularPhones-P-W/samsung_galaxy_headset_pinout.shtml , a pierścień powinien połączyć się ze stykiem 3, wejście mikrofonu. Jeśli wepchniesz wtyczkę do końca, bolec uziemienia zwalnia wejście mikrofonowe i niczego nie wykryjesz - zdjęcia na https://en.wikipedia.org/wiki/File:Photo-audiojacks.jpg pokazują, w jaki sposób połączenia będą się wiązać.

Odtwórz dźwięk z lewego kanału, nagraj go na kanale mikrofonu i zmierz amplitudę. To może - jeśli wszystko jest w porządku - podpowie ci pozycję pedału. Jeśli dalszy koniec potencjometru jest podłączony do pierścienia gniazda, to nie zadziała.

To wszystko brzmi raczej Heath Robinson. Możesz kupić wbudowane 3-pinowe gniazdko żeńskie i 4-pinową wtyczkę męską i połączyć je ze sobą, aby uzyskać dowolne pinoutowanie. Brak elektroniki; tylko złącza i kawałki drutu! Lub użyj kabla podobnego do tego: 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 oraz ostrego noża i jakiejś stickytape.

Drugi problem pojawiłby się, gdyby telefon nie wysyłał dźwięku do gniazda, gdy gniazdo nie jest całkowicie podłączone do gniazdka - w gniazdku znajduje się dodatkowy styk, który wykrywa to mechanicznie. Ale zadziała, jeśli wykonasz adapter 3-stykowy na 4-stykowy.

Albo, po prostu odetnij gniazdo 3,5 mm od pedału ekspresji (nowy błyszczący). Wymień go na 4-pinowe złącze z jednego z tych uszkodzonych zestawów słuchawkowych, które właśnie leżysz.

1

Istnieją dwie potencjalne ścieżki możliwości.

  • Jeden byłoby użyć zestawu słuchawkowego (albo dokładniej mikrofon) wykrywanie obecności obwody i czytać ten status za pomocą odpowiedniego interfejsu API. Byłoby to dość proste (wystarczy dowiedzieć się, która właściwość prawdziwego zestawu słuchawkowego jest mierzona). Istnieje jednak duża szansa, że ​​odpowiedź może być dość powolna, ponieważ telefon prawdopodobnie przejdzie zmiany w konfiguracji audio i nie będzie tego chciał, dopóki nie będzie "pewny", że zestaw słuchawkowy został podłączony lub odłączony. Również najprostsze niemagnetyczne wykrywanie zestawu słuchawkowego może odbywać się za pośrednictwem mechanicznego mechanizmu w gnieździe, który może być trudny do elektrycznego uruchamiania w różnych modelach.

  • Bardziej skomplikowanym pomysłem byłoby połączenie dźwięku z mikrofonem i wykrycie go w oprogramowaniu. Musi to jednak być sygnał oscylujący, ponieważ szerokość pasma mikrofonu zwykle nie jest równa DC. Jeśli zastosujesz tylko stałe napięcie, otrzymasz przejściowy "kliknięcie", gdy się zmieni, ale nie inaczej. Wstrzyknięcie sygnału częstotliwości audio wymagałoby źródła zasilania - przy starannym projektowaniu możesz wykraść wystarczającą moc z zasilania polaryzującego mikrofon, aby uruchomić mały oscylator. Ale być może prostsze byłoby uzyskanie sygnału dźwiękowego na głośniku, a twój przełącznik pedału sprzęgnie go z mikrofonem przez mały kondensator.

+0

Aby być dokładniejszym, potrzebuję tego do pracy tylko na karcie galaktyki. Mogę wykryć użycie mikrofonu z klasą nagrywarki audio. Nie potrzebuję też niczego bardzo precyzyjnego. Prosty jest stuknięty lub nie jest stuknięty działa. Problem polega na tym, że nie mogę jeszcze zdobyć jednego z tych pedałów. – caiocpricci2

+0

Będę wdzięczny za wszelkie sugestie podczas ustawiania, jak sprawdzić, która z właściwości prawdziwego zestawu słuchawkowego jest mierzona. Nie mam pojęcia, jak znaleźć to bez pedału do przetestowania. – caiocpricci2

+0

Być może lepiej będzie opublikować to na stronie electronics.stackexchange.com. Zobacz także tę dyskusję http://electronics.stackexchange.com/questions/20731/is-there-any-way-to-feeda-a-signal-line-in-into-a-mobile-phone. Łatwo byłoby zbudować prosty obwód za pomocą przełącznika przyciskowego, który można wykorzystać jako dowód koncepcji. – Simon

2

Zgodnie z ostatnią aktualizacją wygląda na to, że pedał reaguje jak przycisk na zestawie głośnomówiącym. Aby powiedzieć, aby grać, wstrzymać i pominąć muzykę lub odebrać/odłożyć połączenie. Jeśli podstawy interfejsu API nie dają sposobu na jego zdobycie (co do którego wątpię), to możesz przejść do NDK i sprawdzić, czy można go przechwycić na poziomie macierzystym.

Sprawdziłem to i pomyślałem, że to może pomóc Ci znaleźć swoją drogę:

nigdy nie wiadomo ...

+0

Jest odwrotnie, nie reaguje na moje przesłonięte wykrywanie klucza. Całkowicie zapomniałem NDK. Przyjrzę się temu dziś wieczorem! Dzieki za sugestie! – caiocpricci2

1

W końcu udało mi się odczytać wejście pedału. @ emrys57 ma rację, zastępując gniazdo 4-pinowym złączem, wyzwolił wejście tak samo jak mikrofony z przyciskiem haka. Od czasu do czasu wydaje się jednak również powodować klawisze zwiększania głośności i zmniejszania głośności. Przypuszczam, że jest to związane ze mną, zastępując 4-pinowy jack nożem i taśmą.

Przejście onKeyUp było dość proste. Pamiętaj, że musisz również zastąpić onKeyDown, aby zapobiec domyślnemu zachowaniu:

@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; 
} 
Powiązane problemy