AIFF и IFF файлове са идентични, както и всяка МФФ файл започва с четири знака ФОРМА. Това е последвано от дължина 4 байта и тип код. В този случай ние се интересуваме само от видовете AIFF и AIFFC.
Обявата 18.1. идентификация на файлове във формат AIFF
BOOL IsAiffFile (istream файл)
file.seekg (0); // Намери началото на файла. неподписан дълго образуват = ReadIntMsb (файл, 4);
ако (образува! = ChunkName ( "F", "О", "R", "М"))
върнете невярна; // Той IFF-файл.
SkipBytes (файл, 4); // Напред дължината на блока.
неподписан дълго тип = ReadIntMsb (файл, 4);
ако (тип == ChunkName ( "А", "I", "F", "F"))
ако (тип == ChunkName ( "А", "I", "F", "С))
върнете невярна; // File IFF, но не и AIFF или AIFF-C.
За да работите с AIFF файлове и AIFF-C, ние определяме клас AiffRead. За да го използвате, отворете файла и инициализиране на нов обект AiffRead отворен файл.
Клас AiffRead подобен на WaveRead, което бе обсъдено в предишната глава.
Обявата 18.2. програма aiff.h
BOOL IsAiffFile (istream файл);
клас AiffRead: обществен AudioAbstract
istream _stream;
AbstractDecompressor * _decoder; // използва обектно
неподписан знак * _formatData; // съдържание COMM блок.
неподписан дълго _formatDataLength; // дължина на данните
анулира MinMaxSamplingRate (дълго * мин, дълго * макс, дълго
невалидни MinMaxChannels (Int * мин, Int * макс, Int * предпочитан);
AiffRead (istream и);
size_t GetSamples (AudioSample * буфер, size_t numSamples);
size_t ReadBytes (AudioByte * буфер, size_t numSamples);
Доста дълъг макро ChunkName конвертирате четири знака в един
Ню Йорк на 32-битов код. са широко използвани Тези кодове.
Обявата 18.3. програма aiff.cpp
# определят ChunkName (а, б, в, г) (\ ((static_cast
AiffRead :: AiffRead (istream и): _stream (и)
cerr <<"File Format: Apple AIFF/AIFF-C\n";
Свързани статии