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(A) 255)<<24) \

AiffRead :: AiffRead (istream_FAR s): _stream (s)

cerr <<"File Format: Apple AIFF/AIFF-C\n";




Kapcsolódó cikkek