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;
}
El La dificultad es si se trata de un formato de archivo wav que tiene un encabezado y fragmentos. – zaph
@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
@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