ПредишенСледващото

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

AiffRead :: AiffRead (istream и): _stream (и)

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

Свързани статии

Подкрепете проекта - споделете линка, благодаря!