Vissza a főoldalra    Vissza az Zenei elektronika főoldalra

<< 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 szinuszos hangjel időadatai

      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 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 >>

Vissza a főoldalra    Vissza az Zenei elektronika főoldalra