2011-01-12 9 views
5

Ich bin in den sehr ealy Stufen der Entwicklung dieser App, aber ich habe bereits ein Problem erreicht. Ich muss in der Lage sein, eine Audiodatei rückwärts abzuspielen (Sie möchten versteckte Nachrichten aufdecken;)). Ich habe keine Erfahrung mit Audio auf Android und habe keine Ahnung, ob das überhaupt möglich ist.Reverse-Audiodatei in Android

fand ich eine Frage hier, die das Problem in Java löst (Click Here For Question)

Aber diese Nutzung der javax.sound Bibliothek macht die Android nicht unterstützt. Brauche ich diese Bibliothek, um dieses Problem zu lösen, oder gibt es eine andere Möglichkeit, eine Audiodatei umzukehren?

+0

Hallo @SamRowley Erreichen Sie Ihr Ziel mit dem beschriebenen Algorithmus? Ich kopiere den ersten 44-Byte-Header genau aus dem Original in umgekehrte Audiodatei, und ich konnte WAV-Audio nicht wiedergeben? Ich verwende Sox und Reverse Audio und überprüfen, dass 44-Byte-Header nicht genau ist? Bitte, wenn Sie mir mit irgendeinem Rat helfen könnten, ich werde es schätzen –

Antwort

5

Eine typische WAV-Datei besteht aus einem 44-Byte-Header, gefolgt von den tatsächlichen Abtastwerten. Die Größe eines "Frames" hängt von den Eigenschaften der WAV-Datei ab: Eine Datei, die Stereo und 16 Bit pro Sample enthält, hat eine Rahmengröße von 4 Byte (zwei Byte für das linke Sample und zwei Byte für das rechte Sample)).

Also in Code, würden Sie eine zweite WAV-Datei erstellen, indem Sie ein Byte-Array die gleiche Gesamtgröße wie das Original erstellen. Sie kopieren den 44-Byte-Header aus dem Original in die Kopie und durchlaufen dann die Originalframes, beginnend beim letzten und vorwärts zum ersten. Sie kopieren jeden Rahmen in den inversen Ort in dem Kopierarray (d. H. Der letzte Originalrahmen wird unmittelbar nach dem Kopf in das Kopierarray kopiert; der vorletzte Rahmen wird nach dem ersten Rahmen usw. kopiert). Dann spielen Sie einfach die umgekehrte Datei.

Sie brauchen also nicht die javax.sound-Bibliothek, um dies zu tun - Sie müssen nur in der Lage sein, Bytes zu kopieren und zu bearbeiten. FYI, nicht alle WAV-Dateien sind so "kanonisch" (kanonisch bedeutet 44-Byte-Header plus Beispielwerte und nichts anderes). Das WAV-Format ist eigentlich ein RIFF-Format, was bedeutet, dass Sie in der Theorie eine komplexere Extraktion der Beispielwerte durchführen müssen. In der Praxis (besonders, wenn Sie die WAV-Dateien selbst erstellen) können Sie normalerweise mit einem viel einfacheren Ansatz, wie ich hier beschrieben habe, durchkommen.

HINWEIS: Wenn es sich bei Ihren Sounds um MP3-Dateien handelt, ist die Umkehrung komplizierter, da die Beispieldaten nicht als Samples in einer MP3-Datei gespeichert werden. Wenn Sie MP3s verwenden, können Sie sie umgekehrt in WAV konvertieren und dann die WAV-Datei umkehren.

+0

Ich erstelle die WAV-Datei, indem ich das Audio vom Mikrofon mit MediaRecorder aufnehme, also denke ich, dass dieser Weg gut wäre? Wie würde ich gehen, um die Datei von der SD-Karte in ein Byte-Array gespeichert und den 44-Bit-Header kopieren? Danke für deine erste Antwort, es war bisher hilfreich und ich verstehe das Konzept. – SamRowley

+1

Ja, die WAV-Datei, die Sie von MediaRecorder erhalten, ist höchstwahrscheinlich kanonisch, also sollten Sie in Ordnung sein. Hier ist ein Link mit etwas mehr Code, der Ihnen helfen sollte, das zu tun, was Sie tun müssen: http://www.dreamincode.net/forums/topic/171550-converting-short-array-to-byte-array-using-java- On-Android-Gerät / – MusiGenesis

Verwandte Themen