Wie löst man eine Vibration bei der Toneingabe aus?

8

Ich versuche, eine Android-Anwendung zu erstellen, wo ich eine bestimmte Frequenz eines Pieptons filtere und das Telefon vibrieren lasse.

Ich nehme Eingaben vom MIC von Mobile und benutze die MediaRecorder-Klasse. Mit dieser Klasse kann ich die Eingabe aufnehmen, speichern und abspielen. Jetzt muss mein Handy vibrieren, wenn ein Signalton oder ein Ton ertönt.

Die Eingabe erfolgt über ein Kabel an die Kopfhörerbuchse des Mobiltelefons, so dass ich weiß, dass nur eine Frequenz eingegeben wird.

Ich habe eine Schaltfläche, mit der ich die Aufnahme starten kann. Ich habe bereits Berechtigungen zum Vibrieren und Aufnehmen in meiner Manifest-Datei.

%Vor%

Ich habe auch versucht, im Internet zu suchen und habe eine ähnliche Frage hier gefunden , aber ich kann keine richtige Antwort finden.

Allerdings kann ich das Telefon vibrieren lassen, wenn ich auf eine andere Taste klicke und hier ist das Code-Snippet,

%Vor%

Ich habe versucht, einen Vibrator in recorder.start () zu rufen; Funktion, aber dadurch vibriert das Telefon, auch wenn kein Ton mehr zu hören ist. Ich habe auch versucht, Hilfe von dieser Frage zu bekommen, so dass es immer, wenn es Stille gibt, das Telefon nicht sollte vibrieren, aber ich bin verwirrt, ich verstehe irgendwie, dass es einen Booleschen geben sollte, der wahr wird, wenn es Ton gibt und das Telefon vibrieren lässt, aber ich bin nicht in der Lage, diese Logik in Code zu stellen. Bitte lassen Sie mich wissen, was ich in diesem Zusammenhang tun kann und in welche Richtung soll ich suchen?

UPDATE Ich fand dies totural, um den Fortschrittsbalken mit der Amplitude des Eingangssignals zu zeigen, es funktioniert gut und ich habe versucht, das Telefon vibrieren zu lassen, wenn es einen Wert im Puffer gibt. Jetzt vibriert es sogar, wenn die Amplitude Null ist, ich nehme an, das liegt an der Tatsache, dass jede Vibration Geräusche verursacht, die das Telefon zum Vibrieren bringen. Ich kann die Funktion nicht über TOAST überprüfen, da java.lang.RuntimeException: Kann den Handler nicht in Thread erstellen, der Looper.prepare () nicht aufgerufen hat. Gibt es einen Vorschlag?

    
Momo Pomo 22.02.2016, 13:28
quelle

4 Antworten

6

Bei Ihrem Hauptproblem können Sie vielleicht nach der Amplitude des Klangs suchen und nur vibrieren, wenn ein minimaler Schwellwert erreicht wurde. Etwas wie das:

%Vor%

Weitere Informationen zur Erkennung des Schallpegels finden Sie unter:

Was die Ausnahme java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() betrifft, passiert das, weil Toast auf dem Hauptthread Ihrer App ausgeführt werden muss. Wenn Ihr Thread code (wie ein AsyncTask ) innerhalb eines Activity liegt, können Sie Folgendes versuchen:

%Vor%

Andernfalls müssen Sie die Schlussfolgerung Ihrer Methode irgendwie an die Activity übergeben, damit Toast ausgeführt wird.

BEARBEITEN:

Wenn Sie dies von einem Button aus verwenden möchten, können Sie OnClickListener auf den% code% -Ruf von Activity setzen und dort onCreate() ausführen. Zum Beispiel:

%Vor%

Ich schlage vor, dass Sie wie AsyncTask funktioniert , bevor Sie dies im Produktionscode verwenden.

    
Ricardo Lage 28.02.2016 12:13
quelle
1

Sie möchten das Audio testen und sofort analysieren.

MediaRecorder scheint hierfür einen hohen Level zu haben, er erfasst nur die Datei. Wahrscheinlich möchten Sie stattdessen den AudioRecorder verwenden, da er direkten Zugriff auf die Eingabeproben bietet.

Um einen spezifischen Ton zu erkennen, können Sie den Goertzel-Algorithmus auf der Seite verwenden Eingabeproben. Hier ist eine C ++ Implementierung , die ich vor Jahren gemacht habe und die als Beispiel dienen könnte.

Um einen Sound über einen bestimmten Schwellenwert zu erkennen können Sie Root Mean Square Analysieren Sie die Eingangs-Samples und lassen Sie sie auslösen, sobald die Lautstärke Ihre Schwelle erreicht. Hier ist ein Python-Beispiel , das auf laute Geräusche von einem Mikrofon reagiert.

    
Espen Riskedal 03.03.2016 14:08
quelle
0

Versuchen Sie Folgendes:

%Vor%     
Sats 22.02.2016 13:40
quelle
0

Sie können dies versuchen:

%Vor%     
Rashiduzzaman Khan 28.02.2016 11:59
quelle