Wie konvertiert man ein 16-Bit-PCM-Audio-Byte-Array in ein Double- oder Float-Array?

8

Ich versuche, Fast Fourier Transform in einer .3gpp Audiodatei durchzuführen. Die Datei enthält eine kleine Aufnahme von 5 Sekunden in 44100 kHz vom Mikrofon des Telefons.

Jeder Java-FFT-Algorithmus, den ich finden kann, benötigt nur double [], float [] oder Complex [], aus offensichtlichen Gründen, aber ich lese die Audiodatei in einem Byte-Array, also bin ich irgendwie verwirrt darüber, wohin ich von hier gehe. Das einzige, was ich finden konnte, ist die Antwort auf eine vorherige Frage:

Android-Audio-FFT zum Abrufen bestimmter Frequenz Magnitude mit Audiorecorder

Aber ich bin nicht sicher, ob das die richtige Vorgehensweise ist oder nicht. Jeder mit etwas Einblick?

    
soren.qvist 25.04.2012, 21:51
quelle

2 Antworten

10

Es gibt keine Alternative. Sie müssen eine Schleife ausführen und jedes Element des Arrays separat darstellen.

Ich mache das gleiche für Shorts, die ich als Schwimmer fft:

%Vor%

EDIT 26.4.2012 basierend auf Kommentaren

Wenn Sie wirklich 16 Bit PCM haben, aber es als ein Byte [] haben, dann können Sie dies tun:

%Vor%

dann

%Vor%

Wenn Sie nicht mit einer seltsamen und schlecht entworfenen Klasse arbeiten, die Ihnen zuerst das Byte-Array gab, sollten die Designer dieser Klasse die Bytes gepackt haben, damit sie konsistent mit der Art sind, wie Java Bytes konvertiert (2 gleichzeitig). zu Shorts.

    
mwengler 25.04.2012, 23:39
quelle
-3
%Vor%     
Kyle 25.04.2012 23:40
quelle

Tags und Links