2011-09-10 7 views

Respuesta

7

En muestras de datos de onda se intercalan. Esto significa que los datos están organizados de esta manera.

Sample 1 Left | Sample 1 Right | Sample 2 Left | Sample 2 right ... Sample n Left | Sample n right 

Como cada muestra es de 16-bits (2 bytes) la primera muestra de 2 canales (es decir, tanto para la izquierda y la derecha) es de 4 bytes de tamaño.

esta manera usted sabe que la última muestra en un bloque de datos de onda es la siguiente:

wavDataSize - 4 

, puede cargar cada muestra a la vez de copiarlo en un buffer diferente a partir de finales de la grabación y lectura hacia atrás. Cuando llegue al inicio de los datos de la ola, habrá invertido los datos de la ola y la reproducción se invertirá.

Editar: Si quieres formas fáciles de leer archivos de onda en iOS echa un vistazo a Audio File Services Reference.

Editar 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

El La dificultad es si se trata de un formato de archivo wav que tiene un encabezado y fragmentos. – zaph

+0

@CocoaFu: No realmente. Apple te proporciona un montón de funciones que se ocupan de los archivos de onda. El formato no es tan difícil de hacer uno tú mismo. – Goz

+0

@Goz Gracias, si no es demasiado problema para preguntar, ¿podría proporcionarme una muestra de código para ayudarme a entenderlo? ¿Cómo se lograría esto en cuanto al código? – DaveSmith122

0

Suponiendo un archivo WAV de un solo trozo, intente memmapping el archivo, y la copia de las muestras a cabo en orden inverso, empezando desde el final del archivo, en Audio Queue o tampones RemoteIO , durante las devoluciones de llamada, mientras usas una de esas API para reproducir audio. Deje de copiar antes de llegar al encabezado WAV/RIFF (comúnmente los primeros 44 bytes).

0

Para invertir un audio, por qué no usar el currentPlaybackRate en MPMediaPlayback (https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPMediaPlayback_protocol/Reference/Reference.html)

Cuestiones relacionadas