App, welche das Signal des AUX-Ausgangs nutzt?

  • Antworten:28
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 15

11.09.2016 23:19:28 via Website

Hallo,

ich würde gerne eine Android App programmieren, die parallel zu einem Anruf läuft.

Beispielszenario:

Das Smartphone wird angerufen - der Anruf wird angenommen. Es wird manuell die zu programmierende App geöffnet, welche den Sound, der über den Klinkenausgang des Smartphones ausgegeben wird (in meinem Fall verschiedene Tonhöhen, die durch das Drücken von Tasten während des Anrufs vom anderen Gesprächspartner entstehen) mithört. Abhängig von den Tonhöhen soll die App den kompletten Smartphone Bildschirm in einer bestimmten Farbe einfärben.

Wäre dies ohne immensen Aufwand zu bewerkstelligen?

Ich habe noch nicht direkt eine App programmiert, nur mit dem MIT App Inventor 2.

Wenn es über diesen App Baukasten möglich wäre, wäre das spitze. ich bin allerdings auch bereit, ohne Baukasten dies zu probieren, wenn mir jemand dabei helfen könnte.

Ich hoffe ihr habt meine Vorstellung verstanden, was ich umsetzen möchte und könnt mir weiterhelfen :)

Vielen Dank im Voraus!

MFG

  • Forum-Beiträge: 2.214

11.09.2016 23:29:08 via Website

Hallo Alibabara,

deine Anwendung ist schon was Spezielles :-)

Ob das mit MIT möglich ist, wage ich zu bezweifeln - von MIT habe ich eh keine Ahnung .....

Fakt ist , dass Du ziemlich System-Nahe programmieren musst, da wirst du natürlich nicht um AndroidStudio und das Einarbeiten in die Programmiertechnik drumrum kommen.

Um Töne abzufangen (AudioRecord) gibt es hierzu ein wenig Informationen
https://developer.android.com/reference/android/media/AudioRecord.html

Aus dem Bauch heraus sehe ich allerdings grundsätzlich Probleme darin, die Zuweisung der Töne zu realisieren und darauf zu reagieren. Ich vermute mal stark , dass je nach ankommender Qualität und die dadurch resultierende Frequenzabweichung - es zu einer hohen Fehlerquote kommt.

Entsprechende Samplefilter / Low & High-Pass Filter müsstest du selbst hinzufügen - ziemlich Tricky

lg
Stefan

— geändert am 12.09.2016 10:02:03

Liebe Grüße - Stefan
[ App - Entwicklung ]

  • Forum-Beiträge: 15

11.09.2016 23:52:06 via Website

Hallo Stefan,

danke für deine schnelle Antwort.

Das habe ich mir fast gedacht, dass es nicht so leicht gehen wird.

Kannst du mir sagen , ob es möglich ist mit dieser AudioRecord-Klasse die Töne des Aux-Ausgangs abzufangen? Notfalls wäre auch der MIC-Eingang als Quelle der Tonhöhen in Ordnung.

Die Fehleranfälligkeit wird denke ich nicht allzu hoch sein, sonst würden ja alle DTMF-Decoder eine hohe Fehlerquote besitzen.

Eigentlich wäre es ja nichts anderes, als eine DTMF-Erkennungs-App, die den Bildschirm einfärbt.

Die Hauptfrage ist also eigentlich , ob ich diese Tonhöhen in meine App "einspielen" kann, im Code verarbeiten und meine App abhängig von den Tonhöhen verschiedene Aktionen durchführen kann.

MFG

— geändert am 11.09.2016 23:53:20

  • Forum-Beiträge: 2.214

12.09.2016 00:00:36 via Website

Hallo Alibabara,

die Klasse fängt nicht den Aux Ausgang ab , sondern sitzt schon davor und setzt sich auf die Hardware

The AudioRecord class manages the audio resources for Java applications to record audio from the audio input hardware of the platform

