Omówienie usługi ADPCM
Adaptacyjna modulacja kodu impulsu różnicowego (ADPCM) to stratny format kompresji, który jest implementowany dla XAudio2, aby zapewnić dodatkowe funkcje do określania rozmiaru bloku próbki kompresji. W przypadku formatu kompresji stratnej niektóre dane są zmieniane i utracone podczas kompresji. ADPCM może osiągnąć współczynniki kompresji do 4:1.
Implementacja programu ADPCM dla XAudio2 udostępnia dodatkowe funkcje umożliwiające określenie rozmiaru bloku próbki kompresji. Narzędzie ADPCM umożliwia projektantowi audio wybranie ustawienia, które jest odpowiednim kompromisem między rozmiarem, jakością i rozdzielczością (w przypadku umieszczania punktów pętli).
XAudio2 używa zmodyfikowanej wersji kodeka Microsoft ADPCM, który obsługuje rozszerzone formatowanie danych wymagane do zapewnienia niestandardowych rozmiarów bloków próbek. Z tego powodu dane audio XAudio2 nie mogą być odtwarzane przez aparaty audio, które nie obsługują tej wersji koder-dekodera ADPCM.
Notatka
Obecnie kompresja ADPCM jest dostępna tylko dla systemu Windows, w tym XNA Game Studio Express dla wdrożeń systemu Windows.
Kodowanie ADPCM
Dane audio są kodowane w usłudze ADPCM przy użyciu narzędzia wiersza polecenia AdpcmEncode.
AdpcmEncode
Aby zakodować pliki audio jako ADPCM do użytku z XAudio2, użyj narzędzia wiersza poleceń AdpcmEncode.
Dekodowanie ADPCM
Dekodowanie oprogramowania ADPCM jest obsługiwane w programie XAudio2.
XAudio2
Aby używać zakodowanych danych ADPCM w programie XAudio2, należy zainicjować strukturę ADPCMWAVEFORMAT z wartościami specyficznymi dla programu ADPCM i przekazać je jako argument do IXAudio2::CreateSourceVoice podczas tworzenia głosu źródłowego. Aby zapoznać się z przykładem ładowania i odtwarzania dźwięku w programie XAudio2, zobacz How to: Play a Sound with XAudio2 (Jak odtwarzać dźwięk za pomocą biblioteki XAudio2).
Próbki na Blok
Kompresja ADPCM działa, oddzielając kształt fali na bloki i przewidując odmianę próbek kształtów falowych w każdym bloku. Rozmiar bloków jest mierzony w próbkach. Najmniejszy rozmiar bloku to 32 próbki, a najwyższy to 512 próbek.
Większe bloki umożliwiają lepszą kompresję, co powoduje mniejsze rozmiary plików, ale kosztem jakości dźwięku i rozdzielczości w celu wyrównania punktów pętli.
Ogólnie rzecz biorąc, modyfikowanie wartości SamplesPerBlock powoduje te kompromisy:
Jeśli SamplesPerBlock... | Kompresja pliku | Jakość dźwięku | Rozdzielczość punktu pętli |
---|---|---|---|
Zwiększa się (do maks. 512) | Zwiększa | Zmniejsza | Zmniejsza |
Zmniejsza (do minimum 32) | Zmniejsza | Zwiększa | Zwiększa |
Ograniczenia
Ponieważ ADPCM używa bloków próbek wyrównanych jeden po drugim, fala skompresowana za pomocą ADPCM może mieć niedokończony, częściowy blok na końcu. Dekoder ADPCM generuje ciszę dla reszty tego częściowego bloku, co uniemożliwia płynne zapętlenie fali.
Wartość parametru SamplesPerBlock wpływa na rozdzielczość, za pomocą której można wyrównywać dane falowe i punkty pętli.
Jeśli spróbujesz zastosować kompresję do niezsynchronizowanej fali, zostanie wyświetlony błąd lub ostrzeżenie w zależności od tego, czy fala jest używana w jakichkolwiek zdarzeniach odtwarzania w pętli. Nie można skompresować fali używanej w żadnych zdarzeniach odtwarzania w pętli. Usuń to z pętli odtwarzania i ponownie zastosuj kompresję.
Jeśli używasz fali wyłącznie w trybie bez pętli, ograniczenie wyrównania przykładowego bloku nie ma zastosowania.
Struktura plików ADPCM
Plik ADPCM to standardowy plik RIFF z następującymi typami fragmentów.
Fragment FCC | Opis |
---|---|
RIFF | Standardowy fragment RIFF zawierający typ pliku z wartością WAVE w pierwszych czterech bajtach sekcji danych oraz pozostałe fragmenty w pliku w pozostałej części sekcji danych. |
Fmt | Zawiera nagłówek formatu pliku ADPCM. Dane w tym fragmentzie odpowiadają strukturze ADPCMWAVEFORMAT. |
dane | Zawiera zakodowane dane audio ADPCM. W przypadku korzystania z narzędzia ADPCM w programie XAudio2 należy odczytać zawartość fragmentu danych do buforu i przekazać go do głosu źródłowego jako element członkowski pAudioData struktury XAUDIO2_BUFFER. Nie musisz zamieniać zawartości fragmentu danych w bajty. |
smpl i wsmp | Opcjonalne typy fragmentów zawierające informacje o pętli dla pliku ADPCM. Gdy używasz ADPCM w XAudio2, wartości zawarte w fragmentach smpl lub wsmp są używane do wypełniania składowych LoopBeginLoopLength i LoopCount struktury XAUDIO2_BUFFER. Na konsoli Xbox 360 należy wykonać zamianę bajtów danych załadowanych z fragmentu „smpl”, aby uwzględnić różnicę endianness między systemem Windows a Xbox 360. |
Tematy pokrewne