<< A *.wav hangfájlformátum Vissza a HF generátor hangkártyából oldalra Hangmintakészítő program >>
Hangmintakészítő algoritmus
Az elkészítendő hangmintákkal szemben támasztott követelmények:
ˇ
16 bites adatértékek (az értékek a 0..65535 intervallumba esnek, a negatív számok kettes komplemens kódolásúak);
ˇ
a két csatorna (bal és jobb) azonos értékeket tartalmazzon;
ˇ
44100 Hz-es mintavételi frekvencia, azaz másodpercenként 44100 minta;
ˇ
a hangminta a nulla középértékkel kezdődjön és végződjön;
ˇ
a hangminta használja ki a teljes kivezérlési tartományt (-32768..+32767).
A hangminták szabadon választható paraméterei:
ˇ
a frekvencia 20Hz-től 20kHz-ig (a CD lejátszó esetenként alacsonyabb frekvenciás jeleket is képes visszaadni, ezért a programot célszerű ennek figyelembevételével készíteni);
ˇ
a hangminta hossza másodpercben (,amelynek Audio CD-re írás esetén minimum 4 másodpercesnek kell lennie).
Az eddigiek és a *.wav fájlok formátumleírása alapján a további paraméterek:
ˇ
a mintavételi időköz, a továbbiakban lépésköz = 1 / 44100 [s];
ˇ
egyetlen szinuszhullám időtartama a periódusidő = 1 / frekvencia [s];
ˇ
a teljes fájl szinuszhullámainak száma a hullámszám = kerekítve(hossz / periódusidő);
ˇ
a fájl hangmintáinak száma a mintaszám = kerekítve(hullámszám · periódusidő / lépésköz);
ˇ
a kerekítés utáni valódi_hossz = mintaszám · lépésköz [s];
ˇ
a DATA adatmező hossza az adatszám = (mintaszám · 4) + 8 [Bájt], ahol a plusz 8 Bájt a hangminta elejére és végére beszúrt egy-egy nulla mintát jelenti;
ˇ
a RIFF fájl adathossza a teljeshossz = adatszám + 36 [Bájt], ahol a plusz 36 Bájt a fájl formátumleíró és egyéb mezőinek száma;
ˇ
a valódi_frekvencia = hullámszám / valódi_hossz [Hz];
ˇ
a pluszként beírt két nulla hangmintával a valódi_hossz = valódi_hossz + (lépésköz · 2) [s];
ˇ
a fájl méret = (teljeshossz + 8) / 1024 / 1024 [MBájt].
A következő ábra a szinuszos feszültségjelet és a mintavételi időpontokat szemlélteti. Az, hogy a periódusidő alatt hány mintavétel játszódik le, illetve hány lépésköznyi idő telik el, a frekvenciától függ.
A minták értékének számításához természetesen a szinusz függvényt kell felhasználni. A szinuszhullám értéke a +1..-1 intervallumban mozog, és egy periódusa 2π hosszúságú, így a számításoknál ezeket kell megfeleltetni a minta értékeinek, illetve a periódusidőnek. (Ebből következik, hogy a periódusidőnek (2π) és annak felének (π) megfelelő időtartamoknál a hangminta értékének nullának kell lennie. Persze a számításoknál a mintavételi időpont nem biztos, hogy pontosan az említett helyekre fog esni.)
A mintákat lépésközönként kell számítani, tehát a szinusz függvény független változója az eltelt lépések számával lesz arányos: (lépésszám · lépésköz · 2π / periódusidő), ahol a lépésszám az adott pillanatig befejeződött mintavételek száma.
A minták értékét a következő képlettel számíthatjuk:
érték = kerekítés(32766 · szinusz(lépésszám · lépésköz · 2π /periódusidő)).
A számítás során a lépésszámot végig kell futtatni egytől a mintaszámig és a kapott értékeket a fájlba írni.
Tudomány és Technika (test@t-es-t.hu)
<< A *.wav hangfájlformátum Vissza a HF generátor hangkártyából oldalra Hangmintakészítő program >>