Dein Einwand mit dem DTMF ist berechtigt, es könnte also grundsätzlich klappen.

Ich habe allerdings in einem Nicht-Android Projekt schon mal mit dem GSM Kompressor (Fraunhofer) auf C-Basis gearbeitet und bin je nach Samplerate auch da an meine Grenzen gestossen. Deshalb auch mein Hinweis auf den Low/Highpassfilter. Der war dabei zwingend notwendig.

Das Ding ist nicht , was du "nach" dem Erkennen machst ( Bildschirm, Luftsprünge, Pizza bestellen).
Der Punkt liegt IM Auswerten.

Auch für Android-Entwickler-Profis eine Herausforderung ..

lg
Stefan

— geändert am 12.09.2016 00:04:09

Liebe Grüße - Stefan
[ App - Entwicklung ]

  • Forum-Beiträge: 15

12.09.2016 00:09:19 via Website

Da hast du völlig Recht, das Problem liegt im Auswerten.

Ich habe gerade einen interessanten Forumsbeitrag bei Stackoverflow gefunden, wo es um Sounderkennung geht.

Hier wird nach der Erkennung eines Klatschens gefragt. Dies dürfte doch eigentlich viel komplexer zu erkennen sein, als festgelegte Tonhöhen, oder täusche ich mich?

http: //stackoverflow.com/questions/8524182/sound-recognition-in-android (Leerzeichen hinter http: entfernen, kann leider noch keine Links posten, als neuer User :P)

Vielleicht stelle ich mir das alles zu einfach vor, aber wenn es so ein winziger DTMF Decoder kann, dann könnte es doch in einer Android App genauso gut "decodiert" werden, oder?

Danke, dass du deine Erfahrungen mit mir teilst, Stefan.

MFG

  • Forum-Beiträge: 2.214

12.09.2016 00:09:56 via Website

Schau mal , ich habe da was für dich gefunden

eine Library :
https://github.com/pjasiun/dtmf-decoder

und einer hatte mal das Gleiche vor :-)
http://stackoverflow.com/questions/14889779/dtmf-detection-on-receiving-an-incoming-call-on-android

https://code.google.com/archive/p/dtmf-decoder/source/default/source

— geändert am 12.09.2016 09:41:33

Liebe Grüße - Stefan
[ App - Entwicklung ]

  • Forum-Beiträge: 15

12.09.2016 00:24:37 via Website

Lustig, auf die gleiche Library bin ich sekunden vor deinem Post auch gestoßen :)

Ich teste mal schnell die apk-Datei des Projekts...

Danke dir fürs Mithelfen!

  • Forum-Beiträge: 2.214

12.09.2016 00:27:17 via Website

Gern geschehen ...

Wer nett und ordentlich fragt, für den kniet man sich auch gerne rein :-)

Viel viel Erfolg

Liebe Grüße - Stefan
[ App - Entwicklung ]

  • Forum-Beiträge: 15

12.09.2016 00:37:51 via Website

Hmm...die App stürzt leider immer ab, wenn man im Hintergrund einen Anruf am laufen hat.

Aber ohne Anruf im Hintergrund erkennt die App reibungslos die Tastentöne , welche über den Lautsprecher meines 2. Smartphones ausgegeben werden. Ziemlich beeindruckend, wie gut das funktioniert!

Jetzt muss ich nurnoch rausfinden, wieso die App während des Anrufs abstürzt...wahrscheinlich wegen des Konflikts beider Apps, die aufs Mikrophon zugreifen.

Vielleicht werde ich mal den Entwickler der App kontaktieren...

Danke dir nochmals Stefan für deine Mithilfe, es hat mich ein großes Stück nach vorne gebracht! :)

LG

  • Forum-Beiträge: 15

15.09.2016 22:56:50 via Website

Also, der Entwickler der App kann/will mir leider nicht weiterhelfen...schade.

