2011-09-10 2 views

risposta

7

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; 
} 
+0

Il la difficoltà è se si tratta di un formato di file wav che ha un'intestazione e blocchi. – zaph

+0

@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

+0

@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

0

Ipotizzando un file WAV singolo pezzo, provate memmapping il file e copiare i campioni in ordine inverso, a partire dalla fine del file, in Audio coda o tamponi RemoteIO , durante i callback, mentre si utilizza una di quelle API per riprodurre l'audio. Interrompere la copia prima di raggiungere l'intestazione WAV/RIFF (comunemente i primi 44 byte).

0

Per invertire un audio, perché non usare il currentPlaybackRate in MPMediaPlayback (https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPMediaPlayback_protocol/Reference/Reference.html)