2011-09-10 9 views

Odpowiedz

7

W danych falowych próbki są przeplatane. Oznacza to, że dane są zorganizowane w ten sposób.

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

Ponieważ dla każdej próbki wynosi 16 bity (2 bajty) pierwszą próbkę 2 kanał (to znaczy do lewej i prawej) 4 bajtów.

ten sposób wiesz, że ostatnia próba w bloku danych fali jest następujący:

wavDataSize - 4 

Następnie można załadować każdą próbkę w czasie poprzez skopiowanie go do innego bufora zaczynając od końca zapisu i odczytu do tyłu. Gdy dojdziesz do początku danych fal, odwróciłeś dane fal i odtwarzanie zostanie odwrócone.

Edycja: Jeśli chcesz mieć łatwy sposób czytania plików wave na iOS, sprawdź numer 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

Trudność polega na tym, że jest to format pliku wav z nagłówkiem i fragmentami. – zaph

+0

@CocoaFu: Niezupełnie. Apple oferuje całą gamę funkcji związanych z plikami wave. Sam format nie jest trudny do zrobienia. – Goz

+0

@Goz Dzięki, jeśli nie jest to zbyt trudne pytanie, czy możesz podać próbkę kodu, aby pomóc mi zrozumieć? Jak można to osiągnąć w sensie kodowym? – DaveSmith122

0

Zakładając plik WAV single-klocek, spróbuj memmapping plik, a skopiowanie próbek w odwrotnej kolejności, zaczynając od końca pliku, do audio kolejce lub buforów RemoteIO podczas wywołań zwrotnych podczas używania jednego z tych interfejsów API do odtwarzania dźwięku. Zatrzymaj kopiowanie, zanim dotrzesz do nagłówka WAV/RIFF (zwykle pierwsze 44 bajty).

0

odwrócić dźwięku, dlaczego nie skorzystać z currentPlaybackRate w MPMediaPlayback (https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPMediaPlayback_protocol/Reference/Reference.html)