Audio Vergleich on the fly

G

gerdau

Neues Mitglied
0
Hallo liebe Entwickler-Community,

ich "hänge" grad bei einem Projekt von mir. Ich möchte mit einer App eine Ton-Folge als Referenz aufnehmen und sobald diese Tonfolge wieder "gehört" wird darauf reagieren. Mit AudioRecord oder MediaRecorder ist die Referenz-Aufnahme ja eigentlich kein Problem, aber ich hab keine Ahnung wie ich 2 Audio-files mit einander vergleichen kann, geschweige denn wie ich das "on the fly" machen soll.

Das ganze soll später dazu dienen die Entfernung zur Ton-quelle zu messen ( ja ich weiss, ist ziemlich Zeitkritisch und wird wahrscheinlich sehr ungenau).
Habt Ihr da schon Erfahrungen, oder Ideen?

Ich bin ein ziemlicher newbie was App-entwicklung betrifft und JAVA und ich werden wohl auch nie gute Freunde :winki:, habt bitte etwas Rücksicht wenn ich nicht gleich alles sofort begreife. :sad: .

Vielen Dank im vorraus!
 
Keiner??!!!:confused2::ohmy:
 
Hallo,

ich werde aus der Frage nicht so ganz schlau. Wenn du nur die Entfernung messen willst, wieso soll dann die Musik wiedererkannt werden? Reicht es nicht aus einfach nur Lautstärkeunterschiede zu ermitteln und zu verarbeiten.

Generell ist meine Einschätzung aber auch, dass das super ungenau wird (und stark davon abhängt in welchem Winkel man das Gerät hält) - gleichzeitig kann ich mir vorstellen, dass das Vergleichen von Musik (Tonfolgen, Lautstärkeunterschieden - wie auch immer) eher etwas ist woran sich professionelle Programmierer schon die Zähne ausbeißen - sofern sie keine vorgefertigte Bibliothek (eher eine Engine?) nutzen können.

Mehr kann ich leider nicht zu dem Thema sagen, allerdings kann ich dir versichern, dass ich ebenfalls mal gesagt habe dass "Java und ich keine Freunde werden" -> meist ist es nicht mal Java was den Einstieg etwas steinig macht, sondern mehr die Einbindung von Code in das Android-System, sprich: es ist hilfreich (besser: "wichtig") die Android-API mit ihren Eigenschaften / Eigenarten zu kennen.
Das wiederum lässt sich gut über das Lesen der Dokumentation und natürlich auch durch praktische Erfahrung üben.

Kopf hoch, zur Not schreib das Projekt ab und plane was Neues (was für den Einstieg vielleicht leichter darstellbar ist) ;)
 
Das mit der Tonfolge(keine Musik, ich meinte nur 1-3 Töne) war auch nur eine Idee, sicher würde es auch im groben reichen einen Lautstärkeunterschied zu erkennen.
Nett wäre natürlich auch wenn ich sagen könnte: Reagiere wenn Du Einen Ton mit einer Frequenz X und einer min. "Amplitude" von Y erkennst.
Allerdings hab ich dafür auch noch nichts in der Android-API gefunden, was ich nutzen könnte.

Das Projekt abschreiben ist leider nicht drin, gehört zu meiner Studienarbeit bei der ich das Thema wohl ein wenig unterschätzt habe.:sad:
 
Ich kann dir zwar nicht direkt helfen, da ich ziemlich wenig Ahnung von Audio-Dingen habe, aber ein paar Gedanken schreib ich mal hier hin ;) (Alles folgende basiert nur auf Annahmen, aber vielleicht hilfts ja ein wenig)

  • Ich habe mal kurz ein Codebeispiel zur Amplitudenbestimmung angeschaut, siehe HIER. Da sehe ich, dass die Daten in PCM codiert sind. Ohne genau zu wissen, wie PCM aufgebaut ist, glaube ich, dass es unkomprimierte Daten sind, also scheint das schonmal ein guter Ansatz zu sein.
  • Wenn du ein Referenz-Ton abspeichern willst, musst du dir überlegen, in welchem Format. Dinge wie MP3 sind komprimiert, daher wird es vermutlich schwer MP3 mit PCM vom Mikrofon zu vergleichen. Vielleicht wäre es also sinnvoll, den Referenz-Ton auch unkomprimiert zu speichern. Eine Möglichkeit könnte WAV sein, dort scheinen die Daten auch als PCM (LPCM..?) gespeichert zu werden.
  • Wenn du dann mal zwei Töne (einer aus einer Datei, einer vom Mikrofon) hast, die auch beide im selben Format sind, kannst du wohl mehr oder weniger einen direkten Byte-Vergleich machen. Mittels AudioRecord.read() erhälst du ja ein Byte-Array und aus der WAV-Datei könntest du das sicher au in ein Byte-Array lesen. Bytes sind schlussendlich ja nur Zahlen, die kann man dann vergleichen.
  • Der Vergleich der Bytes ist vermutlich nicht so einfach, wie es klingt. Ein Vergleich auf 100%ige Übereinstimmung ist leicht, aber durch Hintergrundgeräusche etc. wirst du niemals eine solche Übereinstimmung erhalten. Du müsstest also eher nach grossen Ähnlichkeiten suchen, die über eine gewisse Zeitspanne (vielleicht eine Sekunde?) anhalten.
  • Um weitere Daten aus deinem Audio-Stream (Frequenz?) zu erhalten, könnte dir die Schnelle Fourier-Transformation helfen.
 

Ähnliche Themen

J
  • Jellymelly95
Antworten
0
Aufrufe
670
Jellymelly95
J
D
Antworten
4
Aufrufe
780
DTSchneiderlein
D
Tiefkuehlpizza
Antworten
9
Aufrufe
933
Tiefkuehlpizza
Tiefkuehlpizza
Zurück
Oben Unten