Ich habe mich jetzt etwas in das Android Studio eingearbeitet. Wenn ich das Projekt öffne , auf "Run" klicke und das Projekt auf meinem Smartphone installiere, und dort starte stürzt es sofort ab!

In dem Projekt ist aber im "bin" Ordner eine .apk-Datei des Projekts, wenn ich die auf mein Smartphone ziehe und installiere, dann funktioniert sie so wie oben beschrieben.

Ich habe am Code oder sonstiges nichts geändert, einfach nur geöffnet, compiliert und auf meinem Smartphone installiert.

Woran könnte es liegen, dass es hier nicht gleich funktioniert?(thinking)

LG

  • Forum-Beiträge: 2.214

15.09.2016 23:01:07 via Website

Nabend Ali,

was sagt denn dein errorlog ??
Logcat -> dann rechts von Verbose auf Error stellen

Liebe Grüße - Stefan
[ App - Entwicklung ]

  • Forum-Beiträge: 15

15.09.2016 23:15:55 via Website

Abend swa00,

wenn ich das Projekt öffne, und laufen lasse und aufs Smartphone übertrage kommt dort folgender Text:

09-15 23:13:21.702 8429-8429/wpam.recognizer E/Trace: error opening trace file: No such file or directory (2)
09-15 23:13:21.843 8429-8429/wpam.recognizer E/AndroidRuntime: FATAL EXCEPTION: main
                                                           java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{wpam.recognizer/wpam.recognizer.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "wpam.recognizer.MainActivity" on path: DexPathList[[zip file "/mnt/asec/wpam.recognizer-2/pkg.apk"],nativeLibraryDirectories=[/mnt/asec/wpam.recognizer-2/lib, /vendor/lib, /system/lib]]
                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2277)
                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403)
                                                               at android.app.ActivityThread.access$600(ActivityThread.java:165)
                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373)
                                                               at android.os.Handler.dispatchMessage(Handler.java:107)
                                                               at android.os.Looper.loop(Looper.java:194)
                                                               at android.app.ActivityThread.main(ActivityThread.java:5391)
                                                               at java.lang.reflect.Method.invokeNative(Native Method)
                                                               at java.lang.reflect.Method.invoke(Method.java:525)
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
                                                               at dalvik.system.NativeStart.main(Native Method)
                                                            Caused by: java.lang.ClassNotFoundException: Didn't find class "wpam.recognizer.MainActivity" on path: DexPathList[[zip file "/mnt/asec/wpam.recognizer-2/pkg.apk"],nativeLibraryDirectories=[/mnt/asec/wpam.recognizer-2/lib, /vendor/lib, /system/lib]]
                                                               at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
                                                               at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
                                                               at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
                                                               at android.app.Instrumentation.newActivity(Instrumentation.java:1123)
                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403) 
                                                               at android.app.ActivityThread.access$600(ActivityThread.java:165) 
                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373) 
                                                               at android.os.Handler.dispatchMessage(Handler.java:107) 
                                                               at android.os.Looper.loop(Looper.java:194) 
                                                               at android.app.ActivityThread.main(ActivityThread.java:5391) 
                                                               at java.lang.reflect.Method.invokeNative(Native Method) 
                                                               at java.lang.reflect.Method.invoke(Method.java:525) 
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
                                                               at dalvik.system.NativeStart.main(Native Method) 
  • Forum-Beiträge: 2.214

15.09.2016 23:23:51 via Website

also der findet fast gar nichts , drück mal oben bitte

a) Build -> clean Project
b) Build -> rebuild project
c) Make Project - der kleine grüne Hammer
d) nochmal run

und dann nochmal schauen ob nicht oben rechts ggf eine "Sync" aufforderung steht

P.S hast du auch die MainActivity im Manifest drin ??

— geändert am 15.09.2016 23:25:16

Liebe Grüße - Stefan
[ App - Entwicklung ]

  • Forum-Beiträge: 15

15.09.2016 23:31:00 via Website

