2016-05-15 9 views
0

Ich versuche, eine Metronom-App zu machen, und ich habe den Kern-Code aus der BeatKeeper App/Github Repo ausgeliehen. Ich habe ein Problem beim Versuch, die Benutzeroberfläche zu synchronisieren, wenn das Metronom einen Beat spielt. Das BeatKeeper-Repo versucht, dieses Problem anzugehen, aber die Lösung ist unzureichend. Ich habe auch ein paar Wege ausprobiert, aber nichts hat funktioniert.Synchronisieren AudioTrack Streaming mit UI für Metronom

Ich benutze die AudioTrack-Klasse zum Schreiben von Audio (es ist ein Snare-Sound). Das Audio wird aus einer WAV-Datei importiert. Bei einem Schlag pro Minute berechne ich die Anzahl der Snare-Samples, die geschrieben werden sollen, und fülle dann die verbleibenden Samples mit 0 (für Stille). Also schreibe ich für jeden Schlag die Snare-Samples und dann die stummen Samples in den AudioTrack. Nach dem Schreiben des Snare-Beispiels sende ich eine Nachricht (unter Verwendung eines Handlers) an den UI-Thread, der eine TextView des aktuellen Beats aktualisiert. Die beiden sind jedoch nicht synchron.

Weiß jemand, wie man das macht? Ich habe ein paar Metronom-Apps (und Metronome Beats) dekompiliert, die das perfekt machen. Ich habe den Code von AudioTrack gefunden, also nehme ich an, dass dies mit AudioTrack möglich ist.

Ich habe eine sehr blanke Anwendung/github Repo erstellt, um den Code zu teilen. Die Metronome Klasse ist, wo die Magie passiert. Ich habe auch eine branch erstellt und habe versucht, die NotificationMarkerPosition von AudioTrack zu verwenden, um die Benutzeroberfläche zu aktualisieren. Mit dem Listener verwende ich die aktuelle Kopfposition und füge bei jedem Auftreten des Ereignisses eine neue Markierung hinzu, um Perpetual-Beate-Events zu erhalten. Dieser Versuch beginnt jedoch nach einigen Schlägen zu driften und steigt ebenfalls aus. Ich habe sogar versucht, die Abweichung zu erklären und zu korrigieren, aber das funktioniert auch nicht.

Ich weiß, dass es normalerweise üblich ist, Code in einer Frage zu schreiben, aber ein Repo erschien mir praktischer. Bei Bedarf kann ich aber Code schreiben. Ich würde mich über jede Hilfe/Vorschläge oder Alternative freuen, um ein Metronom zu erstellen, das mit der Benutzeroberfläche synchronisiert ist.

Antwort

0

Wie wäre es mit diesem Projekt? https://github.com/felixpalmer/android-visualizer

Es Visualizer als Kern verwenden.

+0

Haben Sie Erfahrung mit Visualizer und glauben, es wird für meinen Anwendungsfall funktionieren oder ist es nur ein Vorschlag? Ich habe nicht viel Erfahrung mit der Audioprogrammierung, aber bis jetzt habe ich keine Leute gesehen, die Visualizer für meinen speziellen Anwendungsfall verwenden. Ich bin dran, es zu versuchen, aber ich wollte nur meine Erwartungen messen. Danke – blinkmacalahan

+0

Nur ein Vorschlag. –

Verwandte Themen