Ich habe an einer Android-App gearbeitet, die Eingaben vom Mikrofon entgegennimmt, wenn der Benutzer hineinbläst. Ich verwende eine FFT-basierte Schallanalyse und wandle die Werte in Frequenz um, indem ich eine Nulldurchgangsmethode verwende.
Mit den Ergebnissen bin ich immer noch unzufrieden. Was ich will, ist, es sollte nur den "Luftstoß" erkennen und einen eindeutigen Wert generieren, damit ich alle anderen Geräusche ignorieren kann. Ich habe bei Google viel danach gesucht, aber keine eindeutigen Antworten erhalten. Ich hoffe ich bekomme hier eine Lösung.
EDIT: Jetzt hatte ich nicht wirklich genug Zeit, um die bereitgestellten Lösungen zu recherchieren. Außerdem denke ich, dass ich die Formeln nehmen und meine eigenen Klassen in JAVA erstellen muss, und das wird einige Zeit dauern. Aber ich möchte den Link für die von mir veröffentlichte Anwendung teilen. Es ist nicht das effizienteste, wie ich in meiner Frage erwähnt habe, aber es funktioniert. Der Link zu meiner App lautet:
Ich möchte, dass Android-Benutzer es ausprobieren und mir auch Feedback geben.
Die meisten Kommentare konzentrieren sich auf das häufigere Problem des Entfernens/Ignorierens des Rauschens, damit der andere Ton extrahiert werden kann. Sie möchten das Gegenteil tun: Luftblasgeräusche erkennen und alle anderen Geräusche zurückweisen.
Erstens wird Ihre Nulldurchgangsmethode dafür nicht sehr nützlich sein. Air-Blow ist in der Signalform nahe an rosa Rauschen, mit einer gewissen "Tönung" des Spektrums, abhängig von der Position des Gebläses, der Position des Mikrofons, der Herstellung des Telefons usw.
Da Sie sagen, dass Sie bereits FFT haben, würde ich wiederholte Frames von etwa 50 ms ausführen und nach der Signatur suchen, in das Mikrofon zu blasen. Es wird wahrscheinlich eine sehr breite Spektrumsverteilung ohne scharfe Spitzen sein. Außerdem wird es eine Dauer haben, die größer ist als ein einzelnes Bild.
Andere Signale haben oft deutlichere Spitzen innerhalb des Spektrums. Auf diese Weise können Sie berechnen, wie gut das erhaltene Spektrum im Vergleich zu einer breiten, rosa Rauschen-ähnlichen Verteilung ist. Beachten Sie, dass die Ausgabe der FFT die Frequenzbins nicht in aufsteigender Reihenfolge hält, sondern in der "Schmetterlings" -Reihenfolge, und jeder andere Datenwert aus der FFT eher Phase als Amplitude ist und daher für diese Analyse nicht interessant ist.
Wenn Sie sowohl ein „Schlag“-Geräusch als auch ein „Hintergrund“-Geräusch hören, haben Sie ein „Grundrauschen“ des Schlaggeräuschs und einzelne Spitzen von den anderen Geräuschen. Sie müssen die Spitzen entfernen und das Blasgeräusch auf der Grundlage eines beliebigen Profils erkennen, das Sie Ihrem Spektrum "unterlegen" können, und trotzdem das Blasgeräusch anpassen. Es gibt verschiedene Kurvenanpassungs-/Regressionsfunktionen, die Sie hier verwenden können.
Letztendlich denke ich, dass Sie mit diesem Ansatz immer noch Probleme haben werden, da verschiedene Telefone unterschiedliche Klangeigenschaften haben. Möglicherweise müssen Sie die Anwendung auf dem jeweiligen Telefon, das der Benutzer verwendet, „trainieren“, um das beste Ergebnis zu erzielen.
Dies ist eher ein guter Ratschlag, aber es gibt einige Hinweise, also seien Sie geduldig.
Ich werde dies vom Standpunkt eines Sängers (der ich angeblich bin) angreifen. Phrasen, die mit P, B und T beginnen (wobei zum Beispiel P am schlechtesten ist), senden einen Luftstoß aus dem Mund zum Mikrofon, der einem kurzen Luftblasen ähnelt.
Halten Sie Ihre Hand vor Ihren Mund und sagen Sie POP. Du sollst fühlen, was ich meine.
Warum sage ich das? Eine Standardanforderung für ein Studiomikrofon ist ein POP-Filter, und dies ist eine dünne Gaze, die auf einen Rahmen gespannt ist, der das Auftreffen von Knallgeräuschen auf das Mikrofon weitgehend verhindert. Sie dämpfen keine echte Sprache oder Gesang; Sie stoppen nur den Luftstrom, der auf die Mikrofonmembran trifft und einen Unsinn darüber macht, was Sie aufnehmen möchten.
Bei anderen Mikrofonen sind sie in das schwarze, runde, schaumige Ding eingebettet, in das die Leute hineinsingen. Sie sind nicht so gut, funktionieren aber für Live-Auftritte.
Ich habe also festgestellt, dass normale Sprache in ein Mikrofon Luftstöße enthalten kann, und das macht es für Sie schwieriger, etwas zu entwerfen, das normale Sprache und jemanden, der bläst, unterscheiden kann.
Am Mikrofon eines Android-Telefons befindet sich ein Poppfilter, der Ihre App erschwert. Es sieht aus wie ein kleines rundes schwarzes Stück Material, das das Elektretmikrofon bedeckt.
Was ich sagen kann, ist, dass es definitiv einen niederfrequenten Inhalt (unter 100 Hz) geben wird, wenn jemand in ein Mikrofon bläst, und ich würde empfehlen, Ihren PC, eine Soundkarte und ein Programm zu verwenden, das WAV-Dateien öffnen und bearbeiten kann. Ich benutze Wavelab, aber es gibt einige kostenlose Programme. Nehmen Sie einige "Schläge" auf und analysieren Sie die Ergebnisse. Wenn Sie etwas finden können, das POPs erkennt, interessiert mich, was Sie finden, da mir bekannt ist, dass es keine Hardware- oder Softwarefilter gibt, die dem mechanischen Poppfilter nahe kommen.
Ich habe ein paar ausprobiert und sogar versucht, einige der Filter zu modifizieren, um die Pops zu entfernen. Am Ende habe ich neu aufgenommen oder bin mit einem Messer in die Wave-Datei gegangen und habe die Abschnitte, die knallten, abgeschlachtet, weil Sie sie visuell (in der Wave-Datei) so klar wie den Tag sehen können.
Jim Dearden
Matt_9.0
Jim Dearden
Anindo Ghosh
Matt_9.0
Scott Seidman
John u