Nei dati di onda i campioni sono intercalati. Ciò significa che i dati sono organizzati in questo modo.
Sample 1 Left | Sample 1 Right | Sample 2 Left | Sample 2 right ... Sample n Left | Sample n right
Come ogni campione è di 16 bit (2 byte) il primo campione 2 canali (cioè sia a sinistra e destra) è 4 byte.
questo modo si sa che l'ultimo campione in un blocco di dati wave è la seguente:
wavDataSize - 4
È possibile quindi caricare ogni campione in un momento copiandolo in un buffer diverso a partire dalla fine della registrazione e della lettura all'indietro. Quando arrivi all'inizio dei dati delle onde hai invertito i dati delle onde e la riproduzione sarà invertita.
Modifica: Se desideri leggere facilmente i file wave su iOS, consulta lo Audio File Services Reference.
Edit 2:
readPoint = waveDataSize;
writePoint = 0;
while(readPoint > 0)
{
readPoint -= 4;
Uint32 bytesToRead = 4;
Uint32 sample;
AudioFileReadBytes(inFile, false, maxData, &bytesToRead &sample);
AudioFileWriteBytes(outFile, false, writePoint, &bytesToRead, &sample);
writePoint += 4;
}
Il la difficoltà è se si tratta di un formato di file wav che ha un'intestazione e blocchi. – zaph
@CocoaFu: Non proprio. Apple ti offre un sacco di funzioni che si occupano di file wave. Il formato non è poi così difficile da fare da solo. – Goz
@Goz Grazie, se non è troppo difficile da chiedere, potresti fornire un esempio di codice per aiutare la mia comprensione? Come si otterrebbe questo in termini di codice? – DaveSmith122