Azonosítás AIFF file
AIFF és IFF fájlok megegyeznek, és minden IFF fájlt kezdődik négy karakter formában. Ezt követi egy 4 byte-os hosszától és típusától kódot. B Ebben az esetben csak az érdekli, hogy milyen típusú AIFF és AIFFC.
Listing 18.1. fájlazonosítást az AIFF formátumban
bool IsAiffFile (istream_FAR fájl)
file.seekg (0); // Keresse meg a fájl elején. előjel nélküli hosszú hiba formában = ReadIntMsb (fájl, 4);
ha (alkotnak! = ChunkName ( 'F', 'O', 'R', 'M'))
return false; // Azt IFF-fájlt.
SkipBytes (fájl, 4); // kihagyása a hossza a blokk.
előjel nélküli hosszú típus = ReadIntMsb (fájl, 4);
ha (típus == ChunkName ( 'A', 'I', 'F', 'F'))
ha (típus == ChunkName ( 'A', 'I', 'F', „C))
return false; // Fájl IFF, de nem AIFF vagy AIFF-C.
Együttműködik AIFF fájlokat és AIFF-C, definiálunk egy osztályt AiffRead. A használatához nyissa meg a fájlt, és inicializálja az új objektum AiffRead fájl megnyitása.
Class AiffRead hasonló WaveRead, amely vita tárgyát képezte az előző fejezetben.
Listing 18.2. programot aiff.h
bool IsAiffFile (istream_FAR file);
osztály AiffRead: nyilvános AudioAbstract
istream_FAR _stream;
AbstractDecompressor * _decoder; // használt tárgy-
unsigned char * _formatData; // tartalom COMM blokk.
előjel nélküli hosszú _formatDataLength; // Az adatok hossza
érvényteleníti MinMaxSamplingRate (hosszú * min, hosszú * max, hosszú
void MinMaxChannels (int * min, int * max, int * előnyös);
AiffRead (istream_FAR s);
size_t GetSamples (AudioSample * puffer, size_t numSamples);
size_t ReadBytes (AudioByte * puffer, size_t numSamples);
Elég hosszadalmas makro ChunkName átalakítani négy karakter egyetlen
ny 32 bites kódot. Az ilyen kódok széles körben használják.
Listing 18.3. programot aiff.cpp
#define ChunkName (a, b, c, d) (\ ((static_cast
AiffRead :: AiffRead (istream_FAR s): _stream (s)
cerr <<"File Format: Apple AIFF/AIFF-C\n";