Objective-c / IOS: какой самый простой способ воспроизвести аудиофайл задом наперед - PullRequest
6 голосов
/ 10 сентября 2011

Я уже давно борюсь с этим, и в сети нет примеров кода.Может кто-нибудь мне помочь?

Мое приложение использует AVFoundation для записи звука.@ 16-битная глубина, 2 канала, WAV

Я могу получить доступ к байтам аудио, я просто не знаю, как обратить его обратно.

Ответы [ 3 ]

7 голосов
/ 10 сентября 2011

В волновых выборках данных чередуются. Это означает, что данные организованы следующим образом.

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;
}
0 голосов
/ 29 февраля 2012

Чтобы перевернуть звук, почему бы не использовать currentPlaybackRate в MPMediaPlayback (https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPMediaPlayback_protocol/Reference/Reference.html)

0 голосов
/ 11 сентября 2011

Предполагая, что WAV-файл состоит из одного фрагмента, попробуйте переписать файл и скопировать сэмплы в обратном порядке, начиная с конца файла, в буферы Audio Queue или RemoteIO во время обратных вызовов, используя один из этих API. играть аудио. Остановите копирование, прежде чем попасть в заголовок WAV / RIFF (обычно это первые 44 байта).

...