В волновых выборках данных чередуются. Это означает, что данные организованы следующим образом.
Sample 1 Left | Sample 1 Right | Sample 2 Left | Sample 2 right ... Sample n Left | Sample n right
Поскольку каждая выборка имеет 16 бит (2 байта), первая 2-канальная выборка (т.е. для левой и правой) имеет размер 4 байта.
Таким образом, вы знаете, что последняя выборка в блоке волновых данных выглядит следующим образом:
wavDataSize - 4
Затем вы можете загружать каждый семпл за один раз, копируя его в другой буфер, начиная с конца записи и читая в обратном направлении. Когда вы дойдете до начала волновых данных, вы перевернули волновые данные, и воспроизведение будет полностью изменено.
Редактировать: Если вам нужны простые способы чтения волновых файлов на iOS, ознакомьтесь с Справочником по службам аудиофайлов .
Редактировать 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;
}