iOS: So lesen Sie eine Audiodatei in einen Float-Puffer

8

Ich habe eine wirklich kurze Audiodatei, sagen wir eine Zehntelsekunde im (sagen wir) .PCM-Format

Ich möchte RemoteIO verwenden, um die Datei wiederholt zu durchlaufen, um einen kontinuierlichen Musikton zu erzeugen. Also, wie lese ich das in ein Array von Floats?

BEARBEITEN: Während ich das Dateiformat wahrscheinlich ausgraben, die Datei in eine NSData extrahieren und manuell verarbeiten könnte, nehme ich an, dass es einen vernünftigeren generischen Ansatz gibt ... (der zB verschiedene Formate beherrscht)

    
P i 24.09.2011, 06:45
quelle

3 Antworten

17

Sie können ExtAudioFile verwenden, um Daten aus jedem unterstützten Datenformat in zahlreichen Client-Formaten zu lesen. Hier ist ein Beispiel, um eine Datei als 16-Bit-Ganzzahlen zu lesen:

%Vor%

Wenn Sie Float32 Daten wollten, würden Sie format wie folgt einrichten:

%Vor%     
sbooth 04.10.2011 10:53
quelle
5

Ich bin mit RemoteIO nicht vertraut, aber ich kenne WAV's und dachte, ich würde einige Formatinformationen auf ihnen veröffentlichen. Wenn Sie benötigen, sollten Sie in der Lage sein, Informationen wie Dauer, Bitrate, usw. schnell zu analysieren.

Erstens, hier ist eine ausgezeichnete Website, die das WAVE PCM-Soundfile-Format detailliert beschreibt. Diese Seite zeigt auch hervorragend, wie sich die verschiedenen Byte-Adressen innerhalb des "fmt" -Unterstücks verhalten.

WAVE-Dateiformat

  • Eine WAVE besteht aus einem "RIFF" Chunk und nachfolgenden Sub-Chunks
  • Jeder Chunk hat mindestens 8 Bytes
  • Die ersten 4 Bytes sind die Chunk ID
  • Nächste 4 Bytes ist die Chunk-Größe (Die Chunk-Größe gibt die Größe des Rests des Chunks an, mit Ausnahme der 8 Bytes, die für die Chunk-ID und die Chunk-Größe verwendet werden)
  • Jede WAVE hat die folgenden Chunks / Sub Chunks
    • "RIFF" (erster und einziger Teil. Der Rest sind technisch Teilstücke.)
    • "fmt" (normalerweise der erste Sub-Chunk nach "RIFF", kann aber irgendwo zwischen "RIFF" und "data" sein. Dieser Chunk enthält Informationen über den WAV wie Anzahl der Kanäle, Abtastrate und Byte-Rate)
    • "data" (muss das letzte Sub-Chunk sein und enthält alle Sounddaten)

Gemeinsame WAVE-Audioformate:

  • PCM
  • IEEE_Float
  • PCM_EXTENSIBLE (mit einem Unterformat von PCM oder IEEE_FLOAT)

WAVE Dauer und Größe

Die Dauer einer WAVE-Datei kann wie folgt berechnet werden:

%Vor%

Wo

%Vor%

und DataChunkSize enthalten nicht die 8 Bytes, die für die ID und die Größe des Unterblocks "data" reserviert sind.

Wenn Sie das wissen, kann die DataChunkSize berechnet werden, wenn Sie die Dauer des WAV und des ByteRates kennen.

%Vor%

Dies kann nützlich sein, um die Größe der Wav-Daten beim Konvertieren von Formaten wie mp3 oder wma zu berechnen. Beachten Sie, dass ein typischer wav-Header 44 Bytes ist, gefolgt von DataChunkSize (dies ist immer der Fall, wenn die wav mit dem Normalizer-Tool konvertiert wurde - zumindest beim Schreiben).

    
Sam 03.10.2011 20:40
quelle
3

Dies ist der Code, mit dem ich meine Audiodaten (Audiodatei) in Gleitkommadarstellung konvertiert und in einem Array gespeichert habe.

%Vor%     
Ankush 15.01.2014 10:57
quelle

Tags und Links