wenn ich bei mir auf Build klicke kommen nur folgende Möglichkeiten:

  • Make module 'dtmf-decoder-master'
  • generate signed APK
  • deploy module to app engine

Bin ich wirklich so blöd, oder woran liegts?

Wenn ich die Manifest.xml Datei öffne, steht MainActivity auf jeden Fall drin, wenn es das ist was du meinst...

LG

  • Forum-Beiträge: 2.214

15.09.2016 23:35:49 via Website

Yupp, das hatte ich vermutet ...

ich habe mir eben nochmal den Source angesehen, der ist natürlich schon ein wenig veraltet und stammt offenbar von Eclipse.

Man kann zwar Eclipse Projekte in AndroidStudio konvertieren resp. importieren & umwandeln , geht aber des öfteren schief.

Ich kann dir also nur empfehlen, ein neues Projekt zu erstellen - (Standard Mainactivity) und dann
in dieses Projekt die Java files und ggf die Resourcen manuell, einzupflegen.

Dann bist du auch auf dem neuesten Stand.

Alles Andere wäre jetzt sinnlose Bastelei

lg
Stefan

Liebe Grüße - Stefan
[ App - Entwicklung ]

  • Forum-Beiträge: 15

15.09.2016 23:38:24 via Website

Wenn ich also ein neues Projekt erstelle (Standard Mainactivity) muss ich nur den Code der Java-Dateien in neue Dateien reinkopieren, die ich genauso nenne, oder?

Was genau meinst du mit Ressourcen? Sorry, ich hab sowas leider noch nie gemacht und bin deshalb gerade etwas überfordert...

Trotzdem danke dir schonmal für deine Hilfe!

LG

  • Forum-Beiträge: 2.214

15.09.2016 23:47:09 via Website

Hmm, jetzt kommen wir fast schon deine Grenzen , wo ich schon empfehlen würde, dass du am besten von Vorne
beginnst , und damit meine ich Basiswissen.

Ein Projekt besteht aus Source - dateien (java) und Resourcen.
Resourcen (res-folder) sind vereinfacht gesagt alle grafiken und layouts drin .

Die MainActivity will ja wissen , wie sie auszusehen hat .

Einfach kopieren kannst du die Javas nicht, denn sie haben im Header immer den Packagenamen
drin den musst du natürlich deinem Projektnamen anpassen.

Bsp : in Controller.java

package wpam.recognizer;

müsstest du dann in den amen deines packages umbenenen

Bsp

de.alibarbara.meinerstertest

usw

Liebe Grüße - Stefan
[ App - Entwicklung ]

  • Forum-Beiträge: 15

15.09.2016 23:56:42 via Website

Mist, ich hoffe da hab ich mir nicht zuviel vorgenommen....

Ich werd nächste Woche mal schauen, dass ich das Projekt auf Android Studio fehlerfrei migrieren kann, und falls ich dann immer noch Probleme habe, melde ich mich nochmal.

Aber bis dahin schonmal vielen Dank Stefan für deine Hilfe!

LG Alex

  • Forum-Beiträge: 2.214

16.09.2016 00:00:53 via Website

Jetzt weis ich wenigstens , wie der Kerle heisst :-)

Viel Erfolg Alex ... :-)

Liebe Grüße - Stefan
[ App - Entwicklung ]

  • Forum-Beiträge: 15

19.09.2016 16:13:40 via Website

So, es gibt Neuigkeiten :)

habe es geschafft das Projekt fehlerfrei zu migrieren, und den Forceclose zu beseitigen.

Die App kann jetzt während eines Anrufes erkennen, welche Tasten der Anrufer gerade gedrückt hat.

Jetzt muss ich nur noch schauen, wie ich es realisiere den Bildschirm abhängig von den gedrückten Tasten einzufärben.

Aber das dürfte durchaus machbar sein. Weiß zufällig einer, wie ich sowas in Android Studio realisiere?

Falls jemand das migrierte Projekt ohne Forceclose benötigt: einfach melden!

LG Alex