|
A mellékelt példaprogram megnyitása előtt a WaveInfo.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A komponens a FileName property-ben megadott WAV fájl tulajdonságait olvassa be, melyeket különböző property-ken keresztül érhetünk el. A PCMFormat egy logikai típusú property, amely a fájl formátumát tartalmazza. Ha ez megegyezik a „hivatalos” formátummal, akkor a property értéke igaz. A Channels property-ből megtudjuk, hogy a fájl mono (1 csatornás), vagy stereo (két csatornás). A SampleRate a mintavételezési frekvenciát adja meg. Ez lehet 8000, 11025, 22050, és 44100 Hz. Az AvgBytesPerSec egy átlagos érték, amely a másodpercenként beolvasott (lejátszott) bájtok számát adja meg. A hangot alkotó értékek megadhatók 8 és 16 biten is. Ezt olvashatjuk ki a BitsPerSample property-ből.
Az adatok beolvasása a Refresh eljárásban történik. A fájlt egy TFileStream típusú objektumon keresztül fogjuk kezelni. Az információk beolvasásához ismerni kell a WAV fájl fejlécének szerkezetét, illetve az adatok pontos pozícióját.
A fájl első négy bájtja a „RIFF” szót tartalmazza (Resource Interchange File Format). Ezután a fájl méretét tartalmazó négy bájt következik (a fájl méretéből levonva az első 8 bájt). Ezzel nem foglalkozunk. A következő négy bájt a „WAVE” azonosító, közvetlenül utána pedig az „fmt” következik. Fontos a kis- és nagybetűk közötti különbség. Az „fmt” betűk után még egy szóköz karakter is jön, így ez is 4 bájt hosszú. Ha ezeket mind sikerült azonosítani, akkor most már biztosak lehetünk benne, hogy egy WAV fájllal van dolgunk. A fejléc tartalmaz egy TWaveFormat vagy TWaveFormatEx típusú rekordot. Ez a rekord tartalmazza a számunkra fontos információkat, ezért létrehozunk egy TWaveFormatEx típusú változót, amiben beolvassuk ezeket. A fájlban a következő 4 bájt ennek a rekordnak a mérete. Ellenőrizzük, hogy ez lehetőleg ne legyen nagyobb, mint a rekord típus (TWaveFormatEx) mérete és egyben beolvassuk az egész rekordot.
Ezután már csak ki kell olvasni a rekordból az adatokat, és készen is vagyunk.
|