Audioformaatit

versio 2.0

Jan-Markus Holm

Ohjelmistotekniikan seminaari

Tietotekniikan Cum Laude-harjoitustyö

22.4.1998

Jyväskylän yliopisto
Matematiikan laitos


Tiivistelmä

Seminaariesitelmä sisältää katsauksen audioformaatteihin. Tarkoituksena on aikaansaada mahdollisimman hyvä kuva siitä, millaisia lähinnä tietokoneaudioformaatteja on olemassa, sekä tutustua niiden rakenteeseen. Kirjoitelmaan on lisätty 22.4.1998 luvut, jotka käsittelevät audioformaatteja ohjelmointinäkökulmasta.


Sisällysluettelo



1. Johdanto

Seminaariesitelmäni pyrkii esittelemään mahdollisimman laajasti audioformaatteja ja -käsittelytapoja. Tieto on koostettu useista eri tietolähteistä. Aiheesta ei ole juurikaan löydettävissä erillistä kirjallisuutta, vaan aihepiiriä koskevaa tietoa on sisällytettynä muihin yhteyksiin. Näistä olennaisimpia audioformaatteja koskevia asioita on koottu tähän kirjoitelmaan.

Motivaationa kirjoitelmalleni on ollut oma kiinnostukseni aiheeseen. Lisäksi olen halunnut koota yhteen mahdollisimman paljon muutoin niin hajanaisen aiheryhmän tietoa. Seminaarikirjoitelmaksi tämä saattoi hieman venyä. Ajattelisin kuitenkin tämän olevan hyvänä pohjana 'peruskäsikirjaksi' itselleni, jota on mahdollista tarpeen vaatiessa aikojen saatossa täydentää. Erääksi valitettavaksi seikaksi muodostui myös ajan loppuminen, joten myöhemmin esille tulleita mahdollisia varteenotettavia tietolähteitä jäi tutkimatta.

Kirjoitelmassa esiintyy paljon tekijöitä, jotka voidaan ajatella soveltuvan useampaankin asiayhteyteen. Viittausten määrä olisi kasvanut niin suureksi, etten tämän vuoksi ole niitä käyttänyt, vaan lukijalla on mahdollisuus itse ottaa asiasta selvää kulloinkin kyseessä olevan asiasanan yhteydestä. Lisäksi liitteet sisältävät lisäinformaatiota useisiin kohtiin (mainittu erikseen ao. kohdassa).

MIDIä (Musical Instrument Digital Interface) sivutaan muutamien formaattien yhteydessä, sekä äänen ohjelmointia käsittelevässä luvussa. MIDI-ääni on viestejä esimerkiksi sähköisten soittimien (syntetisaattorit) ja tietokoneiden välillä. Se siis sisältää vain tietoa siitä, miten toiminta suoritetaan, eikä lainkaan yksittäistä signaalitietoa. MIDI on kuitenkin massiivinen järjestelmä, josta on saatavilla paljon tietoa niin kirjallisuudessa kuin tietoverkossakin. Lisätietolähteenä voin mainita esimerkiksi Musiikki internetissä -kirjoitelmani (Jan-Markus Holm, http://www.jyu.fi/~hojakr/Intermus.html, kevät 1997), jossa käsitellään mm. MIDIn yleisiä piirteitä.

Kirjoitelman aluksi käydään läpi ääneen liittyviä yleisiä seikkoja ja sen elektroniseen käsittelyyn liittyviä perusperiaatteita, sekä signaalinkulkua ja -käsittelyä. Luvussa 3 tarkastellaan äänen digitaaliseen muokkaukseen sisältyviä perustapahtumia ja yleisesti tietokoneella tapahtuvassa äänenkäsittelyssä huomioonotettavia tekijöitä. Tämän jälkeen siirrytään digitaalisen äänen ja koodauksen perusteisiin, josta päästään sujuvasti äänen koodauksen ja kompressointimenetelmien tarkastelemiseen.

Luvussa 6 tullaan kirjoitelman varsinaiseen pääteemaan, eli audion koodaus- ja tallennusmuotoihin, joita voidaan kutsua myös tallennusstandardeiksi tai audioformaateiksi. Sokeriksi pohjalle olen ottanut luvussa 7 esille tapauksia reaaliaikaisen tiedonsiirron digitaaliaudioprotokollista.

Omana erillisenä merkittävänä osionaan on luku 8, jossa käsitellään äänitiedostojen ohjelmallista käsittelyä ohjelmointiympäristöissä, kuten esimerkiksi C-kielessä. Tämä luku pitää sisällään niin ohjelmaesimerkkejä kuin sanallista selitystä ääniformaattien ohjelmoinnista.


2. Ääni tietokoneessa

Ääniaaltoja on mahdollista muokata ja käsitellä. Luonnollisessa ympäristössä ihminen voi työntää pumpulitupot korviinsa ja näin vaimentaa tulevia ääniaaltoja. Megafonilla ääntä voidaan vahvistaa ja eri instrumenteilla saatu ääni on suora tulos fysikaalisista ilmiöistä, kuten kielen tai ilmapatsaan värähtely. Koska ääni on oikeastaan ilmanpaineen vaihtelua ilmassa, voidaan se muuttaa esimerkiksi jännitevaihteluiksi. Tämä luku perustuu lähteisiin [El 94], [Ba 85], [Bu 93], [Fda 97] ja [Ko 93].

Elektroninen media tarjoaa mitä suurimpia mahdollisuuksia äänen muokkaamiseen. Elektronisessa muodossa ääntä voidaan mm. suodattaa, muuttaa sen aika-arvoja, kääntää takaperin, vertailla toiseen informaatioon, lajitella, kasvattaa tai pienentää intensiteettiä ja säröttää. Digitaalista informaatiota voidaan prosessoida eri prosessointilaitteilla, kuten esimerkiksi sekvenssereillä (engl. music sequencers) ja kovalevyäänittimillä (engl. direct-to-disk audio recorders).

Eräs elektronisen signaalin muokkaamisen perusparametreista on amplitudin (äänenvoimakkuus) muokkaaminen. Tämä tapahtuu linjavahvistimien avulla. Lisäksi ohjelmasignaalia on mahdollista muokata lukemattomilla muilla tavoilla. Tätä varten on suotimia (engl. filters), jotka toimivat eri medioita yhdistävinä prosessoreina. Nämä siis nimensäkin mukaisesti valikoivat tarvittavan informaation, äänen tapauksessa halutut taajuudet. Suotimia ovat muun muassa sulkusuotimet (engl. cut-off filters), yli- ja alipäästösuotimet (engl. high- and low-pass filters), sekä kaistansuotimet (engl. band-pass filters).

Signaalia voidaan myös tuottaa ja syntetisoida elektronisesti. Tästä voi olla joskus hyötyäkin. Esimerkiksi edullinenkin systeemi voi tuottaa laaja-alaisemman äänen kuin yksikään mekaaninen instrumentti tai luonnollinen äänilähde. Elektronisia signaaleja tuottava komponentti on nimeltään oskillaattori (engl. oscillator), joka on nimetty muodostamiensa oskilloivien aaltojen mukaan. Monimuotoisemmat signaalit muodostetaan modulaatiotekniikalla. Siinä signaaliin vaikutetaan toisen aallon tiedossa olevilla parametreillä (taajuus, amplitudi, pulssinleveys). Syntetisaattoripiirien äänenprosessointi perustuu pitkälti juuri tähän.


2.1. Digitaalinen audio

Äänenkäsittely tietokoneessa on aina digitaalista. Ääni voi olla peräisin useasta eri äänilähteestä, jotka voidaan yhdistää tietokoneessa. Mikrofonin tai muun äänilähteen välityksellä saadun analogisen audiosignaalin sisäänlukemiseksi tarvitaan esimerkiksi äänikortti. Digitaalisessa aaltomuodossa tallennetun äänen voidaan ajatella olevan kuin äänilähteestä tulevien ääniaaltojen kuvan. Tallennus ja toisto tapahtuvat tietokoneen äänijärjestelmän toimiessa digitaalisen ääninauhurin tapaan. Ääniaallot, puhe, musiikki tai hälyäänet, muuttuvat mikrofonissa sähköiseksi, analogiseksi värähtelyksi, joka johdetaan tietokoneen äänijärjestelmän analogia/digitaalimuuntimeen. Malli signaalin kulusta on esitetty kuvassa 1.

Ääni digitoidaan tietokoneeseen liitetyllä A/D-muuntimella (engl. Analog/Digital Converter). Tämä on mikropiiri, jolla värähtelystä (aalloista) otetaan näytteitä tasavälein (ts. aalto 'katkaistaan') ja otetaan siitä 'poikkileikkaus', joka kertoo aallon korkeuden (amplitudin) katkaisuhetkellä. Tämä tieto tallennetaan numeerisessa muodossa. Äänen digitoinnissa vallitsevat yleiset digitoinnin pelisäännöt. Tämän mukaan näytteenottotaajuus vaikuttaa äänen taajuuskaistaan eli äänen kirkkauteen. A/D-muunnoksen tasojen määrä (kvantisointi) määrää digitoidun äänen dynamiikan eli hiljaisten ja voimakkaiden äänien suhteen. Molemmat vaikuttavat digitoidun äänen sisältämään tiedon määrään ja siten myös näin saatavan tiedoston kokoon. Kun näytteitä otetaan riittävän tiheästi, esimerkiksi 22000 kertaa sekunnissa, niistä muodostuu varsin hyvä kuva alkuperäisestä ääniaallosta.


Kuva 1. A/D- ja D/A-muunnoksen informaatio analogisen ja digitaalisen signaalin välillä.


Seuraavassa pieni katsaus digitaalisen audion kehityshistoriaan:


2.2. A/D- ja D/A -muunnokset

A/D- ja D/A -muuntimet (engl. Analog-To-Digital and Digital-To-Analog Converter, ADC and DAC) ovat laitteita, jotka saattavat audiosignaalin tietokoneella käsiteltävään muotoon ja siitä takaisin. Nämä ovat siis erillisiä muunninpiirejä, jotka voivat sijaita esimerkiksi tietokoneeseen liitettävässä äänikortissa. Luku perustuu lähteeseen [Ba 85].

A/D-muunnin vastaanottaa analogisen jännitepulssin ja muuntaa sen diskreettien lukujen sarjoiksi prosessissa, jota voidaan kutsua digitoinniksi (engl. digitizing) tai näytteistykseksi (sämpläykseksi, engl. sampling). D/A-muunnin taas kääntää diskreetin sarjan jatkuvaksi analogiseksi jännitteeksi. Näitä piirejä käytetään joko erikseen tai yhdessä useissa eri digitaalisen median laitteissa.

A/D-muuntimen ulostulosignaali on nykyisin usein 8- tai 16-bittinen digitaalinen 'sana', joka sisältää analogisen jännitesignaalinäytteen amplitudin.


2.2.1.Digitaalisen suotimen käsite

Digitaaliset suotimet voidaan jaotella kahteen pääluokkaan: äärelliseen impulssivasteeseen (engl. Finite Impulse Response, FIR) ja äärettömään impulssivasteeseen (engl. Infinite Impulse Response, IIR) perustuviin. IIR-suodin on samanlainen analogisen kanssa siinä, että impulssi vaimenee eksponentiaalisesti ajan suhteen katoamatta koskaan kuitenkaan täysin. Yleisen digitaalisen suotimen lohkokaavio on esitetty kuvassa 2.

Analoginen signaali muunnetaan näytteistetyksi dataksi digitaalista suodatusta varten. Yleinen Nyquistin teoria näytteistyksestä kertoo sen, että näytetaajuuden tulee olla ainakin kaksinkertainen korkeimpaan sisääntulosignaalin perustaajuuskaistaan verrattuna prosessoituakseen virheettömästi. Tavallisesti käytetään analogista alipäästösuodinta (engl. Low-pass filter) signaalin esiprosessoimiseksi niin, ettei A/D-muuntimelle pääse kuin suuruudeltaan korkeintaan puolet näytteistystaajuudesta olevia signaaleja.


Kuva 2. Tyypillinen digitaalisen suotimen lohkokaavio.


Näytteistys- ja pidätyspiirin (engl. Sample-and-hold circuit) tarkoituksena on varmistaa, ettei A/D-muuntimelle tulevan signaalin jännite muutu aikana, jonka analogisesta digitaaliseksi tapahtuvan muunnos vaatii.

Jokaisen näytteistysvaiheen lopuksi digitaalisuodin tuottaa 8- tai 16-bittisen 'sanan' D/A-muuntimelle, joka muodostaa analogisen amplituditiedon digitaalisesta merkistöstä riippuen. Joskus voidaan käyttää alipäästösuodinta signaalia pehmentävänä jälkiprosessointisuotimena eliminoimaan signaalissa mahdollisesti tapahtuneita virheitä.


2.2.2. Näytteistys- ja pidätyspiiri

Analoginen signaali näytteistetään ja pidätetään (pidätyspiiri) useasti analogisesta digitaaliseksi tapahtuvan muunnoksen aikana. Sisääntuleva analoginen signaali näytteistetään muunnoskierroksessa ensimmäisenä. Näytteistysvaiheen lopussa kapasitori (kuva 3) puretaan valmistauduttaessa vastaanottamaan uusi sisääntuleva näyte.


Kuva 3. Näytteistys- ja pidätyspiiri näytteistystaajuudella 1/T Hz.


2.2.3. A/D-muunnos

Kuva 4 esittää 8-bittisen riittävän approksimaation A/D-muuntimelle (ADC). Tämän tyyppinen konvertteri vaatii kahdeksan kellobittiä muunnoksen suorittamiseksi sisääntulosignaalista huolimatta. Pääsääntöisesti tällaisella muuntimella on tarpeeksi suuri konversionopeus. Muunnos alkaa aloituspulssilla ja päättyy kahdeksan kellokierrosta myöhemmin. Sisääntulosignaali pysyy vakiona koko muunnosprosessin ajan, kunnes se kulkee näytteistys- ja pidätyspiirin kautta.

Kuva 4. A/D-muunnin


A/D-muunnin löytää sisääntulevalle jännitesignaalille V(in) 'digitaalisten sanojen' maksimin, joka tämän perusteella asettaa vertaimen (engl. comparator) ulostulojännitteen V(c) nollaksi. N-bittiselle konvertterille tämän voi suorittaa N:nä askeleena. Aluksi kaikki kahdeksan bittiä on asetettu nollaksi. Ensimmäisen askeleen aikana 'kaikkein tärkein bitti' MSB (Most Significant Bit) nostetaan jännitteeseen (+5V). Jos V(c) on silti nolla, on ensimmäinen askel suoritettu ja kuudes bitti nostetaan toisen kierroksen alussa. Jos V(c) on ollut nostettuna ensimmäisellä askeleella, on MSB laskettu takaisin alas nollaksi ja kuudes bitti nostettu toisen kierroksen alussa. Prosessia jatketaan niin kauan, että kaikki kahdeksan bittiä on asetettu.

Kuvan 4 jännitteen V- vertaimen negatiivinen sisääntulo voidaan ajatella kahdeksan binaarisen jännitteen lineaarisena summana kaavan

-V=1/2{V(7)+1/2[V(6)]+1/4[V(5)]+1/8[V(4)]+1/16[V(3)]+
   1/32[V(2)]+1/64[V(1)]+1/128[V(0)]}

mukaisesti, jossa V(7) on MSB ja V(0) LSB (Least Significant Bit). Porrasmainen vastusverkosto on oikeastaan D/A-muunnin, joka uusii analogisen jännitteen lähimpänä oikeaa olevan bittijärjestyksen tarkistamiseksi sisääntulojännitteen ja uusitun jännitteen välillä. Maksimaalinen muunnosnopeus riippuu vertaimen tarvitsemasta ajasta ja vaihtomuutosten asettumisen vaatimasta ajasta. Jännitteen ja virran vastineet vertaimessa vaikuttavat vertauspisteeseen ja näin ollen koko A/D-muuntimen tarkkuuteen. Muunnoksen tapahduttua on digitaalisen ulostulon tarkkuus ±½ LSB.


2.2.4. D/A-muunnos

D/A-muunnos on kuvailtu jo aikaisemmin A/D-muunninapproksimaation esittelyn yhteydessä luvussa 2.2.3. Kuva 5 osoittaa D/A-muuntimen (DAC) perustuvan vastusportaistoon. Muunnosprosessi on hyvin nopea, sillä se riippuu ensisijaisesti yksinkertaisen operaatiovahvistimen asettumisajasta. Binäärijännite D/A-sisääntulossa täytyy olla tarkkaan verrattu tietyille korkeille ja matalille tasoille täsmällisen analogisen signaalin uudelleenmuodostumiseksi.


Kuva 5. D/A-muunnin.


2.3. Analogisen äänen käsittely

Ääntä voidaan tietokoneessa käyttää tietyssä määrin myös analogisessa muodossa. Se käsittää äänen, joka tulee ulkoisesta lähteestä, eikä sitä ole tallennettu tietokoneeseen digitaalisessa muodossa käsiteltäväksi. Ulkoisesta lähteestä tulevaa ääntä voi kuitenkin ohjata tietokoneen avulla. Tärkein ulkoinen äänilähde on usein kuitenkin CD-asemassa oleva CD-äänilevy. Ulkoisena äänilähteenä voi olla myös puhelin, jolloin multimediatekniikka mahdollistaa tietokoneen käytön esimerkiksi puhelinvastaajana, tai erilaiset puhelinpalvelinsovellukset. Lisäksi on mahdollista liittää tietokoneeseen radio- tai televisioviritinkortti ja saada lähetyksistä tuleva ääni tietokoneen käytettäväksi.


3. Aaltomuotoisen äänen perustekijät

Seuraavassa perehdytään äänen laatuun vaikuttaviin tekijöihin. Se, miten hyvin tallennettu (ylipäätään tietokoneella prosessoitu) ääni toistettaessa vastaa alkuperäistä, riippuu siitä, miten tarkka kuva siitä on tallennettu. Tähän vaikuttaa ennen kaikkea kaksi tekijää: näytteistystiheys ja näytekoko. Kuvassa 6 on esitetty Windows-sovelluksella muokattu ääninäyte. Luku perustuu lähteisiin [Ko 93], [Bu 93] ja [AFF1 95].


Kuva 6. Esimerkki näytteistetystä äänestä wav-muodossa eräällä editorilla kuvattuna.


3.1. Näytteistystaajuus

Näytteistystaajuus (engl. sampling rate) tarkoittaa sitä, kuinka tiheästi näytteitä on otettu. Näytteistystaajuus ilmoitetaan taajuutena, kiloherzeinä (tai herzeinä eli n kertaa sekunnissa), joka tarkoittaa näytteiden määrää sekunnissa (samples/s). Mitä tiheämmin näytteitä otetaan, sitä suurempi kiloherziluku ilmoittaa näytteistystiheyden ja sitä parempi on saadun äänen laatu. Koska näytteitä otetaan ajan mukaan etenevistä aalloista, näytteistystiheys määrää, miten korkeat äänet tallentuvat ja toistuvat. ADC ottaa tilannekuvan eli näytteen (engl. sample) analogisen signaalin tasosta tietyllä ajanhetkellä. Näytteistystaajuus ilmoittaa, kuinka usein analoginen signaali digitoidaan.

Äänen korkeus riippuu sen värähtelytaajuudesta. Jos näytteitä otetaan esimerkiksi 11 000 kertaa sekunnissa eli näytteistystiheys on 11 kHz, mutta äänen taajuus on vaikka 15 kHz eli 15 000 värähdystä sekunnissa, ei kaikista värähdyksistä saada lainkaan näytettä. Jos äänen taajuus on 11 kHz, saadaan kustakin ääniaallosta vain yksi näyte, joka ei riitä. Vasta kun kustakin aallosta saadaan kaksi näytettä (suurin piirtein pohjalta ja huipulta, positiivinen ja negatiivinen amplitudin taso), muodostuu niistä suurin piirtein oikea kuva. Siksi 11 kHz:n näytteistystaajuudella toistuvat hyvin vain 5,5 kHz:ä matalammat äänet. Hyvään toistoon vaaditaan kuitenkin useampia näytteitä kustakin aallosta. Nyquistin teoreeman mukaan tietyntaajuisen äänen toistumiseen vaaditaan siksi vähintään kaksinkertainen, ja korkealaatuiseen nelinkertainen näytteistystaajuus. Näytteistystaajuudet esitetään aina kanavakohtaisesti laskettuina, joten esimerkiksi äänitettäessä stereodataa 8000 näytettä sekunnissa, on näytteitä oikeastaan 16000 sekuntia kohden.


44,1 kHz CD-äänilevyn standardi
22,1 kHz keskiaaltoradion taso
11,025 kHz puheen tallennus, hyvän puhelinlinjan taso
5,5 kHz vastaa huonon puhelinlinjan tasoa

Taulukko 1. PCM-standardin näytteistystaajuudet.



Tietyt näytteistystaajuudet ovat monestakin syystä suositumpia kuin toiset. Toiset tallennuslaitteet ovat rajattuja tietylle alueelle ja taas tietyt toistolaitteet tukevat suoraan niitä. Tavallisimpien taajuuksien suosio voidaan selittää yksinkertaisemmin myös kellotaajuutta jakavilla piireillä.


Näytettä sekunnissa Kuvaus
5500 Neljäsosa Macin näytteistystaajuudesta (tavataan harvoin).
7333 Kolmasosa Macin näytteistystaajuudesta (tavataan harvoin).
8000 Puhelinstandardi yhdessä u-law (ja a-law) -enkoodauksen kanssa. Jotkut systeemit käyttävät hieman eri taajuutta. Esim. NeXT-työasema käyttää taajuutta 8012.8210513 eli samaa, jota myös Telco CODECit käyttävät.
11 k Joko neljäsosa CD:n (11025) tai puolet Macin näytekoosta (kenties yleisin Macin koko).
16000 Käytetään mm. G.722-kompressointistandardissa.
18.9 k CD-ROM/XA -standardi.
22 k joko puolet CD:n näytekoosta (22050) tai Macin näytekoko. Taso on tarkalleen 22254.545454545454, mutta yleensä lyhennetään 22000:een.
32000 Käytetään digitaaliradiossa, NICAMissa (Nearly Instantaneous Compandable Audio Matrix [IBA/BREMA/BBC]), sekä monessa muussa TV-työskentelyssä. Myös pitkäsoittoinen DAT ja HDTV.
37.8 k CD-ROM/XA -standardi (korkeampi laatu).
44056 Tämä oudompi taajuus on ammattimaisten audiolaitteiden käytössä (mm. eri tyyppinen näytteiden sovittaminen medioiden kesken).
44100 CD:n näytekoko. (Myös DAT äänittäessä digitaalisesti CD:ltä käyttää tätä).
48000 DAT-nauhurin näytteistystaajuus.

Taulukko 2. Esimerkkitaulukko näytteistystasoista.


3.2. Näytekoko

Äänen laatuun vaikuttaa systeemin erottelukyky (engl. resolution). Mitä suurempi määrä signaalin tasoa kuvaavaa dataa on, sitä hienompi on kuvattavan signaalin tarkkuus. Signaalin resoluutiolla eli erottelukyvyllä tarkoitetaan siis sitä, millainen määrä bittejä on varattu kuvaamaan signaalin kunkin pisteen amplitudia. Mitä suurempi bittiresoluutio on, sitä suurempi määrä diskreettejä amplitudiarvoja voidaan esittää. Esimerkiksi normaalille audio-CD:lle on standardoitu 16 bitin resoluutio, jolloin jokaisen audiosignaalin pisteen amplitudiarvo voidaan esittää 65536 eri arvolla. Vastaavasti 8-bittisessä audiossa on vain 256 eri amplituditasoa.

Erottelukyvyn bittien lukumäärä määrää myös signaalin dynamiikan, jolloin jokainen bitti vastaa 6 dB. Täten 8-bittinen audio antaa 48 dB:n dynamiikan (kasettidekki), 12-bittinen 72 dB:n (avokelanauhuri), ja 16-bittinen 96 dB:n dynamiikan (lähellä ihmiskorvan dynamiikkaa).

Kvantisointia (engl. quantization) esiintyy silloin, kun lähdesignaalin arvot sijoittuvat erottelukyvyn mahdollistavien arvojen väliin. ADCn tapauksessa analoginen arvo pyöristetään eli kvantisoidaan lähimpään tarjolla olevaan digitaaliarvoon. Kvantisointi siis tuottaa eräänlaisen porrasefektin, joka voidaan havaita pienenä luonnottomuutena DACsta ulostulevassa signaalissa. Audion tapauksessa tämä voidaan havaita hieman rakeisena tai suhisevana äänenä. Kvantisoinnista aiheutuvat haittavaikutukset siis pienenevät resoluution kasvaessa.

Kvantisoinnissa täytyy aina ottaa huomioon virheiden mahdollisuus, joskin ne ovat hyvin pieniä. Suuriamplitudisella signaalilla on hyvin pieni korrelaatio signaalin ja virheen välillä. Virhe on siis erittäin satunnaista ja ilmenee analogisen valkoisen kohinan tapaan. Matalatasoisilla signaaleilla virheiden muoto signaalin suhteen muuttuu ja se ilmenee signaalissa säröytymisenä (engl. distortion). Korrelointia voidaan poistaa lisäämällä analogista signaalia, värinää (engl. dither), ensisijaisesti lineaariseen A/D-muuntimeen. Tästä hyödytään siinä, että kvantisoinnin virheet satunnaistuvat. Tällöin värinä ei peitä häiriöitä, vaan poistaa ne.

Värinäsignaalin lisäys siis minimoi säröytymisen. Se tarjoaa myös mahdollisuuden koodata amplitudeja pienemmiksi kuin 'vähäpätöisimmän bitin tekniikassa' (esim. LSB, luku 2.2.3.). Tällaisia tekniikoita ovat mm. pulssinleveysmodulaatio (engl. pulse width modulation) ja keskiarvoistus (engl. averaging). Värinä vaikuttaa ääneen digitointisysteemissä nostamalla äänentasoa hieman.

Äänentason vuodot yli normaalitasosta ilmenevät suhisevina ääninä. Tätä kutsutaan äänen rakeutumiseksi (engl. granulation noise).


3.3. Äänen tiedostokoko

Aaltomuotoisena tallennetun äänen vaatima tila T (tavuina) voidaan laskea kaavalla

T=(K*F*B*t)/8

jossa

Kaavasta voidaan nähdä tiedostokoon nopea kasvu pyrittäessä korkealaatuiseen ääneen. Esimerkiksi 10 sekunnin CD-tasoinen stereoääni vaatii 1.7 Mt tallennustilaa, mutta 8-bittinen, 11 kHz:n monoääni vain 110 kt.

Tallentamisen ja toistamisen tarkkuus riippuu käytettävän tietokoneen äänijärjestelmän ominaisuuksista. Äänikortteja (A/D- ja D/A-muuntimia) on sekä 8- että 16-bittisinä. 8-bittinen äänikortti käsittelee vain 8-bittistä ääntä, mutta 16-bittisellä on mahdollista sekä 8- että 16-bittinen käsittely. Äänen lopullinen laatu riippuu luonnollisesti tallennustason lisäksi monista eri tekijöistä, kuten alkuperäisen äänen tasosta, tietokoneen äänijärjestelmän ominaisuuksista (kohinasuhde, häiriöttömyys) ja toistolaitteistosta (vahvistin, kaiutin, kuulokkeet) sekä kuunteluympäristöstä (melu). Äänen tallennustasoa määriteltäessä on siksi otettava huomioon äänijärjestelmän kokonaisuus ja arvioitava, millaisessa tilanteessa ja millaisin välinein ääntä tullaan tarvitsemaan.



4. Digitaalisen audion ja koodauksen perusteita

Tietokonepohjaiset digitaaliaudiotuotteet käyttävät hyväkseen muunnintekniikkaa, jossa ADC digitoi audion ja DAC muuntaa numeerisen informaation takaisin analogiseen muotoon. Laitteistovaatimuksissa ja digitaalisen esityksen muodoissa on eroja yksinkertaisten audiodigitoijien (engl. audio digitizers) ja kovalevyäänityssysteemien (engl. hard disk recording systems) välillä. Tämä luku perustuu lähteisiin [Bu 93] ja [Ida 96].

Digitaalitekniikalla pystytään koodaamaan lähes virheettömästi koko äänikaista, mutta sen laadukas toteuttaminen vaatii suuren bittinopeuden. Studiokäytössä yleisessä DAT-järjestelmässä (Digital Audio Tape) käytetään 48 kHz:n näytteenottotaajuutta sekä lineaarisesti 16 bitillä kvantisoitua PCM-signaalia (Pulse Code Modulation). Perinteisillä koodausmetodeilla päästään noin puoleen tämän vaatimasta tilasta, jolloin saavutettu hyöty on vasta liian pieni.

Seuraavassa muutamia esimerkkejä myös muista digitaalisista äänilähteistä. CD (Compact Disk) sisältää 16-bittistä, PCM-moduloitua, 44.1 kHz:stä signaalia. DCC (Digital Compact Cassette) on 16-18-bittistä, kompressoitua (PASC) signaalia. MD (MiniDisc) myös 16-bittistä kompressoitua ATRAC-signaalia. DSR (Digital Satellite Radio) on 16:sta 14:ään bittiin kompanderoitua (companding, kompressori-ekspanderi) signaalia.

Ominaisuuksina digitaalisella audiosignaalilla edellisiin on 32, 44.1 ja 48 kHz:n näytteistystaajuudet ja vähintään 16-bittinen pituus, sekä dynamiikka-alue, joka on laajempi kuin 96 dB. Vaatimuksina lähinnä ovat 18-bittinen A/D-muunnin ja vähintään 16-bittinen signaaliprosessori.

Koodausmenetelmiä käsitellään enemmän luvussa 5 ja koodausstandardeja luvussa 6.


4.1. Tavallinen audiodigitointi

Audiodigitoijassa on yleensä suhteellisen halpa ADC-systeemi muuntamassa balansoimattomasta sisääntulolinjasta audioaalloista saatavaa signaalia näytteistettyyn muotoon. Laatu on usein 8-bittistä näytteistystaajuuksilla 22 kHz:stä alaspäin aina 11 kHz:iin (jopa alemmas). DAC on samaa tasoa.

Laitteistoissa voi olla usein sisäänrakennettuja ominaisuuksia (kaiuttimia, (puhe)mikrofoneja). Esimerkiksi Macintoshin sisäänrakennettu audiojärjestelmä on 8-bittinen 22 kHz:n taajuudella. Tuotteet, kuten MacRecorder ja sisäänrakennettu mikrofoni ovat hyvä esimerkki edullisesta systeemistä.

Audion digitoinnin piirissä on suurena taipumuksena standardoida pääasiassa vain muutama näytteistystaajuus, tiedostoformaattien eroista huolimatta. Näitä ovat 8000 Hz:n 8-bittinen u-law mono, 22050 Hz:n 8-bittinen merkitsemätön mono ja stereo, sekä 44100 Hz:n, 16-bittinen merkitty mono ja stereo.

Laitteistojen kehitys menee eteenpäin huimaa vauhtia ja aina tehokkaampia laitteistoja ja lisäosia (äänikortit ym.) tulee markkinoille. Taulukossa 3 on kuitenkin listattuna suuntaa-antavaa laitteistotietoa äänenkäsittelyn näkökulmasta. On otettava huomioon se, että taulukkoon on merkitty laitetiedot ilman erillisosia. Laitteille on olemassa suuri määrä erillistä 'hardwarea' mm. äänityksiin ja digitointiin. Laitteet tarvitsevat luonnollisestikin erilliset ohjelmistot. Luku perustuu lähteeseen [AFF1 95].


Laite Bittejä Maksimi näyt.taajuus Kanavien määrä (output)
Acorn Archimedes ~u-law ~180k 8 (stereo)
Amiga 8 vaihteleva 15k - 29k (max.) 4 (stereo)
Apple IIGS 8 32k 16 (stereo)
Apple Macintosh (kaikki) 8 22.05k 1
Apple Macintosh (uudet) 16 64k 4 (128)
Atari ST 8 22k 1
Atari STE, TT 8 50k 2
Atari Falcon 030 16 50k 8 (stereo)
DEC 3000 u-law 8k 1
DEC 5000/20-25 u-law 8k 1
HP9000/705, 710, 425e u, a-law, 16 8k 1
HP9000/715, 725, 735 u, a-law, 16 48k 1 (stereo)
HP9000/755 u, a-law, 16 48k 1 (stereo)
NCD MCX terminal u, a, 8, 16 52k 1 (stereo)
NeXT (perus) u-law, 8, 16 44.1k 1 (stereo)
PC/soundblaster pro 8 22.05k / 44.1k 1 (stereo)
PC/soundblaster 16 16 44.1k 1 (stereo)
PC/pas 8 44.1k / 88.2k 1 (stereo)
PC/pas-16 16 44.1k / 88.2k 1 (stereo)
PC/turtle beach multisound 16 44.1k 1 (stereo)
PC/roland rap-10 16 44.1k 1 (stereo)
PC/gravis ultrasound 8/16 44.1k 14-32 (stereo)
SGI (Silicon Graphics) Indigo 8, 16 (Motorola 24-bit DSP) 48k 4 (stereo)
SGI Indigo2,Indy 8, 16 (Motorola 24-bit DSP) 48k 16 (stereo)
Sony NWS-3xxx u, a, 8, 16 8-37.8k 1 (stereo)
Sony NWS-5xxx u, a, 8, 16 8-48k 1 (stereo)
Sun Sparc u-law 8k 1
Sun Sparcst. 10 u-law, 8, 16 48k 1 (stereo)
Tandy 1000/*L* 8 44k 1
Tandy 2500 8 44k 1
VAXstation 4000 u-law 8k 1

Taulukko 3. Laitteistokohtaista esimerkkitietoa bittimääristä, näytetaajuuksista ja kanavamääristä.


4.2. Kovalevyäänitys

PC-tietokoneiden uusin aluevaltaus musiikkistudioissa ovat kovalevyäänittimet (engl. Hard Disk Recorder). Järjestelmä korvaa perinteisen analogisen moniraitanauhurin digitaalisella systeemillä. Kovalevyäänityksessä analoginen tulosignaali muunnetaan digitaaliseksi AD-muuntimella ja tallennetaan (yleensä SCSI-liitäntäiselle) kovalevylle. Toistossa tiedosto luetaan levyltä ja muunnetaan jälleen analogiseksi.

Äänen laatu on samaa tasoa kuin CD:ssä tai DATissa ja editointimahdollisuudet ovat suuret. Ääntä pääsee käsittelemään jopa tuhannesosasekunnin tarkkuudella.

Kovalevyäänittimiä on pääasiallisesti kahta tyyppiä: tietokoneen sisälle asennettavalla lisäkortilla toimivat ja ulkoiset, tietokoneesta riippumattomat, järjestelmät. Tässä esitelmässä keskitytään ainoastaan tietokoneeseen asennettaviin systeemeihin.

Sisäiset järjestelmät (esim. DigiDesign Session 8) käyttävät PC:n sisälle asennettavaa lisäkorttia, joka sisältää järjestelmän tarvitsemat AD-muuntimet ja ohjauselektroniikan. Tietokoneeseen asennettava ohjelmisto ohjaa kortin toimintaa. Etuna perinteiseen analoginauhuriin ja ulkopuoliseen digitaaliäänittimeen tarjoaa sisäinen kovalevyäänitin tutun käyttöliittymän ja toiminnan integroitumisen yhdelle koneelle.

Useimmat kovalevyäänittimet ovat 8-raitaisia. Kotikäyttöön on myös neliraitaversioita, esim. Turtle Beachilta. Turtle käyttää äänen tallennukseen ja toistoon tietokoneen omia kovalevyjä (myös AT/IDE-liitäntäisiä). Kovalevyäänitysten laitteistojen tekniikka edistyy huimaa vauhtia.

Ilmoitettu raitamäärä kovalevyäänittimissä ei kuitenkaan kerro koko totuutta. Useimmissa laitteissa hyödynnetään ns. non-destruktiivista editointia. Tämä tarkoittaa sitä, että jokainen yksittäinen äänitys joka laitteella tehdään, varaa levyltä oman tilansa. Vaikka sama kohta kappaleesta äänitetään samalle raidalle uudestaan, ei edellinen otto tuhoudu, vaan se on tarpeen vaatiessa palautettavissa. Näin käyttäjä voi tallettaa käytettävissä olevasta levytilasta riippuen suuren määrän 'virtuaaliraitoja', joista voidaan valita ne, joita lopulta käytetään.

Toinen raitamäärään vaikuttava seikka on tehdä ns. downmix. Downmixissä useampi raita yhdistetään miksaamalla yhdeksi ja tallennetaan tulos uudelle raidalle. Näin nämä kaksi ensimmäistä raitaa vapautuvat uudelleen käytettäviksi. Sama onnistuu tietenkin myös analogilaitteissa, mutta digitaaliäänityksessä ei kohina lisäänny raitojen yhdistämisestä, joten summaamista voidaan tehdä huomattavasti laajemmassa mittakaavassa kuin analoginauhureissa.


5. Digitaalisen äänen koodaus

Tavanomaisen audiosignaalin talteenotto ja säilytys sellaisenaan vaatii resursseja. Niinpä on tehty kokeiluja muistitilan pienentämiseksi. On esimerkiksi kokeiltu jättää hiljaisia tai muita ihmisen kuulemattomia hetkiä tallentamatta, poistaa usein toistuvia komponentteja tai muuttaa koodausta. Voidaan esimerkiksi tallentaa kahden näytteistetyn arvon erotus varsinaisten arvojen sijaan. Tämä vie vähemmän tilaa, sillä aalto ei juurikaan muutu näytteiden välillä. Edellä mainitut toimenpiteet perustuvat ns. säästö- eli reduktiokoodaukseen. Luku perustuu lähteisiin [Coas 96] ja [Wab 97].

Lisäksi hyödynnetään kuulokynnystä, joka on äänentaso, jolla ihminen pystyy kuulemaan tietyntaajuisen äänen. Ihmisen kuulokynnys on parhaimmillaan 4kHz:n taajuudella. Se on erittäin alhainen (~0 dB) 1-5 kHz:n taajuusalueella, jolla alueella kuulokynnyksestä ei ole hyötyä äänenkoodauksessa. Mutta koska korkeammilla äänillä (>16kHz) kuulokynnys nousee jyrkästi, käytetään koodausta näille alueille.

Edellisten lisäksi voidaan vielä mainita kriittinen kaista. Ihmiskorva analysoi kuulemaansa ääntä siten, että tietyn kriittisen kaistan sisälle osuvat taajuudet analysoidaan yhtenä kokonaisuutena. Tämä johtuu pelkästään ihmiskorvan fyysisistä ominaisuuksista. Esimerkiksi MPEG-koodauksessa signaali jaetaan lineaarisesti taajuuskaistoihin. Tällöin saadaan tilanne, jossa yksittäisen kaistan leveys saadaan pidettyä ihmiskorvan kriittisen kaistan edellyttämissä rajoissa.

Koodausta ja kompressointia käsitellään huomattavasti enemmän luvussa 6 audioformaattien yhteydessä.


5.1. Audiosignaalin koodaus

Hyvää, ellei erinomaista, audiokoodausta saadaan erilaisilla taajuuspainoitetuilla koodereilla (engl. frequency domain coders). Tällaisia ovat mm. alikaistakoodaus (engl. subband coding, SBC) ja mukautuva muunnoskoodaus (engl. adaptive transform coding, ATC). Kooderien erot riippuvat lähinnä äänen spektrikomponenttien määrästä, kvantisointistrategioista ja tapahtuvien koodausvirheiden peittämisestä. Tämä luku perustuu pääasiassa lähteeseen [Coas 96].


5.1.1. Taajuuspainotettu koodaus (Frequency domain coders)

Taajuuspainotetussa koodauksessa lähetettävän tiedon määrää vähennetään muokkaamalla alkuperäisestä signaalista lyhyempimuotoista äänispektritietoa. Lisäksi käytetään hyväksi korvan peitto-ominaisuuksia. Taajuuspainotetut kooderit tarjoavat suoran menetelmän taajuuskomponenttien häiriöiden muotoilemiseksi ja vaimentamiseksi niin, ettei niitä tarvitse lähettää.

Alkuperäisen signaalin spektri on jaettu taajuuskaistoihin. Jokainen taajuuskomponentti on kvantisoitu erikseen. Kutakin taajuuskomponenttia kohti käytettyjen bittien määrä vaihtelee. Mitä olennaisempi ja tärkeämpi komponentti on kyseessä, sitä hienommin se kvantisoidaan, ts. käytetään enemmän bittejä. Lähdesignaalin dynaamisen bittien sijoittelun kontrollointia varten tarvitaan eräänlainen spektrivaippa. Tämä tarkoittaa siis sitä, että bittien sijoitteluinformaatiota tulee lähettää jatkuvasti dekoodaajalle rinnakkaisinformaationa toiminnan tehokkuuden vuoksi.

Ratkaiseva merkitys taajuuspohjaisessa audiosignaalin koodauksessa on esikaikujen (engl. pre-echoes) esiintymisellä. Esimerkiksi, kun hiljaista kohtaa seuraa jokin perkussioääni samassa koodausalueessa (engl. coding block), on mahdollisuutena verrattaen suuri hetkellinen kvantisointivirhe. Esikaiuista voi tulla hyvin selvästi kuuluvia, varsinkin virheherkillä alhaisilla bittimäärillä.

Esikaiut voidaan peittää aikapohjaisella esipeitto-efektillä (engl. pre-masking). Ne voidaan välttää käyttämällä lyhyempiä koodausalueita. Kuitenkin rinnakkaisinformaation siirtoon tarvitaan suurempi bittimäärä, jos alueet ovat liian lyhyitä.


5.1.2. Alikaistakoodaus (Subband coding)

Lähdesignaali syötetään analysoivaan suodinsarjaan (engl. analysis filter bank). Se sisältää M-kappaletta kaistansuotimia taajuudellisesti rinnakkain niin, että sarja alikaistasignaaleja voidaan lisätä yhdistellen niitä halutulla tavalla ja näin tuottaa alkuperäinen signaali tai sitä lähellä oleva.

Jokaisen suotimen ulostuloa on häivytetty määrällä M, joka on siis summa alkuperäiseen signaaliin verrattavista alikaistasignaaleista. Jokaisen suotimen signaali on kvantisoitu erikseen.

Vastaanottopuolella jokaisen alikaistan näytteistystaajuutta lisätään vastaamaan alkuperäistä signaalia. Tämä toteutetaan lisäämällä signaaliin tarpeellinen määrä nollanäytteitä. Synteesisuodinsarjan (engl. synthesis filter bank) kaistaulostuloissa voi ilmetä laajentunutta, interpoloitunutta alikaistasignaalia. Jos systeemissä on 'täydelliset' jälleenmuokkaussuotimet, on summasignaali vastaava kuin kvantisoimaton lähdesignaali.

Esimerkkejä alikaistakoodauksesta ovat ISO/MPEG-audiokoodauksen tasot I ja II sekä Presicion Adaptive Subband Coding (PASC), jota käytetään DCC:ssä.


5.1.3. Muunnoskoodaus (Transform coding)

Sarja sisääntulevia näytteitä muutetaan lineaarisesti erikseen sarjaksi muunnoskertoimia. Tämän jälkeen nämä kertoimet kvantisoidaan ja lähetetään digitaalisessa muodossa dekoodaajalle. Siellä käänteiset muuntimet kartoittavat signaalin takaisin aikapohjaiseksi.

Tyypillisimpiä muunnoksia ovat diskreetti Fourier -muunnos (DFT) tai diskreetti kosinimuunnos (DCT) laskettuina FFT:n (Fast Fourier Transform) periaatteella. Diskreetit muunnokset voidaan esittää suodinsarjoina. Kaistojen impulssivasteiden lopullisia pituuksia voidaan kutsua lohkojen rajaefektiksi (engl. block boundary effect). ATC-kooderit käyttävät modifoitua DCT:tä (MDCT). Siinä käytetään päällekkäisiä analyysilohkoja, jotka voivat olennaisesti muuttaa näitä efektejä.

Nämä muunnokset täyttävät tehokkaasti heikosti näytteistetyn muunnosperäisen suodinsarjan. Niissä ei ilmene lohkojen rajaefektejä ja niillä on korkeampi muuntokoodaushyöty kuin DCT:llä. Lisäksi niiden perusfunktioilla on paremmat taajuusvasteet.

Esimerkkejä muunnoskoodauksesta ovat mm. Dolby AC-2 -koodaus ja AT&T:n Perceptual Audio Coder (PAC).


5.1.4. Hybridikoodaus (Subband/Transform)

Hybridikoodaus on yhdistelmä diskreetistä muunnoksesta ja suodinpankkien käytöstä. Erilaisia taajuusresoluutioita voidaan järjestää eri taajuuksille joustavasti käyttämällä suodinpankkien 'rypästä' ja lineaarista MDCT-muunnosta (engl. hybrid filterbank). MDCT-muunnos jakaa jokaisen alikaistasekvenssin myöhemmin taajuussisältöiseksi saavuttaakseen korkeataajuisen resoluution. Tästä esimerkkinä on mm. Sonyn Adaptive Transform Acoustic Coding (ATRAC), joka on käytössä MiniDiscissä ja MPEG-1:n layer III:ssa.


5.1.5. Useampikanavaisten audiosignaalien koodaus

Epämääräisyydet ja asiaankuulumattomuudet voidaan poistaa useilla tavoilla saaden näin kokonaisbittimäärää pienemmäksi. Näitä ovat kanavienvälinen riippuvuus ja kanavienvälinen peittoefekti. Lisäksi stereo-kuulumattomat komponentit monikanavasignaalissa, jotka eivät edesauta äänilähteiden paikantamisessa, saattavat tulla tunnistetuiksi ja uudelleenmuokatuiksi monofonisessa muodossa. Esimerkkeinä tästä mm. MPEG-2:n monikanavakoodaus ja Dolby AC-3 -koodaus.


5.1.6. Olemassaolevien koodausalgoritmien tuolla puolen

Parempi stereoesityksen binauraalisen (molemmin korvin kuultavan) kuvan aistimuksen ymmärtäminen johtaa uusiin koodausratkaisuihin. Useita hankkeita on jo valmisteilla korkeatasoisen koodauksen suorittamiseksi alhaisilla bittitasoilla (MPEG-2 ja MPEG-4). Myös digitaalisen surround-järjestelmän alueella on odotettavissa lisätoimia. Matkapuhelinverkoissa koodereiden ei tule toimia vain alhaisilla bittitasoilla, vaan myös pysyä vakaana purskevirheiden ja pakettihäviöiden alueilla. Tätä varten kehitellään virheidenpiilotustekniikoita.


5.2. Audion pakkausmenetelmiä

Signaalin koodausta jokaista arvoa tallentamatta kutsutaan kompressoinniksi (engl. compression, pakkaus). Kompressoinnista on eri valmistajien ja kehittelyryhmien omia malleja ja ne ovat vahvasti kehitystyön alla jatkuvasti. Tämä luku perustuu lähteisiin [Af 97], [Coas 96] ja [Bu 93].

Aluksi bittimäärän pienentäminen oli vaatimatonta. Ensiaskelia kompressoinnin maailmaan tarjoilivat muun muassa seuraavat tekniikat. Hetkellinen yhdistely (engl. instantaneous companding) muuntaa tasaisen 11-bittisen PCM:n epäsäännölliseksi PCM-esitykseksi (u-law, a-law). Eri muotoja lohkoyhdistelystä (engl. block companding) ovat järjestelmät kuten DSR ja NICAM. Mukautuvaa differentiaalista PCM:ää (ADPCM) käytetään mm. CD-I -järjestelmissä.

Audiodata on yllättävän hankalaa pakattavaksi tehokkaasti. 8-bittiselle datalle oli suhteellisen onnistunut Huffmanin koodausmalli, joka perustuu hyvien näytteiden välisiin 'deltoihin' eli erotuksiin. 16-bittisen datan pakkausmenetelmien kehittämiseen ovat yhtiöt, kuten Sony ja Philips, käyttäneet miljoonia dollareita. Philipsin luonnos aiheesta on PASC.

Audiodatan kompressointitapoja on useita, ja on syytä ottaa huomioon jokaisen hyvät ja huonot puolet. On otettava huomioon myös se, että jokainen äänitiedosto (eri formaateissa) voidaan koodata usealla eri tavalla. Esimerkiksi AIFF-tiedostot voidaan purkaa (engl. uncompress) ja pakata MACElla tai kompressoida vaikka ADPCM/IMAlla.

Kuvataan seuraavaksi hieman yleisimpiä kompressointimenetelmiä, sekä niiden vahvuuksia ja heikkouksia. On huomioitavaa, että kaikki menetelmät ovat todellisuudessa häviöllisiä eli ne kompressoivat näytteistyksen laadun kustannuksella.

Julkiset äänenpakkausstandardit saavat yhä suurempaa suosiota. Näitä ovat mm. CCITT G.721 (32 kbit/s ADPCM (Adaptive Delta Pulse Code Modulation)) ja G.723 (24 ja 40 kbit/s ADPCM). Esimerkiksi Sun Microsystems on asettanut lähdekoodinsa liitteenä näihin algoritmeihin (kuten G.711, joka määrittelee u-lawin ja a-lawin).

MACEn pakkaus ja purku ovat äärimmäisen nopeita, mutta näytteistyksen laatu heikkenee aika paljon. MACEn nopeudesta on osoituksena mm. se, ettei esimerkiksi QuickTime-elokuvan ääniraidan (MACE-kompressoitu) dekoodaaminen tietokoneella lisää merkittävästi tietokoneen kuormaa. MACE-koodaus kuuluu pääsääntöisesti Macintosh-maailmaan, sillä muut järjestelmät eivät käsittele MACEa helposti. MACE tukee vain 8-bittistä äänidataa. Kompressiosuhteet ovat 3:1 ja 6:1. Huonosta yhteensopivuudesta ja alhaisesta näytteistyksestä johtuen en pitäisi MACEa kovin varteenotettavana vaihtoehtona.

IMA/ADPCM -systeemi on hyvä vaihtoehto MACEn ja MPEGin välissä. IMA tarjoaa varteenotettavan nopean koodauksen ja purun sekä laskee näytteen tasoa vain hieman. IMA-standardin pakkaussuhde 16-bittiselle äänelle on 4:1 (8-bittistä ei tueta).

MPEG (Motion Picture Experts Group) on kehittänyt standardeja käsittämään yhdistettyä audio-visuaalista tiedonsiirtoa. Standardi tunnetaan lyhenteellä MPEG. Audiossa MPEG noudattaa psykoakustiikan perusperiaatteita, eli ottaa huomioon sen, kuinka aivot tulkitsevat äänen laadullisia seikkoja ja mitä taajuusalueita korva aistii herkimmin. MPEG-standardi vaatii myös suorituskykyä laitteistolta. MPEGistä kerrotaan lisää luvussa 6.

U-Law on nopea 2:1 -pakkausmenetelmä 16-bittiselle Sun Microsystemsin käyttämälle audiolle. Tällä kompressointimenetelmällä on kenties suurin yhteensopivuustuki audiokompressointimenetelmien kentässä. Koodausstandardeja esitellään tarkemmin luvussa 6.



6. Audion koodaus- ja tallennusmuodot, eli tallennusstandardit ja audioformaatit

Kautta historian lähestulkoon joka laitteistolla on ollut oma tiedostotyyppinsä audiodataa varten. Toiset niistä ovat enemmän tai vähemmän yhteensopivia, mutta yleensä kaikki tiedostoformaatit ovat muunnettavissa toiseksi, tosin joskus informaatiota hukkaavasti. Tämä luku perustuu lähteisiin [Af 97], [Ko 93], [AFF1 95], [AFF2 95], [Ja 97], [Pa 96], [Fr 97] ja [Da 95].

Digitaalisen audion tallennusstandardeja käsittelevät sekä yksityiset että julkiset organisaatiot. Aktiivisesti tällä alueella toimivia organisaatioita ovat mm.

Äänen tiedostoformaatit ovat laitteen muihin piirteisiin verrattuna oma, erillinen osa-alueensa. Tiedostotyypit voidaan jakaa kahteen eri kategoriaan. Itsekuvailevissa (engl. self-describing) tiedostotyypeissä laiteparametrit ja koodaus ovat määriteltyinä jonkinlaisena erillisenä otsakkeena, 'headerina'. 'Raa'oissa' (engl. raw) formaateissa laiteparametrit ja koodaus ovat yhdistettyinä. Itsemäärittelevät formaatit muodostavat oman 'koodausperheensä', jossa otsakekentät ilmaisevat tapauskohtaisen käyttötarkoituksen, toisin kuin otsakkeettomat formaatit, jotka eivät salli parametrivariaatioita.

Otsakekentät sisältävät näytteistys(laite)parametrejä ja muuta informaatiota (kuten äänen kuvaus- ja tekijänoikeustietoa). Useimmat headerit alkavat nk. maagisella luvulla (engl. magic number) (kts. luku 6.4.2.), joka on jokaiselle formaatille ominainen luku. Jotkut formaatit eivät välttämättä määrittele mitään otsakekentässä, vaan ne muodostuvat osioista, joissa itsessään on sisällä osiot koodausinformaatiosta. Datan koodaus määrää sen, millä tavoin näytteet tallennetaan (esim. ovatko ne merkittyjä, merkitsemättömiä, tavuina vai lyhyinä kokonaislukuina). Myös kanavien lomittaminen on tietynlaista koodausta.

Tässä luvussa perehdytään varsinaisesti audioformaatteihin. Standardit ja formaatit on käsitelty tyyppikohtaisesti. Jokaisen kohdalle on kerätty niihin liittyvää olennaista, ja ylipäätään saatavilla olevaa, tietoa. Luvussa sijaitsevat sulassa sovussa nekin formaatit, jotka voitaisiin yleisesti ryhmitellä vaikka koodaukseksi, kompressoinniksi tai normaaleiksi tiedostoiksi. Kuitenkin useista niistä löytyy yhtymäkohtia toisiinsa.

Joidenkin formaattien kohdalla on esitelty myös koodausmetodeita ja (tieto)rakenteita. Karkeana yleistyksenä voitaisiin sanoa niiden olevan samankaltaisia useiden muidenkin formaattien kohdalla, joten kirjoitettuja pätkiä kannattaa ajatella tukirunkoina myös muille tapauksille.


6.1. MPEG

MPEG (Moving Pictures Experts Group) (tiedostotarkentimina mm. MPG:t .mp2 ja .mp3) on ISOn (International Standard Organization), eli kansainvälisen standardoimisliiton komitea, joka kehittää liikkuvan kuvan ja audion pakkaamisen standardeja. Tämä alati laajeneva komitea on perustettu vuonna 1988 ja edustajia on 20 maasta.

MPEG/audio on geneerinen äänen kompressiostandardi. Useista vokaalimalleihin perustuvista puheelle optimoiduista koodausmenetelmistä poiketen se kompressoi signaalia olettamatta mitään itse lähteen luonteesta. MPEG/audio koodaa kaiken, minkä ihmiskorva voi kuulla. Standardissa on useita kompressiomoodeja. MPEG/audion bittijonoon voidaan lisäksi kohdistaa satunnaishakuja ja suorittaa nopeutettua kelausta.

MPEG-komitea, kuten muutkin standardoimiskomiteat, luo standardeja versioittain. Tämän vuoksi myös MPEG on nimennyt standardinsa numeroimalla ne taulukon 4 osoittamalla tavalla.

MPEG-1 Coding of Moving Pictures and Associated Audio for Digital Storage Media at up to about 1.5 Mbit/s. Valmistui 10/92.
MPEG-2 Generic Coding of Moving Pictures and Associated Audio. Valmistui 11/94.
MPEG-3 Suunniteltiin HDTV-sovelluksiin, mutta on nyttemmin sisällytetty MPEG-2:een. Ei siis ole enää olemassa.
MPEG-4 Very Low Bitrate Audio-Visual Coding. MPEG-komitean päätehtävä nyt, kehitellään vielä, mutta periaattelliset speksit valmistuivat 1995.

Taulukko 4. MPEG-standardit.


MPEG-1 ja -2 ovat täysin valmiita standardeja, joita useimmat äänen ja/tai kuvan pakkausta tarvitsevat sovellukset käyttävät. Molemmat standardit koostuvat taulukossa 5 esitellystä neljästä pääosasta.

System Määrittelee audio- ja videosignaalin synkronoinnin ja multipleksauksen.
Video Määrittelee videosignaalin kompression.
Audio Määrittelee audiosignaalin kompression.
Testaus Määrittelee koodekin bittivuon ominaisuudet ja dekoodausprosessin.

Taulukko 5. MPEG-standardien pääosat.


6.1.1. MPEG-1 ja -2 sekä niiden rakenne

MPEG-1 ISO/IEC JTC1/SC29 WG11 (tunnetaan myös nimellä Moving Pictures Expert Group) on ensimmäinen, muttei suinkaan vähäpätöisin standardi. Se sai kansainvälisen standardin aseman lokakuussa 1992. Siinä on viisi osaa, joista neljä on MPEG-1:lle ja MPEG-2:lle yhteisiä. Viides osa on ohjelmistosimulaatio, joka on raportti kolmen ensimmäisen osan teknisestä ohjelmistorakenteesta. Näytteenottotaajuudet MPEG-1:ssä ovat 32, 44.1 ja 48 kHz.

Kompressoitu bittijono voi tukea yhtä tai kahta äänikanavaa jollakin neljästä vaihtoehdosta:

MPEG-1:llä on ennalta määrätyt bittinopeudet. Kompressoidulla bittijonolla voi olla useita ennalta määrättyjä kiinteitä nopeuksia välillä 32...224 kbit/s kanavaa kohti. Kompressiotasoja MPEG-1:llä on kolme erilaista.

Lisää standardin yksityiskohdista löytyy julkaisusta [ISO/IEC 11172-3:1993 Information technology -- Coding of moving pictures and associated audio for digital storage media up to about 1,5 Mbit/s -- Part 3: Audio].

MPEG-2 ITU ja ISO/IEC JTC1/SC29 WG11 on MPEG-1:n seuraaja ja valmistui marraskuussa 1994. Tämän standardin tarkoitus ei siis ole korvata MPEG-1:stä, vaan täydentää sitä. Tästä syystä MPEG-2:n yhdeksästä osasta viisi ensimmäistä ovat lähes samoja kuin MPEG-1:ssä.

MPEG-2:ssa on monikanavaäänituki. Se tukee viittä hifiaudiokanavaa. Nämä ovat pääkanavat (vasen & oikea etu), keskikanava, sekä takakanavat (niinsanotut surround-kanavat). Lisäksi on optionaalinen pienitaajuuksinen lisäkanava, joka on tarkoitettu subwoofer-informaatiolle eli alhaisimmille taajuuksille. Tämä kanava on nimetty LFE:ksi (engl. Low Frequency Enhancement).

Standardissa on myös lisäys seitsemän itsenäisen kanavan järjestelmälle, jolloin saadaan lisää sovelluksia standardin piiriin. Tämän lisäyksen pääkäyttökohteena on kuitenkin monikieliaudiodatan tallennus.

MPEG-2 ja MPEG-1 on toteutettu keskenään yhteensopiviksi. Eteenpäin yhteensopivuuden mukaisesti MPEG-2:n pitää hyväksyä kaikki MPEG-1:n näytteenottotaajuudet ja bittinopeudet. Taaksepäin yhteensopivana MPEG-1:n koodekki osaa avata MPEG-2:lla tehdyn koodauksen. Matrixing-laskentametodilla surround-informaatio lasketaan mukaan downmix-koodauksessa, jossa MPEG-1:n dekooderilla koodataan auki MPEG-2:sen monikanavaista informaatiota. MPEG-2:ssa on myös pienempiä näytteenottonopeuksia.

Standardi sisältää 32, 22.1 ja 48 kHz näytteenottonopeuksien lisäksi näiden puolinopeudet (16, 22.05 ja 24 kHz).

Bittijonot ovat alhaisemmin kompressoituja. Standardi sisältää lisäksi matalia nopeuksiin 8 kbit/s saakka kompressoituja bittinopeuksia.

Lisäinformaatiota on saatavissa lähteestä [ISO/IEC DIS 13818-3/ITU H.222 Information technology -- Coding of moving pictures and associated audio information -- Part 3: Audio].

MPEG-1 ja MPEG-2 -standardien audio-osa (numero 3) määrittelee MPEG-audiokoodauksen perusrakenteen, joka koostuu kolmesta kerroksesta (engl. layer). Näitä kutsutaan myös kolmeksi algoritmiksi. Layer on terminä yleisesti käytössä monissa kielissä, ja on näin joissakin yhteyksissä käytetympi nimitys kuin kerros. Layerit ovat tehokkuusjärjestyksessä Layer 3:n ollessa tehokkain ja Layer 1:n taasen yksinkertaisin.


6.1.2. MPEG-koodaus

MPEG-koodauksen perustana on MUSICAM-koodaus. Tämä on algoritmi, joka kehitettiin ennen MPEG-standardeja. Algoritmi oli siinä määrin hyvin tehty, että se otettiin käyttöön MPEGissä. MUSICAMista tehtiin yksinkertaistettu versio, joka lanseerattiin käyttöön Layer 1:ssä. Huonona puolena MPEG-1:ssä on se, että se tarvitsee varsin suuren bittinopeuden, eikä siis pakkaa audiodataa tehokkaasti.

MPEG-koodauksen perusrakenteen ensimmäisessä vaiheessa PCM-audiosignaali jaetaan alikaistoihin, kunhan se ensin muutetaan taajuusjakoiseksi käyttämällä suodinpankkia. Seuraavassa vaiheessa muodostetaan psykoakustinen malli, jossa käytetään apuna nopeaa Fourier-muunnosta (FFT, Fast Fourier Transform). Psykoakustinen malli laskee tehotasot ja määrittelee näitten avulla peittoäänten tehon.

MPEG-purkaja on huomattavasti yksinkertaisempi kuin kooderi, sillä sen ei tarvitse muodostaa mitään malleja, eikä suorittaa ylimääräisiä laskutoimituksia. Dekooderi ainoastaan purkaa paketit, rakentaa kvantisoidun spektrin ja muuntaa taajuusjakoisen koodin aikatasoon.


6.1.3. MPEG-audiokerrokset (layers)

MPEG-audiokoodaus on jaoteltu jo aiemmin mainittuihin kolmeen kerrokseen. Kooderin rakenne monimutkaistuu huomattavasti siirryttäessä Layer 2:sta kolmanteen. Tämä on suora seuraus siitä, että pakkauskertoimet suurenevat huomattavasti juuri tällä askeleella. Kaikilla kerroksilla on samat perustoiminnot, joissa kooderi analysoi datan, muodostaa mallin ja koodaa datan.

Koodauksessa syntyy paketteja, jotka sisältävät eri määrän audiosignaalin näytteitä kerroksesta riippuen. Ensimmäisen kerroksen paketissa on 384 näytettä, sekä 2. ja 3. kerroksilla on 1152 näytettä yhdessä paketissa. Tässä on siis huomattava ero. Jokaisen paketin alussa on 32 bittinen otsikko- eli header-kenttä. Otsikkokenttä pitää huolta synkronoinnista ja sekä kuljettaa koodausparametrit.

Layer-1:stä käytetään pääasiassa DCC-kaseteissa (Digital Compact Cassette). Järjestelmässä käytetään maksimibittitasoa, eli 192 kbit/s/kanava.

Layer-2 on eräänlainen kompromissimalli. Se sijoittuu kahden enemmän käytetyn layerin väliin, eikä sille tehtyjä sovelluksia ole paljoa.


6.1.4. MPEG-Layer 3

MPEGin layer 3 on ehdotonta eliittiä audiokoodausmaailmassa tällä hetkellä. Sen perusominaisuuksiin kuuluu laadukas äänenlaatu tiiviistä pakkauksesta huolimatta. Pakkaussuhde on 1/12 alkuperäisestä, jolloin saadaan CD-tasoista ääntä ilman havaittavaa äänenlaadun heikkenemistä. Tästä voidaan laskea, kuinka mainio tilankäyttö systeemillä on. Layer 3 on määritelty sekä MPEG-1:ssä että MPEG-2:ssa.

Layer 3 soveltuu korkean äänenlaatunsa puolesta kaikenlaiseen musiikin tallennukseen ja kohtalaisen alhaisten bittinopeuksiensa vuoksi myös audiodatan siirtoon. Esimerkkeinä voitaneen mainita korkealaatuinen stereoääni ISDN-linjan läpi. Tällä on useita käyttötarkoituksia, kuten äänen radiotyylinen lähettäminen alhaisen bittinopeuden omaavien satelliittikanavien kautta, äänen siirto tietokoneverkoissa (kuten Internetissä), lähinnä musiikin tallennus huomattavan pieneen tilaan, korkealaatuisen puheen siirto (käyttöä esimerkiksi uutisraportoinnissa) ja DVD-levy.

Äänen laatu Kaistanleveys (kHz) Mono/stereo Siirtonopeus (kbps) Pakkaussuhde
puhelin 2.5 mono 8 96:1
LA-puhelin 4.5 mono 16 48:1
AM-radio 7.5 mono 32 24:1
FM-radio 11 stereo 56...64 26...24:1
lähes CD 15 stereo 96 16:1
CD >15 stereo 112...128 14...12:1

Taulukko 6. Vertailutaulukko eri lähteiden mukaan.


PC-koneisiin on suunniteltu ohjelmistoja, joilla voidaan koodata ja purkaa Layer 3 -dataa, sekä soittaa mp3-musiikkia (Layer 3 –musiikin maailmanlaajuinen nimitys) reaaliajassa. Real Time Player eli reaaliaikainen toistosovellus on ollut vaikea kehittää, mutta innostus mp3:a kohtaan on suurta ja markkinoille tulee jatkuvasti uusia sovelluksia käyttöön. Näitä ovat mm. Audioactive, Winplay ja MuseArc sekä Xing-Technologyn StreamWorks, joka on eräs nykysovelluksia ajatellen kenties varteenotettavin.


6.1.5. MPEG-4

MPEG-4 on uusin stardointivaiheessa oleva komitean projekti, joka on tarkoitettu erittäin matalia bittitaajuuksia tarvitseville järjestelmille. Suurin muutos on interaktiivisuus. Vastaanottaja voi kesken tiedonsiirron esimerkiksi muokata bittinopeutta ja/tai muuttaa stereo-signaali mono-signaaliksi, jolloin bittinopeus kasvaa.

Audio-osan perustavoitteena on multimedia-sovellukset, kuten video/internet-puhelimet. MPEG-4 -audiokoodaus jaetaan synteettiseen ja luonnolliseen koodaukseen. Standardi tukee erilaisia audioformaatteja, kuten näytteenottotaajuutta, amplitudiresoluutiota, kvantisoinnin luonnetta sekä kanavien lukumäärää. Synteettinen audio on tulevaisuuden alaa ja MPEG-4:ssä on määriteltynä mm. synteettinen puhedata ja 3D-kuuleminen.


6.2. RealAudio-formaatti

Progressive Networkin RealAudio (tiedostotarkennin .ra) -teknologia mahdollistaa RealAudion player- ja server-ohjelmien välisen interaktiivisen linkityksen, jonka avulla voidaan toteuttaa äänilähetyksiä koko Internet-verkkoon.

Lähetyspäässä tarvitaan palvelinohjelmisto, joka soveltuu laajamittaiseen verkossa tapahtuvaan lähetystoimintaan. Lähetystoimintaan tarvitaan oma kotisivu ja kiinteä liittymä Internet-verkkoon. RealAudio Server -ohjelmisto on yhteensopiva minkä tahansa MIME-koodia tukevan palvelinohjelman kanssa, joita ovat esimerkiksi Netscapen Netsite ja Macin HTTPD.

Riippuen äänen pakkaustiheydestä yksittäisen kanavan kaistanleveyden pitää olla 10 - 22 kb sekunnissa. RealAudio-ohjelmisto vaatii keskimäärin 2MB kiintolevytilaa. Riippuen pakkaustiheydestä RealAudio-formaatissa olevat tiedostot vaativat keskimäärin 1.1-2.4kb jokaista äänisekuntia kohden. Näin ollen esimerkiksi yhden tunnin pituinen lähetys vaatii levytilaa 3.6MB:stä 8 MB:aan.

RealAudio encoder on ohjelma, jolla voidaan muuntaa eri ääniformaatissa olevia tiedostoja (esim. wav, au, pcm jne.) RealAudio-formaattiin. Koodattu RealAudio-materiaali voidaan soittaa Internetissä reaaliaikaisesti, käyttämällä asianmukaisia ohjelmia (player ja server). Koodaus voidaan suorittaa kahden vaihtoehtoisen algoritmin mukaisesti. RealAudio 14.4 -algoritmi mahdollistaa monofonisen AM-tasoisen äänen, joka vaatii vähintään 14.4Kbps modeemiyhteyden Internetiin. 28.8 -algoritmi mahdollistaa lähes FM-tasoisen äänen ja vaatii vähintään kaksi kertaa nopeamman yhteyden. RealAudio-kooderi on suunniteltu toimimaan Windows 95 ja Windows NT -ympäristöissä sekä Macintoshissa.

14.4-algoritmissa tarvitaan vapaata levytilaa 1K jokaista koodattavaa sekuntia kohti. 28.8 -algoritmi vaatii vastaavasti 1.8K vapaata levytilaa sekuntia kohti. "LIVE" -koodaus edellyttää vähintään Pentium-tasoisen suorittimen ja enemmän keskusmuistia.


6.3. Audio IFF, AIFF, AIFC

AIFF (Audio Interchange File Format) (tiedostotarkentimet .aif, .iff ja .aff) on Apple Computer Inc.:n kehittämä standardi. Se on kehitetty audioinformaation siirron yhteensovittamiseksi eri tietokonejärjestelmien välillä, tallentamaan mahdollisimman hyvälaatuista ääntä (digitaalisia audionäytteitä) ja instrumentti-informaatiota. Tämän laajennus AIFC tai AIFF-C tukee kompressointia. Molemmat formaatit ovat vahvasti myös SGI:n (Silicon Graphics) suosiossa.

Standardi on yhdenmukaistettu Electronic Artsin kehittämän standardin EA-IFF-85 Standard for Interchange Format Files kanssa. Tämä rakentuu palasista seuraavalla tavalla. Yleinen osa (engl. Common Chunk) pitää sisällään määritteet kanavien määrästä, näytteiden määrästä, näytekoon ja näytteistystaajuuden (näytteiden määrä sekunnissa). Äänidataosa (engl. Sound Data Chunk) taas määrää näytteen kehykset. Jokainen kehys sisältää 1-6 kanavaa. Mono- ja stereoääni, sekä kolmi-, neli-, viisi- ja kuusikanavainen surround-ääni ovat tuotettavissa. Varioitu näytekoko (1 ja 32 bitin välillä) on paketoitu erikokoisina 8-bittisinä tavuina. Merkkiosaa (engl. Marker Chunk) voidaan käyttää identifioimaan äänitieto-osien synkronointipisteet. MIDI- ja instrumenttiosa voidaan luokitella osaksi yleistä informaatiota. Sovellusosa (engl. Application Specific Chunk) mahdollistaa tiettyä sovellusyhteensopivuutta koskevan perustiedon lisäämisen. EA-IFF-85:n tekstiosa (engl. Text Chunk) mahdollistaa kommentoinnin. Siihen voidaan sisällyttää mm. nimi, tekijä ja tekijänoikeustiedot ja äänitystiedot.

AIFF on kenties paras audioformaattivaihtoehto sovellusyhteensopivuutta ajatellen. Se tukee 16-bittistä, 44 kHz:n stereoääntä, mutta tämä ei koske välttämättä kaikkia AIFF:ää tukevia sovelluksia. Kuten aiemmin todettiin, AIFF tukee myös polyfonista ääntä, eli ääntä useammalla kuin kahdella kanavalla.

AIFF-C tai AIFC on pakattua AIFF-tietoa. Kompressointivaihtoehdoista AIFF-tiedostomuodon kanssa voi käyttää MACEa ja ADPCM/IMAa.

MACE-pakatut tiedostot ovat harvinaisia. Koodaus ja purku ovat nopeita, mutta laatu on huono verrattuna ADPCM/IMA- tai MPEG-pakkaukseen. MacIntoshin Sound manager hallitsee MACE-purkamisen automaattisesti. Todennäköisesti myös erillisiä MACE-työkaluja on olemassa, mutta esimerkiksi AIFC-MACE -soittimia ei ole tiedossa.

Useat nykyiset ohjelmat tukevat ADPCM/IMA-pakattuja AIFF-tiedostoja. Windowsille tällaisia sovellusohjelmia on esimerkiksi Goldwave. MacIntoshille riittää mikä tahansa normaali AIFF-soitinsovellus (esim. SoundApp tai SoundManager) mahdollisine 'työkalulaatikkoon' (toolbox) lisättävine ADPCM/IMA-tukineen.

AIFF-ohjelmia ovat mm. seuraavat:

Ammattimaisia sovelluksia ovat mm. Passport Designin Alchemy ja Digidesignin Sound Designer, sekä äänen editointiohjelmista mm. SoundEdit 16 ja OSC:n Deck II.

Lisätietoa standardista on dokumentoituna lähteessä [Apple Computer Inc, Audio Interchange File Format (AIFF): A Standard for Samples Sound Files, Version 1.2.]. Lisäksi AIFF-C spesifikaatio on saatavilla FTP:llä osoitteesta ftp://ftp.sgi.com/sgi/aiff-c.9.26.91.ps.Z.

Liitteessä 1 on lista ja kuvaukset AIFC:n määrittelemistä funktioista.


6.4. NeXTin ja Sunin UNIX-formaatit .au ja .snd

Unix/NeXT audio -muotoa (tiedostotarkennin .au tai .snd) olevissa tiedostoissa voidaan käyttää u-Law-, A-Law- tai lineaarista PCM-tallennusta. Tätä tiedostoformaattia käsitteleviä apuohjelmia on Windowsille ja DOSille. Tiedostomuotoa voidaan joissakin tapauksissa lukea myös raakamuodossa. Normaali tilanne on juuri itsekuvaileva (header) formaatti, jota tässä luvussa tullaan käsittelemään. Lisäksi snd-tiedostoja on myös Mac/PC-formaateissa otsakekentittöminä (headerless), joten sekoittamisen mahdollisuus on olemassa (SOX-tyyppi on NxTS).


6.4.1. SNDSoundStruct: Kuinka NeXT-järjestelmä esittää ääntä

NeXT-ääniohjelmisto määrittelee SNDSoundStruct -tallennusrakenteen äänen esittämiseksi. Tallennusrakenne kertoo äänitiedoston, Mach-O -äänisegmenttiformaatit ja äänen tyyppitiedot. Sitä käytetään myös kuvailemaan ääntä 'Interface Builderille'. Tavallisimmat äänenmuokkausoperaatiot, kuten toisto, äänitys ja leikkaa-liimaa -operaatiot, on esitetty helpoiten ääniobjektissa. Useissa tapauksissa äänen muokkaussovellus tarvitsee tietoa SNDSoundStruct -arkkitehtuurista. Jos äänidataa halutaan tarkastella tai muokata tarkemmin, täytyy tietorakenteesta olla perillä.

SNDSoundStruct sisältää otsikkotiedon (header), äänen attribuutteja kuvailevaa informaatiota ja ääntä vastaavan datan. Määrittelyn rakenne näyttää seuraavalta

(sound/soundstruct.h):
typedef struct {


6.4.2. SNDSoundStructin kentät.

Magic on maaginen luku, joka identifioi struktuurin SNDSoundStructiksi. Se sisältää myös muun tietyksi äänidataksi tekevän identifiointitiedon.

Aikaisemmin mainittiin SNDSoundStructin sisältävän otsakekentän, jota seuraa äänidata. Todellisuudessa tallennusrakenne sisältää vain otsakekentän, kun data on kokonaan erillinen osa, kuitenkin jatkuen heti tallennusrakenteen jälkeen. dataLocationia käytetään osoittamaan data. Yleensä luku on tavutieto tallennusrakenteen alusta äänidatan ensimmäiseen tavuun. Tässä tapauksessa data tulee välittömästi tallennusrakenteen jälkeen, joten dataLocation voidaan ajatella myös otsakekentän kokona. Toinen dataLocationin käyttötapa on määrittää osoite paikantamaan data, jos se ei seuraa välittömästi tallennusrakennetta. Tätä kuvaillaan luvussa 6.4.3.

Kentät dataSize, dataFormat, samplingRate ja channelCount kuvailevat äänitiedon. dataSize on koko tavuina (ei sisällä SNDSoundStructia). dataFormat on koodi, joka identifioi äänen tyypin. Näytteistetyille äänille tämä on kvantisointitieto. Tieto voi olla myös ohjeet DSP:lle äänen syntetisoimiseksi. samplingRate kertoo näytteistystaajuuden (näytteistetty äänidata). Laitteisto tukee kolmea taulukossa 7 esitettyä näytteistystaajuutta (ilmoitettu kokonaislukuina).

Vakio Näytteistystaajuus (näytettä sekunnissa) Huom.
SND_RATE_CODEC 8012.821 (CODEC input)
SND_RATE_LOW 22050.0 (low sampling rate output)
SND_RATE_HIGH 44100.0 (high sampling rate output)

Taulukko 7. SNDSoundStructin kolme näytteistystaajuutta.

channelCount kertoo näytteistetyn äänen kanavien lukumäärän.

info on NULL-loppuinen merkkijono, johon voi sisällyttää äänen kuvauksen tekstimuodossa. Infon koko asetetaan talletusrakenteen luonnissa, eikä sitä voi sen jälkeen muuttaa. Tämän tulee olla vähintään neljän tavun mittainen (jos käytössä).


6.4.3. Formaattikoodit

Äänen formaatti esitetään positiivisina 32-bittisinä kokonaislukuina (integer). NeXT varaa luvut väliltä 0-255. Oman formaatinkin voi määritellä luvuilla, jotka ovat suurempia kuin 255. Suurin osa NeXTin määrittelemistä formaateista kuvaa näytteistetyn äänen amplitudikvantisointia, kuten taulukosta 8 on havaittavissa. Formaattikooditaulukko on lähteen alkuperäisessä asussa. Muutamia puutteita koodien selityksissä on havaittavissa.

Value Code Format
0
SND_FORMAT_UNSPECIFIED
unspecified format
1
SND_FORMAT_MULAW_8
8-bit mu-law samples
2
SND_FORMAT_LINEAR_8
8-bit linear samples
3
SND_FORMAT_LINEAR_16
16-bit linear samples
4
SND_FORMAT_LINEAR_24
24-bit linear samples
5
SND_FORMAT_LINEAR_32
32-bit linear samples
6
SND_FORMAT_FLOAT
floating-point samples
7
SND_FORMAT_DOUBLE
double-precision float samples
8
SND_FORMAT_INDIRECT
fragmented sampled data
9
SND_FORMAT_NESTED
?
10
SND_FORMAT_DSP_CORE
DSP program
11
SND_FORMAT_DSP_DATA_8
8-bit fixed-point samples
12
SND_FORMAT_DSP_DATA_16
16-bit fixed-point samples
13
SND_FORMAT_DSP_DATA_24
24-bit fixed-point samples
14
SND_FORMAT_DSP_DATA_32
32-bit fixed-point samples
15 ? ?
16
SND_FORMAT_DISPLAY
non-audio display data
17
SND_FORMAT_MULAW_SQUELCH
?
18
SND_FORMAT_EMPHASIZED
16-bit linear with emphasis
19
SND_FORMAT_COMPRESSED
16-bit linear with compression
20
SND_FORMAT_COMPRESSED_EMPHASIZED
A combination of the two above
21
SND_FORMAT_DSP_COMMANDS
Music Kit DSP commands
22
SND_FORMAT_DSP_COMMANDS_SAMPLES
? (Some new ones supported by Sun)
23
SND_FORMAT_ADPCM_G721
24
SND_FORMAT_ADPCM_G722
25
SND_FORMAT_ADPCM_G723_3
26
SND_FORMAT_ADPCM_G723_5
27
SND_FORMAT_ALAW_8

Taulukko 8. Formaattikoodit.


Useimmat em. formaateista määrittelevät erikokoista ja -tyyppistä näytteistettyä tietoa. Seuraavassa joistakin tarkempia tietoja:


6.4.4. Pilkkoutunut äänidata

Äänitieto tallennetaan yleensä peräkkäisiin muistilohkoihin. Kuitenkin editoitaessa näytteistettyä äänidataa (leikkaus, liittäminen), data saattaa tulla epäjatkuvaksi tai paloitelluksi. Jokaiselle dataosalle on annettu oma SNDSoundStruct -otsakekenttä, jolloin jokaisesta osasesta tulee näin erillinen SNDSoundStruct -rakenne. Näiden uusien rakenteiden osoitteet on koottu jatkuvaksi, NULL-päätteiseksi lohkoksi. Alkuperäisen SNDSoundStructin dataLocation-kenttä on asetettu uuden lohkon osoitteeksi samalla, kun alkuperäinen formaatti, näytteistystaajuus ja kanavien lukumäärä on kopioitu uusiin SNDSoundStructeihin.

Pilkkoutuminen sallii suuren määrän liikkuvaa dataa sillä aikaa, kun ääntä editoidaan. Pilkkoutuneen äänen toisto on suoraa, sillä koskaan ei tarvitse tietää, onko ääni paloiteltuna vai ei. Kuitenkin todella vahvasti pilkkoutuneen äänen toisto on aavistuksen heikompaa kuin jatkuvan. C-funktiota SNDCompactSamples() voidaan käyttää liittämään pilkkoutunut äänidata.

Näytteistetty äänidata on luonnollisesti pilkkoutumatonta. Juuri äänitetty, äänitiedostosta saatu ääni tai 'Mach-O'-segmentti eivät ole pilkkoutunutta. Ainoastaan näytteistysdatasta voi tulla pilkkoutunutta.


6.4.5. NeXT sndfile header -formaatti

Taulukossa 9 on esitettynä NeXT sndfilen otsakekentän osat.

0 1 2 3
0 0x2e 0x73 0x6e 0x64 'magic'
4 dataLocation
8 dataSize
12 dataFormat (enum)
16 samplingRate (int)
20 channelCount
24 info

Taulukko 9. NeXT sndfilen header.


NeXTin yleisimmät kombinaatiot on esitetty taulukossa 10.


Näytetaajuus Kanavien lkm. Dataformaatti
Puhetiedosto 8012 1 1 8-bittinen mu-Law
Järjestelmä-ääni 22050 2 3 16-bittinen lineaarinen
CD-taso 44100 2 3 16-bittinen lineaarinen

Taulukko 10. NeXT-järjestelmän kombinaatiot.


6.5. IFF/8SVX-äänitiedosto

IFF/8SVX:llä tarkoitetaan Amigan äänitiedostoa (tiedostotarkennin .iff). IFF-tiedoston ensimmäiset 12 tavua on käytetty erottamaan Amigan kuva (FORM-ILBM), Amigan ääninäyte (FORM-8SVX), tai jokin muu yhdenmukainen IFF-spesifikaatioinen tiedosto.

IFF FORM -ääninäytemuodot löytyvät myös EA-IFF-85 -dokumentaatiosta, jossa ovat eriteltyinä spesifikaatiot mm. grafiikalle, äänelle ja muokatulle tekstille. IFF/8SVX mahdollistaa amplitudin korkeuskäyrien hahmottamisen (iskun, vaimenemisen, jne.). Kompressio on valinnainen.

Huomionarvoinen seikka on CD-I -järjestelmän käyttämä standardiformaatti, joka on myös IFF-formaatti, mutta tosin ainoastaan reaaliaikamuodossa.

Seuraavassa tiedosto-otteessa on esimerkkinä FutureSound-audiotiedosto, jossa on 15000 näytettä 10000 kHz:n taajuudella. Tiedosto on 15048 tavun mittainen. Määrittelystä löytyy tietoa taajuudesta, kanavista sekä instrumenttitietoa.


BODYsta ei voida tehdä oletusta sen alkavan 48 tavun jälkeen. Kuten VHDR, palaset nimeltä NAME, AUTH, ANNO tai (c) voivat kuulua mukaan ja ne voivat esiintyä missä järjestyksessä tahansa.


6.6. ADPCM

ADPCM (Adaptive Differential Pulse Code Modulation) käsittää audiosignaalin digitointia alueilla 16, 24, 32 ja 40 kbit/s.

ITUn suositus G.726 sisältää pääpiirteet 64 kbit/s a-law ja u-law PCM-kanavamuunnokselle alueilla 40, 32, 24 tai 16 kbit/s. Muunnos on lisätty PCM-bittivirtaan käyttäen ADPCM-muunnoskoodausta. Pääsovellus kanaville 24 ja 16 kbit/s on kanavien kantoääni (engl. carrying voice) DCME:ssä (Digital Circuit Multiplication Equipment). Ensisijainen sovellus kanavalle 40 kbit/s on kantaa modeemisignaalia DCME:ssä, varsinkin modeemeille yli 4800 kbit/s.

Standardin peruskäyttökohteet ovat korkeiden nopeuksien digitaalisissa telekommunikaatiosysteemeissä.

Lisätietoa standardin yksityiskohdista on saatavilla osoitteesta International Telecommunications Union (ITU), Place des Nations, CH-1211 Geneva 20, Switzerland.

Standardin yksityiskohtia löytyy myös julkaisuista [G.726a 91], [G.726A 95], [G.726III/G.727II 95], [G.727a 91] ja [G.727A 95].


6.7. ACE/MACE

Applen audion kompressointi- ja ekspandiontijärjestelmä. Päästandardi on ACE, joka Macintosheille tunnetaan kirjainyhdistelmällä MACE. Tämä häviöllinen systeemi pyrkii ennustamaan aallon kulkua seuraavaan näytteeseen.


6.8. Microsoftin ADPCM (.wav ja .pcm)

Microsoftin ADPCM (Adaptive Delta Pulse Code Modulation) (tiedostotarkentimet .wav, .pcm) on tiivistysmuoto, jota käytetään mm. CD-I -järjestelmässä videoäänenä. Tiivistyssuhde on noin 1:2-1:8, mutta tiivistys ei ole hävikitön. 16-bittinen ääni tallentuu tässä 4-bittiseksi. Äänikortit, joissa on digitaalinen signaaliprosessori (DSP), voivat tiivistää äänen samalla hetkellä.


6.9. IMA/DVA ADPCM (.wav ja .pcm)

IMA/DVA ADPCM (tiedostotarkentimet .wav, .pcm) tiivistää äänen eri algoritmiä käyttäen kuin Microsoftin ADPCM perusmenetelmän ollessa sama. Tämä menetelmä mahdollistaa myös 16-bittisen äänen tiivistyksen 3-bittiseksi, mutta sen toistamiseen kykenevät vain harvat ääniohjaimet. Menetelmä on alunperin kehitetty videotallennukseen.


6.10. CELP

CELP (Code Excited Linear Prediction) on digitaalisten lähetysten puheenkoodaussysteemi. Se toimii samanlaisella mallinnuksella kuin LPC (luku 6.13.). Systeemi laskee alkuperäisen puheen ja synteettisen mallin välillä tapahtuneet virheet ja lähettää sekä malliparametrit että hyvin tiivistetyn esityksen virhetiedoista. Pakattu esitys on kooderien ja purkajien käytössä olevan 'koodikirjan' 'sisällysluettelo', josta nimitys 'Code Excited'. CELP-kooderi tekee LPC:hen verrattuna enemmän työtä, mutta myös tulos on laadukkaampi. Esimerkiksi FIPS-1016 CELP on laadultaan samaa tasoa kuin 32 kbit/s ADPCM, mutta käyttää vain 4.8 kb/s (samoin LPC).

CELPin takana on US Department of Commerce ja standardin yksityiskohtia löytyy lähteestä [Fs1].

Lisätietoa on saatavissa osoitteesta US National Technical Information Service (NTIS), U.S. Department of Commerce, 5285 Port Royal Road, Springfield, VA 22161, U.S.A. (Phone: +1 703 487 4650).


6.11. GSM

GSM (Global System for Mobile Communication) on puheen digitaalinen koodaussysteemi matkapuhelinten satelliittivälityksessä. Organisaatio järjestelmän takana on ETSI ja tietoa standardista löytyy lähteestä [IE].

GSM on euroopassa ja nykyisin monin paikoin muuallakin käytössä oleva puheen koodausjärjestelmä. GSM06-10 kompressoi 160 13-bittistä näytettä 260 bittiin (33 tavuun), 1650 tavua/s (8000 näytettä/s).

Lisätietoa systeemistä saa osoitteesta ETSI, F-06921 Sophia Antipolis Cedex, France (+33 92 94 42 57).


6.12. LD-CELP

LD-CELP (Low Delay Code Excited Linear Prediction) on avoimien järjestelmien digitaalisten lähetysten puheenkoodaussysteemi. Järjestelmän takana oleva organisaatio on ITU ja standardin yksityiskohtaista tietoa löytyy lähteestä [G.728a 92].

Järjestelmä on ITUn standardi käytettäväksi matalaviiveisenä versiona CELPistä. Se digitoi 4kHz:n puhetta nopeudella 16 kb/s.

Lisätietoa standardista saa osoitteesta International Telecommunications Union (ITU), Place des Nations, CH-1211 Geneva 20, Switzerland.


6.13. LPC-10E

LPC-kooderi (Linear Prediction Coder (Enhanced)) on puheen digitoinnin analyyttinen malli. Se sovittaa puheen yksinkertaiseen, analyyttiseen muotoon (traktaatti). Tämän jälkeen se erottaa puheen kokonaan pois ja toimittaa parametrit parhaiten sopivassa muodossa. LPC-purkaja käyttää näitä parametreja muodostamaan synteettistä puhetta. Puhe on ymmärrettävää, mutta kuulostaa konemaiselta.

Systeemin takana ovat yhteistyössä US DoD ja NATO. Tietoja standardista löytyy lähteestä [FIPS], sekä standardointitiedoista US DoD Federal Standard 1015.

Lisätietoa standardista saa osoitteesta GSA Federal Supply Service Bureau, Specification Section, Suite 8100, 470 E. L'Enfant Place S.W., Washington, DC 20407, U.S.A. (Phone +1 202 755 0325).


6.14. ODA ACA

ODA ACA (Open Document Architecture Audio Content Architecture) sallii audioinformaation sisällyttämisen ODAlla koodattuihin dokumentteihin. Standardi on määritelty standardissa ISO/IEC JTC1/SC18 WG3 ja yksityiskohdat standardista löytyvät lähteestä [T.419 95].

ODA-standardin osa 9 sallii ääniviestien tai muun audiosisällön liittämisen ODA-dokumentteihin. Äänitiedostot voidaan koodata käyttämällä ITU-standardeja G.711 (A-law & U-law PCM), G.722 (SB-ADPCM), G.726/7 (ADPCM) ja J41/2 (käytetään korkealaatuiselle 384kb/s signaaleille), sekä standardeja ISO MPEG-1 ja MPEG-2, standardeja GSM 06-10, ANSI S4 ja AES3.

ODA-audiotiedostot on aina vaihdettavissa toisiksi prosessoitaviksi formaateiksi. Monikanava-audiodataa voidaan toimittaa lisättynä loogisilla attribuuteilla, kuten kontrollin rajauksella ja tarkoituksenmukaisilla kestoilla, sekä ulkoisilla attribuuteilla, kuten kontrolloinnin supistamisella ja taajuusvaippakäyrillä (engl. frequency envelope). Taajuusvaippakäyrä käyttää 33 ISO 266:1975:ssa määriteltyä näytteistystaajuutta kontrolloidakseen kaventamistasoa kaikkien äänien sovittamiseksi.

Käyttö on rajoitettu. Lisätietoa on saatavilla ITUsta, ISOsta tai kansallisesta standardointiorganisaatiosta.


6.15. PCM

PCM (Pulse Code Modulation) on analogisen äänen muunnosstandardi esimerkiksi digitaalista puhelinliikennettä varten. Taustaorganisaatio on ITU ja standardin yksityiskohdat löytyvät lähteestä [G.711 90].

PCM:ää käytetään analogisten signaalien, kuten puheen ja musiikin, digitoinnissa. Sitä on käytetty alunperin pääasiassa digitaalisten verkkojen lähetyksissä. ITUn suositus G.711 sisältää kansainvälisesti hyväksytyn metodin PCM:n käyttämiseksi äänisignaalien digitoimiseen 64kb/s-tasoiselle (4kHz) audiosignaalille.

PCM:ää on kahta formaattia: A-law (Eurooppa) ja u-law (USA). Bittien lukumäärän spesifiointi u-lawille on jokseenkin hankalaa näytteiden ollessa logaritmisesti koodattuja 8 bittiin, mutta niiden dynaaminen säde kuitenkin on lineaarista 12-bittistä dataa.

Kuten kaikessa digitaaliaudiossa, ADC:t, DAC:t, bittiresoluutio ja näytteistystaajuudet, kaikki seikat esiintyvät myös digitaaliäänittimissä. Tähän liittyen kiinnostaa myös se, kuinka audio itse asiassa sijoittuu 'digitaalinauhalle'. Yleisin koodaustekniikka on PCM. Se konvertoi bittivirran ketjuksi kapeita suorakulmaisia pulssiaaltoja, jotka edustavat bittiarvoja. Tämä virta pulsseja kirjoitetaan kohteeseen. Toistettaessa prosessi on käänteinen ja pulssit konvertoidaan takaisin bittiarvoiksi.

Digitaalinen informaatio kirjoitetaan yleensä kohteeseen 'ylikorostetusti' niin, että informaatiosta on aina olemassa 'varmuuskopio' virheiden varalle. Tämän prosessin varustamiseksi data on usein limitetty nauhalle samankaltaisella pyörivän kuvapään tekniikalla kuin videonauhureissa. Tämä limitysprosessi poistaa mahdollisuuden käsineditointiin.

Lisätietoa standardista on saatavilla osoitteesta International Telecommunications Union (ITU), Place des Nations, CH-1211 Geneva 20, Switzerland.


6.16. SB-ADPCM

SB-ADPCM (Sub-Band Adaptive Differential Pulse Code Modulation) kattaa puheen koodauksen ISDN-linjoilla yli 64kb/s toimituksissa. Taustaorganisaationa on ITU ja standardin yksityiskohdat löytyvät lähteestä [G.722 90].

SB-ADPCM kuvailee, kuinka laadultaan keskinkertaisen audiosignaalin tulisi olla koodattu käyttämällä varianttia ADPCM:ää yli 64kb/s:n lähetyksissä Integrated Service Digital Network (ISDN) -linjoilla. Standardia käytetään signaaleille taajuuksilla 7kHz:iin saakka.

ISDN:n esiintyminen on vielä vähäistä, mutta siellä missä ISDN on käytössä, on SB-ADPCM standardimetodi puheen digitoinnissa.

Lisätietoa standardista on saatavilla osoitteesta International Telecommunications Union (ITU), Place des Nations, CH-1211 Geneva 20, Switzerland.


6.17. SMDL

SMDL (Standard Music Description Language) on eräänlainen yleisyhteys musiikin, merkintäjärjestelmien (scores) ja kriittisen musiikkianalyysin välillä. Taustalla on standardi ISO/IEC JTC1/SC18 WG8 ja standardin yksityiskohdat on esitetty lähteessä [ISO10743].

Standardi käytää Hypermedia/Time-based Structuring Language (HyTime) -formaattia yhdistämään musiikin, merkintäjärjestelmät ja musiikin selitykset. Yksittäisten komponenttien (esim. synkronointiyksityiskohdat, esitysmetodit) suhteet tallennetaan käyttämällä Standard Generalized Markup Languagea (SGML).

SMDL perustuu neljään alueeseen (engl. domain): loogiseen- , ele/liike-, visuaaliseen- ja analyyttiseen alueeseen. Musiikin työ (musical work) rakentuu tietystä määrästä musiikkisegmenttejä. Jokaisen työn voi liittää johonkin työluokkaan ja siihen voi sisältyä informaatiota asianomaisesta ja tallennuslähteestä.

Loogisen alueen työ esitetään yksittäisinä ns. 'cantus-komponentteina', joista jokainen on oman aikajanansa kanssa virtuaalisessa ajassa ilmaistuna. Cantuksella voi olla useita säikeitä, sanoituksia, tai 'tahtipuikkoja' ajan kontrolloimiseksi ja 'tahtipuikkoja' (sound modification statements) toimimaan yhteistyössä sen kanssa. Kuormitus ja korkeustaso on kontrolloitavissa ja synkronoitavissa.

Loogisessa alueessa määritelty musiikki voidaan linkittää HyTime-standardilinkityksellä merkintätavaksi visuaaliseen alueeseen, esitystavan kontrollin spesifikointiin elealueeseen, ja yksittäisiksi analysoitaviksi komponenteiksi analyyttiseen alueeseen. Eri cantusten linkittämiseksi voidaan käyttää 'teemoja'.

Standardin lisätietoja on saatavilla ISOsta tai kansallisista standardointiorganisaatioista.


6.18. US Federal Standard 1016

Tämä äänikoodausstandardi perustuu 4800 bps kiihdytettyyn lineaariseen äänikooderiin (CELP 3.2). Julkaisuja aiheesta ovat mm. "Details to Assist in Implementation of Federal Standard 1016 CELP", sekä virallinen "Federal Standard 1016, Telecommunications: Analog to Digital Conversion of Radio Voice by 4,800 bit/second Code Excited Linear Prediction (CELP)".

Toinen rinnasteinen systeemi saman otsikon alle on US DoD's Federal Standard 1015/ NATO STANAG 4198. Se perustuu 2400 bps lineaariseen ennustuskoodaukseen (LPC-10) ja se uudelleenjulkaistiin standardina Federal Information Processing Standards Publication 137 (FIPS Pub 137).


6.19. Macintosh SND

Macintoshin äänitiedostot ovat SND-tiedostoja (.snd). Resurssina se on samantyyppinen kuin esimerkiksi Microsoft Windowsin WAV-formaatti. Macintoshin snd-tiedostolla on alussaan alkutiedot (header) kuten AIFF:ssä ja WAVissa, mutta ne ovat muutoin samantyyppistä äänitietoa. Tiedostot ovat merkitsemätöntä tyyppiä (unsigned).


6.20. MIME

MIME on lähinnä sähköistä postiliikennettä koskeva Internet-standardi, jossa on määritelty audiodatan siirtämistä koskevaa koodaustietoa, sekä laite- ja ohjelmatietoa. Tämä on laajoja mittasuhteita saava formaatti, ja määrittelee oikeastaan eräänlaisen jälkiäänitetyn perusaudion, 8-bittisen u-lawin näytteistettynä 8000 näytettä/sekunnissa.


6.21. Creative Voice (VOC)

Creative Labsin SoundBlaster VOC (tiedostotarkennin .voc) on DOS-ympäristössä (esim. peleissä) yleisin aaltomuotoisen äänen formaatti. Se on aina 8-bittinen ja tiedoston pituus on rajoitettu (16 minuuttia). Useat muutkin äänikortit Sound Blasterin lisäksi tukevat sitä ja se voidaan tarvittaessa muuntaa WAV-muotoon.

Seuraavassa esitetään esimerkki VOC-tiedostoformaatista (tavut heksamuodossa). Se sisältää otsakekenttäosan (tavut 00-19) ja sarjoja datalohkoista (tavut 1A+).


6.22. Raw PCM

Raaka PCM (SAM, Signed Raw Format, tiedostotarkennin .sam) sisältää pelkän äänitiedon ilman lisätietoja tai tiivistystä. Näytteet on tallennettu etumerkillisinä (signed) 7-bittisinä.

Muutamia vanhoja header-esimerkkejä on esitetty liitteessä 4.



6.23. RIFF WAVE (.wav)

Microsoftin Waveform, WAV (tiedostotarkennin .wav) on Windowsin aaltomuotoisen äänen perusformaatti ja tässä ympäristössä yleisimmin käytetty. Se tukee kaikkia näytteistystaajuuksia, 8- ja 16-bittistä näytekokoa sekä mono- ja stereokanavia. WAV-tiedostot ovat RIFF (Resource Interchange File Format) -tyyppisiä, vapaasti suomennettuna resurssien keskinäisen vaihdon tiedostomuotoja. Nämä määritykset tallentuvat osaksi tiedostoja niin, että ääniajuri osaa toistaa ne oikeassa muodossa. RIFF-muodossa tiedostoihin voidaan tallentaa myös paljon muuta tietoa, mm. kappaleen nimi ja esittäjä. Käytetty tallennustekniikka on Microsoft PCM.

RIFF-tiedosto muodostuu yhdestä tai useammasta lohkosta jokaisen osoittaessa seuraajaansa. Jokaisella lohkolla on tyyppi, jonka jälkeen seuraa joukko tietoja. Näistä sovellus voi valita ne tiedot, joista se on kiinnostunut. Tiedoston lohkoa edeltää aina seuraavantyyppinen otsikko (engl. header)

FOURCC-objekti on neljän tavun levyinen kenttä, joka määrittää lohkon tyypin. Tässä tapauksessa kentän arvona on WAVE. ckSize määrittää ko. dataosion koon tavuina. Lohkot voivat sisältää alalohkoja. Perusäänitiedoston todellinen rakenne on WAVE-lohko, joka sisältää fmt-lohkon ja data-lohkon.

RIFF-tiedostoihin on sovelluksen mahdollista lisätä vain omaa käyttöään varten tarkoitettua tietoa. Tätä varten on olemassa oma lohkotyyppinsä ZSTR (zero-terminated string). Tämä tulee WAVEn alalohkojen jälkeen.

RIFF-tiedostoja on olemassa myös hieman erilainen RIFX-tiedostotyyppi, jossa objektit ovat hieman eri järjestyksessä. Tässä fmt-lohko on monimutkaisempi ja on varsinaisesti WAVEFORMAT-objekti, jonka loppuun on liitetty lisätietoja. WAVEFORMAT on seuraavanlainen


Kenttä wFormatTag sisältää vakion WAVE_FORMAT_PCM, joka on yleensä määritelty (#define) ykköseksi. Tämä kertoo siis ohjelmalle, miten ääni on koodattu. nChannels-kentän arvo monoäänelle on 1 ja stereolle 2. nSamplesPerSec ilmoittaa alkuperäisen äänen näytteistysnopeuden. nAvgBytesPerSec äänitiedon tarvittavien tavujen keskimääräisen määrän sekuntia kohti. Kentän nBlockAlign arvo määrittää yhteen näytteeseen tarvittavien tavujen määrän. Näin esim. 8-bittinen näyte mahtuu yhteen tavuun ja 9-16-bittinen tarvitsee kaksi tavua.

Äänitiedosto määrittää näytteen bittien tarkan määrän WORD-objektina, joka on liitetty WAVEFORMAT-objektin perään. C-kielen merkinnöin rakenne on määritelty seuraavasti:

Käsiteltäessä WAVE-lohkon fmt-alalohkoa, käytetään todellisuudessa paremminkin PCMWAVEFORMAT- kuin WAVEFORMAT-objektia. Tämän kenttä wBitsPerSample määrittää näytteen bittien todellisen määrän.

Kaikilla RIFF-tiedostojen funktioilla on etuliite mmio ja niitä käytetään HMMIO-tyypin kahvojen (engl. handle) avulla. Seuraavassa RIFF-tiedoston avaaminen lukemista varten

MMIO_READ ilmoittaa funktiolle mmioOpen tiedoston avaamisen lukemista varten. Muita lippuja ovat mm.

Tiedoston avauksen onnistuttua mmioOpen palauttaa HMMIO-tyypin kahvan. Jos avaus epäonnistuu, palauttaa se arvon NULL. Äänitiedoston avauduttua haetaan sen WAVE-lohko seuraavasti:

MMSYSTEM.H-tiedostossa määritelty MMCKINFO-rakenne sisältää seuraavan informaation:

Lohkoon siirtymiseksi on asetettava MMCKINFOn ckid-kentän arvoksi paikallistettavan lohkon tyyppi. Tätä varten on olemassa makro mmioFOURCC. Tämän jälkeen kutsutaan funktiota mmioDescend, joka palauttaa nollan, jos lohko on paikallistettu. Tällöin mmioDescend-funktiolle välitettyyn MMCKINFO-objektiin on sijoitettu ko. tiedot. cksize-kenttä määrittää lohkon koon tavuina. Tätä arvoa on syytä käyttää aina tarkkaa määritystä varten. MMIO_FINDRIFF ohjaa mmioDescendiä hakemaan lohkoa, jonka tunnuksena on ID RIFF ja tyyppinä sille välitetyn MMCKINFOn ckid-kentän määrittämä tyyppi. Toinen vastaavanlainen objekti on MMIO_FINDCHUNK, joka hakee jotain määrättyä viipaletta. mmioClose-funktion kutsu on tärkeää, kun ollaan valmiita RIFF-tiedoston kahvan kanssa. Tämä vapauttaa HMMIO-objektiin liittyvät puskurit ja muut muistiobjektit (vrt. fclose).

Seuraavassa koodiesimerkkipätkässä siirtyminen WAVE-lohkon fmt-alalohkoon:

Tämän jälkeen PCMWAVEFORMAT-objekti luetaan fmt-lohkosta seuraavasti:

Luettavaan tiedostoon viitataan käyttämällä HMMIO-kahvaa ensimmäisenä parametrina mmioReadia kutsuttaessa. Toinen parametri on far- tai huge-osoitin oletettuun tietopuskuriin. Kolmas on luettavien tavujen määrää ilmoittava suuri kokonaisluku. Tämän tarkistaa mmioRead, joka palauttaa arvonaan lukemiensa tavujen todellisen määrän. Tämän jälkeen siirrytään ulos lohkosta ja valmistaudutaan lukemaan seuraava funktio.

Ensimmäinen mmioAscendin parametri on HMMIO-kahva, jota käytetään viitattaessa luettavaan tiedostoon, toinen on osoitin poistumista vastaavaan lohkoon ja kolmas ns. 'valeparametri'.

Seuraavassa jatkoa koodiin, jota tarvitaan äänitiedoston muistiinlukemisessa:

Tämän jälkeen luettu RIFF-tiedosto voidaan sulkea funktiolla

Tässä esiteltyjen lisäksi erilaisia mmio-kutsuja on olemassa huomattavasti enemmän.



6.24. CCITT u-Law ja A-Law

CCITT u-Law (myy-) ja A-Law tiivistysmuodot tiivistävät 16-bittisen äänen 8-bittiseksi. Tulos vastaa laadultaan suunnilleen 12-bittistä ja on parempi kuin ADPCM. Tiivistys tapahtuu muuttamalla lineaariset numeroarvot logaritmisiksi. Muunnoksen lähdekoodi u-Law -muunnoksissa toimitetaan osina nk. SOX-paketteja, jotka ovat helposti otettavissa erilleen muiden sovellusten käyttöön. Virallinen määrittely on CCITT-standardi G.711.

Samankaltainen u-Lawin kanssa on toinen enkoodausmenetelmä, A-Law. Tämä on käytössä eurooppalaisena puhelinstandardina. UNIX-työasemille tuki on heikompi.

u-Law on muotoa

A-Law on muotoa

tai

u:lle käytetään arvoja 100 ja 255, A:lle 87.6, mp on piikkitiedon arvo (engl. Peak message) ja m on kvantisointiarvo. Kaavat yksinkertaistuvat, jos asetetaan x=m/mp ja sgn(x)=sgn(m), jolloin -1<=x<=1. Muunnos u-Lawista A-Lawiin on järjetöntä, jos muunnoksessa esiintyy kvantisointivirheitä.

8-bittisen u-Lawin resoluutio (erottelukyky) on samaa suuruusluokkaa kuin 12-bittisellä lineaarisella ja vastaavasti 12-bittisellä u-Lawilla sama kuin 16-bittisellä lineaarisella koodauksella. Vertailua on tarkasteltu taulukossa 11.


Laite/Koodaus Maksimitason resoluutio Alemman tason resoluutio Käyttötarkoitus
8-bittinen lineaarinen 8 8
8-bittinen u-Law 6 12 Käytetään digitaalipuhelimissa
12-bittinen lineaarinen 12 12
12-bittinen u-Law 10 16 Käytetään DATissa
16-bittinen lineaarinen 16 16

Taulukko 11. u-law -vertailu.

Lisätietoa on saatavissa lähteistä [La] ja [TSC].


6.25. AVR

AVR (Audio Visual Research) on Macintosh-ympäristössä käytössä oleva, usein kaupalliseen toimintaan liittyvä tiedostoformaatti. Tällä formaatilla on 128 tavun mittainen otsakekenttä, josta esimerkki seuraavassa:



6.26. Amiga MOD (.mod ja .nst)

MOD-tiedostot (tiedostotarkenteet .mod ja .nst) tulivat kuuluisiksi Amigan äänitiedostoina ja siirtyivät sieltä muihinkin järjestelmiin. MIDI-tiedostojen lailla MODit (ja johdannaiset, kuten S3M, 669 ja MADx) varastoivat musiikkitietoa. Toisin kuin MIDI, MODit ja niiden sukulaiset eivät varastoi ainoastaan nuottitietoa, vaan myös digitoidut näytteet instrumenteista. Toisin kuin kunnollinen MIDI-toisto tarvitsee wavetable-äänikortin PC:ssä tai QuickTimen Macintoshissa, jokainen kone saa aikaan hyvätasoista MOD-musiikkia kohtalaisella 8-bittisellä äänikortilla. Kuitenkin MODien sisältäessä myös digitoituja näytteitä, on ne huomattavasti tiedostokooltaan MIDI-tiedostoja suurempia.

MOD-tiedostot ovat musiikkitiedostoja, jotka sisältävät kaksi osaa: digitoitujen näytteiden pankin ja kuvailevaa sekvenssointitietoa siitä, milloin ja miten soittaa näytteitä. Joustavan systeeminsä ja tarjolla olevien MOD-tiedostojen määrän, sekä täten suunnattoman suuren suosionsa, ansiosta MOD-player -sovelluksia on tarjolla useimmille laitesysteemeille.

MOD-tiedostojen näytteet ovat 'raakoja', 8-bittisiä, merkittyjä ja otsakekentättömiä, lineaarista digitaalista dataa. Siinä voi olla jopa 31 erilaista näytettä, joista jokainen voi olla pituudeltaan jopa 128K (yleensä pienempiä, luokkaa 10K-60K). Vanhempi MOD-formaatti salli vain 15 näytettä, mutta näitä ei ole enää juurikaan liikkeellä. MOD-sämpleille ei ole varsinaista standardinäytteistystaajuutta.

MOD-tiedostojen informaatio alkaa neljällä raidalla informaatiota siitä, mitkä, milloin, kuinka pitkään ja millä taajuudella näytteet tulee esittää. Tämä tarkoittaa sitä, että tiedostossa voi olla 31:n eri digitoidun instrumentin soundit. Näistä neljän äänen yhdenaikainen toistaminen on mahdollista. Tämä mahdollistaa laajan skaalan orkestraatiomahdollisuuksia aina puhe-, laulu- ja omien instrumenttien näytteitä myöten, toki laitteistosta ja ohjelmistosta riippuen. Omien näytteiden käyttömahdollisuus instrumenttina onkin omalta osaltaan syynä MODien suosioon.

Edellämainittu 15 instrumentin MOD on muutoin samanlainen kuin 31 instrumentin, mutta muutama eroavaisuus formaateista löytyy:

MOD-ohjelmistoja on saatavissa ainakin seuraavasti:

ProTracker-formaattiesimerkki on nähtävissä liitteessä 3.


6.27. Sample Vision (.smp)

Sample Vision on laitekohtainen äänimuoto (tiedostotarkennin .smp). Se on yleensä ammattimuusikoiden käyttämä ohjelma näytteiden lähettämiseen ja vastaanottamiseen PC-koneeseen MIDI-liitännän kautta. Järjestelmässä on mahdollista muokata useita parametreja (kuten luuppikohtia, korkeutta, aikakompressiota ja näytetaajuutta). Järjestelmän tukena ovat 'sämplerit' (erillisiä soitinmoduleja), joita ovat mm. AKAI (S700, X700, S900, S950, S612, S1000/ 1100), Casio (FZ1, FZ10M, FZ20M), Ensoniq (EPS, EPS16, ASR10, Mirage), Emu (Emax, EmaxII), Korg (DSS1, DSM1, T workstation), Oberheim DPX-1, Peavey DPM-3, Roland (S10, MKS100, S220, S50, S330, S550), Sequential Circuits Prophet 2000/2002, Sample Dump Standard devices ja Yamaha TX16W.

smp-formaatti eriteltynä näyttää seuraavalta:

Käytännön kokeet ovat havainnollistaneet, että Sample Vision kirjoittaa tiedostoon vain seitsemän 'luuppistruktuuria' (silmukkarakennetta) kahdeksan väitetyn sijaan.


6.28. Tandy Deskmate (.snd, .sng)

Tandyn .snd-tiedostot tulevat Sound.pdm:ltä, joka on ohjelma DeskMate-ympäristön yksityisessä hallinnassa. Ne ovat käytettävissä Music.pdm:ssä, joka kehittää musiikkimoduleita (.sng-tiedosto). DeskMate-ääni ja -musiikki vaativat Tandyn äänipiirin. Ohjelmistoihin, jotka kääntävät RIFF WAVEn tai muun 8-bittisen PCM-formaatin .snd-muotoon, kuuluu mm. Conv2snd-niminen ohjelma (Kenneth Udut). Uudemmat ohjelman versiot tulevat Snd2wav:n kera, joka muuttaa snd:n RIFF WAVEksi. On syytä huomioida, että myös NeXTillä ja Mac/PC:llä on omat snd-formaattinsa.

DeskMaten snd-tiedostoja on kahden tyyppisiä: äänitiedostoja ja instrumenttitiedostoja. Molemmat sisältävät 8-bittisiä merkitsemättömiä PCM-näytteitä.

Äänitiedostot ovat yksinkertaisempia. Ne ovat sekalainen valikoima näytetiedostoja, joissa on kiinteänmittainen otsakekenttä sisältäen äänen nimen, äänitystaajuuden ja äänen pituuden. Äänet voivat olla äänitettyjä 5500 Hz:n, 11kHz:n tai 22kHz:n taajuudella.

Instrumenttitiedostot sisältävät Music.pdm:n käyttämiä näytteitä sekä taajuus- ja 'luuppitietoa' edustamassa instrumenttia. Instrumenttitiedostoissa on valmistauduttu iskuihin (engl. attack), vaimennuksiin (engl. sustain) ja 'häivennyksiin' (engl. decay) useammilla näytteillä, jotka sisältävät eri liitetaajuuksia ollakseen Music.pdm:n käytössä mallintamaan soittimia eri taajuuksilla. Yhteen instrumenttitiedostoon voidaan sisällyttää 16 eri nuottia (16:lla eri näytteellä). Tiedostot on aina tallennettu 11kHz:llä. Sekä ääni- että instrumenttitiedostoja on myös mahdollista kompressoida.

DeskMaten snd-tiedoston otsikkokenttä muodostuu 16 tavusta aiemmin mainittua informaatiota, jonka jälkeen tulee yksi tai useampia 28 tavun nuottitallenteita. Näyteinformaatio, joka voi olla kompressoitua, seuraa otsakekenttää. Tiedosto-ote Deskmaten snd-tiedostosta on nähtävissä liitteessä 6.


6.29. Sound Designer(II)/Audio Media

Tämän formaatin SOX (Sound Exchange) -tyyppi on Sd2f. Se on muokattavissa mm. SoundHack -ohjelmalla. Sovellusohjelmia tietokonejärjestelmille on saatavissa mm. Macintoshille SoundHack.


6.30. AVI

AVI-äänimuoto (tiedostotarkennin .avi) on videoiden ääniraita, joka voidaan erottaa erikseen muokattavaksi ja tallennettavaksi.


6.31. Dialogic ADPCM

Dialogic ADPCM on laitekohtainen äänimuoto (tiedostotarkennin .vox). Sovellusohjelmia on olemassa.


6.32. Muita formaatteja

Edellä on mainittu tärkeimmät ja pitkäikäisimmät äänen tiedostoformaatit ja koodausjärjestelmät. Näiden lisäksi on olemassa suuri joukko muita, harvinaisempia tai erikoisempia laite- tai sovelluskohtaisia, audioformaatteja. Näitä on listattuna seuraavassa.

Näiden lisäksi on suuri määrä eri ohjelmavalmistajien sovellusten määräämiä projektiformaatteja sovellusohjelmilta, kuten mm. Cakewalk ja Sound Forge (tiedostotarkentimina mm. .wrk, .mff, .rmi, .bun, .sds, .sfr, .dig ja .sd). Nämä sisältävät sovelluksen omaa tietoa. Näitä formaatteja ei tarkastella lähemmin tässä esitelmässä.

Kuva 7. Esimerkki erään korkeatasoisen äänenmuokkausohjelman näytteestä.


6.33. Sovellusohjelmista

Audiotyöskentelyn sovellusohjelmia on olemassa tänä päivänä paljon. Osa on 'vanhoja hyviä' ja osa uudempia, moninaisemmilla 'lisäherkuilla' varustettuja. Sovellusohjelmia on esiteltyinä erikseen joidenkin audioformaattien kohdalla luvussa 6. Useat sovellukset ovat hyvin laaja-alaisia, ts. pystyvät käsittelemään useamman eri valmistajan formaatteja.

Liitteessä 2 on esimerkkinä informaatiota Antexin sovelluksesta NuWave Digital Audio Editor for Compressed Files.


7. Digitaaliaudioprotokollat

Toisinaan digitaalinen audioinformaatio tulee siirtää laitteiden välillä reaaliajassa. Yleisimmin vastaantulevat tiedonsiirtoprotokollat (esim. multimediatuotteet) ovat AES/EBU, SDIF-2 ja S/PDIF.

AES/EBU on Audio Engineering Societyn ja European Broadcast Unionin kehittämä. Se on yleisin käytössä oleva järjestelmä ammattimaisissa digitaaliaudiosysteemeissä. Se on 2-kanavainen RS-422 liittymä käyttäen balansoituja linjoja ja joko XLR- tai D-sub -liittimiä.

SDIF-2 (Sony Digital Interface Format) on kehitetty videonauhapohjaisiin PCM-äänityslaitteisiin. Systeemi käyttää 75-ohmisia balansoituja linjoja BNC-liittimillä.

S/PDIF (Sony/Philips Digital Interface Format) kehitettiin yhteistyössä Sonyn ja Philipsin kesken. Keskeisintä on, että se on balansoimaton versio AES/EBU -protokollasta käyttäen joko RCA- tai kuituoptisia liitäntöjä. S/PDIFia käytetään mm. DAT-nauhureissa, CD-soittimissa ja F1-koodaajissa (DATin edeltäjä, videostandardin tyyppinen järjestelmä) digitaalisin liitännöin.



8. Audioformaatit ohjelmoinnissa

Tässä luvussa tarkastellaan hieman äänitiedostojen sisältöä ohjelmoijan kannalta. Multimediaohjelmointia on mahdollista toteuttaa useilla eri ohjelmistoilla, mutta tässä kirjoitelmassa tullaan keskittymään lähinnä Windows-pohjaiseen, C- ja Visual Basic -ohjelmointiin. Luku perustuu pääasiassa lähteisiin [Mi 91], [Gu 94] ja [Ri 94].


8.1 Windowsin äänenkäsittelyn pääfunktioluokista

Luvussa tarkastellaan Windows-ympäristössä käsiteltävään ääneen, sekä äänen ohjelmointiin liittyviä tekijöitä. Tämä luku perustuu pitkälti Steve Rimmerin kirjoittamaan kirjaan Windows-multimediaohjelmointi [Ri 94], sekä Microsoftin kirjaan Multimedia Programmer's Reference [Mi 91]. Tähän lukuun olennaisesti, esimerkiksi Windowsin WAVE-ohjelmointiin liittyviä asioita käsitellään myös RIFF WAVEn yhteydessä luvussa 6.23.

Windowsissa on neljä äänitiedostojen käsittelyn pääfunktioluokkaa. Ne ovat vaativuusjärjestyksessä

Tästä voidaan huomata Windowsin luonne tarjota useita vaihtoehtoja saman tuloksen saavuttamiseksi.


8.1.1 MessageBeep

MessageBeep-funktio ja sen parametrit ovat tarpeellisten laajennusten kanssa (äänikortti ja Windows-ajurit) käytettävissä. Parametrit on määritetty vakioina, kuten MB_OK ja MB_ICONASTERISK. Varsinaiset näillä parametreilla soitettavat äänet on määritelty WIN.INI -tiedoston [sounds]-osassa wav-tiedostotarkenteisina. Näin määritelty äänitiedosto voidaan soittaa esim. komennolla

Huomioitavaa on järjestelmän rajallisuus. Jos esimerkiksi määrittelyissä tai laitteistossa on puutteita, on tuloksena pelkkä 'piip'-signaali.


8.1.2 sndPlaySound

sndPlaySound on alkeellisin funktio ohjelman alaisuudessa soitettavia äänitiedostoja varten. Määrittelyinä sille riittää äänitiedoston nimi polkuineen tai osoitin muistissa olevaan äänitiedostoon. Funktiolla on kaksi parametria: osoitin ja joukko lippuja. Tästä esimerkkinä seuraava funktio, joka soittaa tiedoston Hello.wav:

Jos tiedostoa Hello.wav ei löydy, soittaa funktio WIN.INIssä määritellyn SystemDefault -äänen. sndPlaySound-funktio palauttaa arvon True, jos se onnistuu soittamaan jotain. Muuten funktio palauttaa arvon False.

Toinen sndPlaySound-funktion parametri antaa useita ohjausmahdollisuuksia. Tämä voidaan muodostaa useiden lippujen välisillä OR-operaatioilla. Yleisin näistä on edellisessä funktioesimerkissä esitetty SND_ASYNC, jonka vaikutuksesta sndPlaySound-funktio palauttaa ohjauksen sitä kutsuneelle ohjelmalle heti soiton alustamisen jälkeen. Näin ääni voi soida taustalla sovelluksen ryhtyessä muihin tehtäviin. Jos halutaan suorittaa soitto loppuun ennen vuoron siirtämistä, suoritetaan se lipulla SND_SYNC.

Muita funktioon liittyviä lippuja ovat seuraavat:

Äänitiedostojen suuren koon vuoksi ne ladataan aina globaaliin muistiin. Näitä on käsiteltävä huge-osoittimien avulla largen sijaan. HPSTR on LPSTR:n large-osoitinta vastaava huge-osoitin. HPSTR-objekteihin voidaan lisätä suuria kokonaislukuja (engl. long integers) ja näin osoittaa yli 64 kt:n kokoisia objekteja. HPSTR-objekti vastaa samaa kuin char huge *. Lisäksi on olemassa vastaavia tiedostofunktioita suurten tiedostojen käsittelyyn. Usean _lread-funktion kutsun sijaan voidaan koko tiedosto ladata yhdellä _hread-funktion kutsulla.

sndPlaySound-funktion käytöllä vaikuttaisi olevan rajoituksensa niin, että funktion kanssa tulisi käyttää suhteellisen pieniä äänitiedostoja. Tämä riippuu kuitenkin järjestelmän käytössä olevan muistin määrästä.


8.1.3 MCI-kutsut

Sovellusten yhteydessä yleensä paras tulos saavutetaan käyttämällä Windowsin MCI-kutsuja (Media Control Interface), joiden avulla voidaan ohjata eri laitteita. Laitteista huolehtivat laiteohjaimet, joita voidaan hallita Windowsin ohjauspaneelista. Kuitenkaan näistä kutsuista kaikki eivät sovellu kaikille laitteille.

MCI:tä voidaan käsitellä kahdella tavalla: korkean tason liittymällä välitetään tekstijonoja komentotulkille, joka suorittaa varsinaiset MCI-kutsut (työlästä C-kielessä), tai kutsua suoraan MCI-funktioita. Funktioiden suoran kutsun yhteydessä tärkeitä kutsuja ovat

MCI:tä käytettäessä äänitiedostojen soittamiseksi täytyy järjestelmän avata ääniajuri MCI-laitteena, noutaa soitettava äänitiedosto ja käynnistää sen soittaminen. sndPlaySound-funktiosta poiketen MCI palauttaa viestin soiton päättymisestä sitä kutsuneen ohjelman valittuun ikkunaan, jonka jälkeen voi päättää 'seuraavan siirron'. Useita äänitiedostoja yhteen liitettäessä voidaan ensimmäisen äänen loppumisesta ilmoittavalla viestillä aloittaa seuraavan äänen soittaminen.

Seuraavassa esimerkissä avataan MCI:n äänilaite tavanomaisella mciSendCommand-funktion kutsulla:

Funktion mciSendCommand ensimmäinen parametri on laitteen ID-numero (tässä laitteen avaaminen antaa sen). Toinen parametri ilmoittaa tekemisen tarkoituksen, eli tässä avaamisen. Kolmas parametri on joukko lippuja, jotka kertovat, mitä neljännen parametrin osia täytyy katsoa. Neljäs parametri on osoitin parametrirakenteeseen. Joillakin MCI-laitteilla on esimerkiksi omia parametriobjektejaan. Funktion tarvitsemat tiedot vaaditun laitteen avaamiseen antaa sille välitetty objekti MCI_OPEN_PARMS. Tässä tapauksessa sen pitää tietää avattava ajuri (waveaudio) ja soitettava äänitiedosto (path). Kaiken sujuessa hyvin palautetaan nolla. Jos vikatilanteessa välitetään mciSendCommandin palauttama arvo mciGetErrorStringille, palauttaa se numerotiedon sijaan selkokielisen kuvauksen viasta. Tätä funktiota kutsutaan

jossa rtrn on mciSendCommand-funktion palauttama virhekoodi, b on ilmoituksen sisältävä merkkijonopuskuri ja STRINGSIZE on puskurin koko (voi olla ennalta määrätty: #define). DoMessage-funktio näyttää ilmoituksen (voi hoitaa myös MessageBox-funktiolla).

Kun laite on avattu, soitetaan tiedosto esimerkiksi seuraavasti:

MCI_OPEN_PARMS mciplay;
mciplay.dwCallback=(DWORD)hwnd;
if((rtrn=mciSendCommand(id,MCI_PLAY,MCI_NOTIFY,

MCI_PLAY_PARMS-objektin alkiolle dwCallback sijoitetaan mciSendCommandille välitettävä arvo. Se on kahva HWND, joka ilmoittaa MCI:lle äänen soiton loppumisesta kertovan ilmoituksen lähetyksen paikan. Kolmannen parametrin MCI_NOTIFY-lippu kertoo MCI:lle, että dwCallback on sallittu kahva ja että funktio voi käyttää sitä.

MCI-laitteet täytyy sulkea käytön jälkeen. Sulkeminen hoidetaan toisella mciSendCommand-kutsulla

Vastaaminen MCI:n lähettämään sulkemista koskevaan MM_MCINOTIFY-ilmoitukseen tapahtuu seuraavankaltaisella switch-lauseen sisältävällä käsittelyrutiinilla:

jossa lParam-arvon tiedoissa on suljettavan laitteen laitenumero. Ilmoituksen lähettämistä koskevista funktioista SendMessage lähettää viestin eikä palaudu ennen ilmoituksen käsittelyä. Vastaavasti PostMessage sijoittaa ilmoituksen ilmoitusjonoon ja palautuu välittömästi sallien ilmoituksen käsittelyn sen siirtyessä jonon päähän.


8.1.4 WaveOut-kutsut

WaveOut-funktioilla voidaan ohjata äänen soittamista laitteiston toimivuuden sallimissa rajoissa. Näitä kutsuja käyttävän äänifunktion rakenne on samankaltainen kuin MCI-kutsuihin perustuvilla funktioilla. WaveOut-funktiot kuitenkin edellyttävät äänen lataamista muistiin. Tämä vaatii RIFF-tiedostojen yksityiskohtaista käsittelyä.

WaveOut-kutsuilla voidaan säätää soitettavan äänen parametrejä, kuten äänen voimakkuutta, toistonopeutta ja korkeutta. Kaikki riippuu loppujen lopuksi äänikortin tukemista piirteistä.

Seuraavassa esimerkissä oletetaan äänitiedoston olevan ladattuna muistiin, johon viitataan waveHandle-kahvalla. Ensin suoritetaan äänilaitteen avaaminen.

WaveOutOpen avaa ääntä soittavan laitteen. Tämän toisena parametrina täytyy olla joko avattavan äänilaitteen laitenumero tai vakio WAVE_MAPPER (käskee Windowsin hakea äänikortin). Useamman laitteen (esim. äänikortin) sisältävässä järjestelmässä laitteet (niiden lukumäärä) voidaan testata seuraavasti:

Tähän liittyvällä waveOutGetDevCaps-funktiolla saadaan palautettua määrätyn äänilaitteen tiedot. waveOutOpenille välitetty parametri waveformat on far-osoitin PCMWAVEOUT-objektiin ja parametri hwnd on kahva ikkunaan, johon waveOutOpen voi lähettää ilmoituksia. CALLBACK_WINDOW-lippu ilmoittaa ikkunakahvan välityksestä. Toinen mahdollisuus on lähettää funktio-osoite lipulla CALLBACK_FUNCTION (funktio dynaamisessa linkkikirjastossa). 0L markkeeraa käytettävää instanssikahvaa siinä tapauksessa, että callback on funktio. Onnistuessaan waveOutOpen sijoittaa ensimmäisen parametrinsa osoittamaan HWAVEOUT-objektiin avatun laitteen tiedot.

WaveOut-funktiot palauttavat MCI-kutsujen tapaan arvon nolla, kun kaikki sujuu hyvin. waveOutGetErrorText palauttaa selväkielisen virheilmoituksen epäonnistumisesta. Se voidaan kirjoittaa seuraavasti:

Äänen soittamiseksi täytyy valmistaa otsikkotieto. Tämä tapahtuu waveOutPrepareHeaderillä otsikkona WAVEHDR-objekti. waveOut haluaa jostakin syystä tämän sijaitsevan globaalissa muistissa, joten se täytyy varata dynaamisesti seuraavalla tavalla:

Äänitiedot lukitaan seuraavasti:

WAVEHDR sisältää joukon alustettavia kenttiä. waveOutille täytyy kertoa äänitietojen sijainti ja määrä. Tietojen koko on mmioDescendin palauttaman lohkon koko siirryttäessä soitettavan äänitiedoston data-lohkoon. waveOutPrepareHeaderin kutsu on

Varsinkin virhetilanteessa on tärkeää sulkea waveOut-laite. waveOutUnprepareHeader vapauttaa aiemmin varatun muistin.

Äänitiedoston varsinainen soittaminen suoritetaan funktiolla waveOutWrite, jonka kutsu on muotoa:

waveOutWriten palauttaessa arvon nolla, ääni on soimassa. MCI-kutsujen lailla waveOut-ajuri lähettää ilmoituksen soittamisen päättymisestä waveOutOpenissa ilmoitettuun ikkunaan.

waveOut-kutsun aloittaman äänen päättyessä lähetetään ilmoitus MM_WOM_DONE waveOutOpenissa ilmoitettuun ikkunaan. Ilmoituskäsittelijän case-lause on seuraavantyyppinen:

Globaalin muistipuskurin tulee olla kelvollinen niin kauan, kun ääni soi. Sitä ei voi siis varata uudelleen ennen MM_WOM_DONE ilmoituksen lähettämistä. Käytännössä kahvasta kannattaa järjestää globaali muuttuja. Funktion waveOutReset kutsu lopettaa äänen ja lähettää ilmoituksen mm. MM_WAVE_DONE-puskurin vapauttamiseksi.

Yksi syy äänitiedostojen soittamiseen waveOut-kutsujen avulla MCI:n sijaan on mahdollisuus toistoon liittyvien parametrien muokkauksen mahdollisuus. Esimerkiksi äänen muokkaus onnistuu funktiolla

jossa id on laitenumero ja volume on pitkä kokonaisluku. Sanan alaosa sisältää vasemman ja yläosa oikean kanavan äänenvoimakkuuden (0-65535 tai FFFFH). Kaikki äänikortit eivät kuitenkaan tue tätä funktiota. Huomioitavaa on myös, ettei funktiolla suoritetut äänenvoimakkuuden muutokset palaudu alkuarvoihin.

WAVE_MAPPERia käytettäessä laite ei todennäköisesti ole tiedossa, mutta tämä on hoidettavissa laitenumeron HWAVEOUTista selvittävällä waveOutGetID-käskyllä seuraavasti:

Onnistumisesta funktio palauttaa arvon nolla.


8.1.5 Äänilaitteiden tiedot

Äänilaitteiden tietojen perusteella nähdään tukeeko laite tiettyjä ominaisuuksia. Äänilaitteen tiedot haetaan funktiolla waveOutGetDevCaps (tallennetaan WAVEOUTCAPS-objektiin) seuraavasti:

Funktion waveoutGetDevCaps ensimmäisenä parametrina on haluttu laitenumero. Tämän avulla järjestelmässä on mahdollista käyttää useampaakin äänikorttia. Toinen parametri on far-osoitin WAVEOUTCAPS-objektiin ja kolmantena toisen parametrin osoittaman objektin koko. WAVEOUTCAPSin sisältö näyttää seuraavanlaiselta:

Tässä wMid ilmoittaa laitteen valmistajan. Nämä ovat määriteltyjä vakioita, jotka löytyvät MMREG.H:sta (löytyy Microsoftin kehitinpaketeista). Nämä on määritelty (#define) siten että mm. MM_MICROSOFTin arvo on luku 1, MM_CREATIVEn luku 2 jne.

wPid-kenttä määrittelee erinäisiä vakioita sen mukaan, mikä on wMidin arvo. Esimerkiksi MM_MICROSOFTille se on seuraavankaltainen:

vDriverVersion määrittää ajurin version numeron ja pzName ilmoittaa äänikortin valmistajan nimen. dwFormats on lippujoukko, joka ilmoittaa tiedostomuodot, joita äänikortin on mahdollista tuottaa. Tämä määrittely tapahtuu tyyliin

wChannels kertoo järjestelmän kanavien lukumäärän (yleensä 1 tai 2). dwSupport määrittää, voiko käytettävällä kortilla säätää äänen toistoparametrejä esim. seuraavasti:


8.1.6 MIDI ohjelmoinnissa

Tässä luvussa tarkastellaan hieman MIDI-tiedostojen käyttämistä ohjelmointiympäristössä. Luku perustuu lähinnä lähteisiin [Ri 94] ja [Ro 90].

MIDI-tiedostot koostuvat eri mittaisista lohkoista tai viipaleista (engl. chunk) samantapaisesti kuin RIFF-tiedostotkin. MIDI-tiedostossa on vain kahdentyyppisiä lohkoja niin, että jokainen tiedosto sisältää yhden otsikkolohkon (engl. header chunk) ja yhden tai useampia raitalohkoja (track chunk). Jokainen viipale alkaa neljän tavun ASCII-tyyppitunnuksella ja 32 bitin pituusluvulla, joka ilmoittaa viipaleen jatkon pituuden. Raitaviipale on jonomaisesti esitettyä MIDI-tietoa, jossa kohteena on enintään 16 kanavaa. Otsakeviipaleen tunnus on MThd ja raitaviipaleen MTrk.

Otsikkolohkon rakenne on seuraavanlainen:

Otsakeviipale koostuu tyyppitunnuksesta (MThd), pituudesta (length), muodosta (format), raitojen lukumäärästä (ntrks, tracks), ja jaosta (division). Edellä mainitut tekijät tarkemmin ilmaistuina sisältävät seuraavanlaista tietoa:

Esitetään ohjelmointiesimerkki tiedostojen käsittelystä C-kielen stream-funktiolla.

Seuraavaksi funktio lukee MIDI-tiedostosta 16-bittisen sanan:

Vaihtoehtoisesti voidaan myös lukea pitkä kokonaisluku

Edellämainittu funktio lukee MIDI-tiedostosta vaihtuvanpituisen luvun. Niiden avulla voidaan tilaa tuhlaamatta tallentaa arvoja, joissa on tarvittava määrä tavuja:

Raitaviipaleeseen tallennetaan varsinainen musiikkitieto. Jokainen raitaviipale sisältää erilaisten tapahtumien jonon. Tapahtumiin on aina liitetty 'delta-aika'-luku. Raitaviipale on muotoa

Raitaviipale, jossa tunnus (MTrk), pituus (length), MTrk tapahtuma, MTrk ... jne, jossa

Tapahtumatyypit ovat seuraavat:

80H    kytke nuotti päälle,
90H    kytke nuotti pois päältä,
A0H    määritä kanavan kosketinpaine,
B0H    määritä kanavan laitteistoparametri,
C0H    vaihda kanavan ääntä,
D0H    aseta kanavan jälkikosketus,
E0H    aseta kanavan sävelkorkeuskynnys,
F7H    järjestelmän erikoisviestit yms. sekä
FFH    Metatapahtuma (MIDI-tiedoston ylläpito).

Metatapahtuman FFH-tavun jälkeen tuleva tavu määrittää sen, mitä tapahtuman tiedot koskevat. Metatapahtumia on seuraavanlaisia:

00H    toisteen järjestysnumero,
01H    tekstitapahtuma,
02H    tekijänoikeustiedot,
03H    sekvenssin tai raidan nimi,
04H    soittimen nimi,
05H    laulun sanat,
06H    kirjanmerkki (sidotaan vastaavaan nuottiin),
07H    viite (tekstin loppukohta),
20H    MIDI-kanavan etuliite (channel prefix),
2FH    raidan loppu,
51H    tempoasetus,
54H    SMPTE-siirtymä (ilmoittaa alkamishetken),
58H    tahtilaji,
59H    etumerkintä tai sävellaji, sekä
7FH    toistimen erikoistietoa, esim. sekvensserin tiedot.


8.1.7 Visual Basic

Tässä luvussa käsitellään muutaman esimerkin avulla Visual Basicin äänitiedostojen käsittelyyn liittyviä perusasioita. Tarkastelun lähtökohtana on erityinen TegoSoft Inc.:n TEGOSND.DLL-tiedosto, joka sisältää esimerkeissä käytettäviä funktioita. Luku perustuu lähteeseen [Gu 94].

Proseduuri WAV-tiedostojen avaamiseksi on Form_Load(), sisältäen muuttujan FileToPlay:

Parametri frmPlay.hWnd on kahva ja parametri FileToPlay soitettava tiedosto. Funktio palauttaa kokonaisluvun, joka on tunnistenumero tiedostolle. Negatiivinen arvo kertoo avauksen epäonnistumisesta.

Klikattaessa Visual Basicilla tehdyn soittimen oletettua Play-painiketta proseduuri cmdPlay_Click()suorittaa tiedoston soittamisen. Tämä palauttaa arvonaan kokonaisluvun.

Funktion sp_PlaySnd ensimmäinen parametri on muuttuja Form_Load-proseduurista, toinen ja kolmas ovat erikseen määritettyjä vakioita, jotka määräävät soiton välin tavuina.

Tiedoston sulkemiseksi voidaan suorittaa proseduuri Form_Unload(), joka näyttää seuraavalta:


8.1.8 Muuta informaatiota

Lisää informaatiota audio-ohjelmoinnista on saatavilla mm. seuraavista kohteista


8.2 WWW-sovellukset

Tässä luvussa perehdytään hieman Internet-verkon ja WWW-sivujen yhteyteen kuuluvaan äänitiedostojen käyttöön.

8.2.1 MIDI-tiedostot

MIDI-tiedoston lisäämiseksi WWW-sivulle voidaan kirjoittaa seuraavanlainen HTML-koodi:

jossa

Vanhemmille versioille Internet Explorerista koodi on seuraavanlainen:

<BGSOUND SRC="XXXX.mid" LOOP=INFINITE>

Jos tiedosto toistetaan ainoastaan kerran, asetetaan LOOP=0.

8.2.2 WAV-, AU- JA AIFF -tyyppiset audiotiedostot

Jos WWW-sivulle halutaan lisätä jokin vuoton (non-streaming) audiotiedosto, kuten WAV-, AU- tai AIFF-tiedosto, lisätään HTML-koodiin seuraavaa:

jossa

Vanhemmille versioille Internet Explorerista kirjoitetaan seuraavaa

Jos tiedosto toistetaan ainoastaan kerran, asetetaan LOOP=0.


9. Yhteenveto

Tässä seminaarityössä on pyritty tuomaan esille mahdollisimman laaja katsaus digitaalisen äänen tuottamiseen ja tallentamiseen tietotekniikkaympäristössä, sekä sitä hieman sivuavissa järjestelmissä. Erillisistä osa-alueista on varmasti olemassa hyvinkin tarkkaa erikoistietoa, mutta tähän kirjoitelmaan on kerätty lähinnä pääseikkoja mahdollisimman monesta eri tapauksesta.

Kirjoitelma on tästä vielä laajennettavissa huomattavasti varsinkin tekniikan huiman kehitysvauhdin vuoksi. On selvää, ettei kirjoitelmaan ole välttämättä saatu viimeisintä tietoa, mutta edustettuna on mahdollisimman laaja otanta mahdollisimman uudesta tiedosta.


10. Lähteet ja lisämateriaalia

[Af 97] Bennett, Eric, The Cross-Platform Page: Audio Formats, Cornell University, URL: <http://www.mcad.edu/guests/ericb/xplat.aud.html>, 01.05.1997.

[AFF1 95] Universiteit Utrecht, Department of Computer Science, FAQ, Audio File Formats (part 1 of 2), URL: <http://www.cs.ruu.nl/wais/html/na-dir/audio-fmts/part1.html>, 15.08.1997.

[AFF2 95] Universiteit Utrecht, Department of Computer Science, FAQ, Audio File Formats (part 2 of 2), URL: <http://www.cs.ruu.nl/wais/html/na-dir/audio-fmts/part2.html>, 15.08.1997.

[An 97] Antex Electronics, "Audio Interchange Formats and Standards", URL: <http://www.antex.com/audioformats.html>, 30.06.1997.

[Ant 97] Antex - Software And Audio Development Kits, URL: <http://www.antex.com/software.html>, 31.05.1997.

[Ba 85] Bartee Thomas C.,"Digital computer fundamentals", Sixth edition, McGraw-Hill book company, 1985.

[Bu 93] Burger Jeff, "The Desktop Multimedia Bible", Addison-Wesley Publishing Company, 1993.

[Coas 96] Yli-Hietanen, Jari, Tampere University of Technology, Coding of audio signals, URL: <http://www.cs.tut.fi/~ypsilon/80545/CodingOfAS.html>, 20.03.1996.

[Da 95] Davis Pan, "A Tutorial on MPEG/Audio Compression", IEEE Multimedia, 1995.

[El 94] Ellis Michael G., Sr., "Electronic filter analysis and synthesis", Artech house inc., 1994.

[Fda 97] Yli-Hietanen, Jari, Tampere University of Technology, Fundamentals of digital audio, URL: <http://www.cs.tut.fi/~ypsilon/80545/FundamentalsOfDA.html>, 25.04.1997.

[FIPS] US Federal Information Processing Standard 137/NATO-STANAG-4198 2400 bps linear prediction coder (LPC-10).

[Fr 97] Frequently Asked Questions about MPEG Audio Layer-3, URL: <http://www.iis.fhg.de/departs/amm/layer3/sw/index.html>, 14.07.1997.

[Fs1] Federal Standard 1016, Telecommunications: Analog to Digital Conversion of Radio Voice by 4,800 bit/ second Code Excited Linear Prediction (CELP).

[G.711 90] G.711 Pulse code modulation (PCM) of voice frequencies. Book Fasc. III.4: julkaistu kesäkuussa 1990.

[G.722 90] G.722 7 kHz audio-coding within 64 kbit/s. Blue Book Fasc. III.4: published June 1990.

[G.726a 91] G.726 40, 32, 24, 16 kbit/s adaptive differential pulse code modulation (ADPCM). Julkaistu huhtikuussa 1991 korvaamaan G.721 ja G.723.

[G.726A 95] G.726 A Extensions of Recommendation G.726 on 40, 32, 24, 16 kbit/s adaptive differential pulse code modulation for use with uniform-quantized input and output. Kesäkuu 1995.

[G.726III/G.727II 95] G.726 III/G.727 II Appendix III/II to Recommendation G.726/G.727 - Comparison of ADPCM algorithms. Toukokuu 1995.

[G.727a 91] G.727 5-, 4-, 3- and 2-bits/sample embedded adaptive differential pulse code modulation (ADPCM). Toukokuu 1991.

[G.727A 95] G.727 A Extensions of Recommendation G.727 on 5-, 4-, 3- and 2-bits/sample embedded adaptive differential pulse code modulation for use with uniform-quantized input and output. Kesäkuu 1995.

[G.728a 92] G.728 Coding of speech at 16 kbit/s using low-delay code excited linear prediction. Julk. joulukuussa 1992.

[Gu 94] Gurewich Ori, Gurewich Nathan, "Easy Multimedia, Sound & Video for the PC Crowd", Windcrest/McGraw-Hill, 1994.

[Ida 96] Yli-Hietanen, Jari, Tampere University of Technology, Introduction to digital audio, URL: <http://www.cs.tut.fi/~ypsilon/80545/IntroductionToDigital Audio.html>, 12.01.1996.

[IE] I-ETS 300 036 European digitial cellular communications system (phase 1): Full rate speech transcoding (GSM 06-10).

[ISO10743] ISO/IEC DIS 10743 Information technology -- Document processing and related communications -- Standard Music Description Language (SMDL).

[Ja 97] Jalonen Marko, "Radio Internetissä", Internet-kurssin harjoitustyö, 1997.

[Ko 93] Koski Arto & Oesch Klaus, "PC-multimedia", Kustannusosakeyhtiö Otava, 1993.

[La] Modern Digital and Analog Communication Systems, B.P.Lathi., 2nd ed. ISBN 0-03-027933-X.

[Mi 91] Microsoft Windows Multimedia Programmer's Reference, Microsoft Corporation, Microsoft Press, 1991.

[Pa 96] Partanen, Antti, "MPEG", Seminaariesitelmä 1996, TKK.

[Ri 94] Rimmer Steve, "Windows-multimediaohjelmointi", Pagina, Gummerus, Jyväskylä, 1994.

[Ro 90] Romanowski, Otto, "MIDI 1.0", Valtion painatuskeskus, 1990.

[SM 96] 13.3 Standard Module aifc, URL: <http://python.via.ecp.fr/doc/lib/node150.html>, 06.12.1996.

[St 97] Stroud's Index of 32-bit Apps by Category, URL: <http://papa.indstate.edu:8888/CWSApps/inx32.html>, 17.09.1997.

[Str 97] Stroud's Reviews for Audio Apps, URL: <http://cws.avalon.nf.ca/32audio-reviews.html>, 11.05.1997.

[SV 96] Strategic Visions, Katsaus audio- ja videosovelluksin verkossa, URL: <http://www.nettiradio.fi/ test/digi/audvid.htm>, 10.03.1996.

[T.419] ITU-T Recommendation T.419 (1995) | ISO/IEC 8613-9 (DIS) Information technology -- Open Document Architecture (ODA) and interchange format -- Audio content architectures.

[TSC] Transmission Systems for Communications, Fifth Edition, Bell Telephone Laboratories, Incorporated.

[Wab 97] Yli-Hietanen, Jari, Tampere University of Technology, Wideband audio coding, URL: <http://www.cs.tut.fi/~ypsilon/80545/WBACoding.html>, 01.04.1997.



Liitteet:

Liite 1. AIFC:n määrittelemiä funktioita.


Liite 2. Esimerkki Antexin NuWave Digital Audio Editorista.

Antex NuWave Digital Audio Editor for Compressed Files

When it comes to editing digital audio data two things are important. First is compatibility. With NuWAVE you are assured of compatibility of virtually any Windows audio file format - including several compressed file formats. The second is speed. NuWAVE was designed with simplicity and efficiency in mind. Because you can edit in real-time, you will find NuWAVE to be one of the easiest and fastest editors available. Edit Compressed Audio Files With NuWave Take advantage of editing in more efficient compressed file formats such as Dolby AC-2, MPEG Layer I&II, MS-ADPCM. Edit these fileslike any other. File format is completely transparent to NuWAVE and the user. NuWAVE allows you to avoid conversion delays and results in no generation loss.

Why edit compressed audio files? More and more broadcast facilities, multimedia developers, and interactive/on-line applications are using compressed files. Compressed files maximize audio and video quality at a limited bandwidth, demand less from a computer's CPU and take up less disk space than non-compressed files. The ability to edit these files is more efficient and allows editing of multiple formats within a single editor.

What is non-destructive editing? Non-destructive editing is a process that records all edits in an Edit Decision List (EDL). The actual audio files/clips are never altered. The EDL actually contains a list of all audio files to be used with information on when the file will play, how much of the clip to play, and all other characteristics of the file as directed by the NuWAVE editor.

Edit 8 and 16-Bit PCM .WAV Formats Virtually all Windows digital audio files formats (.WAV) files are fully editable with NuWAVE.

True Audio Scrubbing NuWAVE allows true reel-rocking type performance for fast and precise edit point location.

Non-Destructive EDL Based Digital Audio Editing NuWAVE never alters the original audio file. Instead it creates an edit decision list which instructs the editor how to compose and playback the edited version. This speeds the editing process plus it means your library of audio clips remains intact. You can use the same clip in a multitude of files. In addition, standalone composite files can also be created from the EDL.

Four-Track Real-time Operation Simultaneous, independent operation of two stereo (four mono) audio tracks is provided. (Compatible digital audio adapters are required to take advantage of this feature). All mixing, gain adjustments, and fades (in/out) are accomplished in real-time. This is possible due to the advanced capability of DSP-based Antex digital audio adapters. You never have to wait.

Intuitive Drag-and-Drop Interface NuWAVE is extremely simple to use. Editing is easily accomplished by dragging file "regions" and dropping them into place. Standard Windows features including Cut, Copy and Paste are fully supported.

Audio Region: Waveform Mode View and edit files in Waveform view. Cropping audio regions is as simple as dragging the region's handles while holding SHIFT down.

Audio Region: Gain Mode View and edit a region's gain contour by clicking on the region while holding the SHIFT key and then dragging the fade-in, fade-out and gain adjustment handles.

Recommended Hardware Requirements 486DX-33 or above 8 MB RAM Microsoft Windows 3.1 At least 10 MB of hard disk space available Microsoft Windows compatible audio card


Liite 3. ProTrackerin formaattiesimerkki

Liite 4. Esimerkkejä muutamista PCM-otsikkotietueista

/* ------------------------------------ NIST ---------------------------------
*
* 0: "NIST_1A"
* 8: data_location as ASCII representation of integer * (apparently always " 1024")
* 16: start of complicated header -- full details available upon request
*
* here's an example:
*
* NIST_1A
* 1024
* database_id -s5 TIMIT
* database_version -s3 1.0
* utterance_id -s8 aks0_sa1
* channel_count -i 1
* sample_count -i 63488
* sample_rate -i 16000
* sample_min -i -6967
*sample_max -i 7710
* sample_n_bytes -i 2
* sample_byte_format -s2 01
* sample_sig_bits -i 16
* end_head
*/
/* ------------------------------------ SNDT ---------------------------------
*
* this taken from sndrtool.c (sox-10):
* 0: "SOUND"
* 6: 0x1a
* 8-11: 0
* 12-15: nsamples
* 16-19: 0
* 20-23: nsamples
* 24-25: srate
* 26-27: 0
* 28-29: 10
* 30-31: 4
* 32-> : <filename> "- File created by Sound Exchange"
* .->95: 0
*/
/* ------------------------------------ ESPS ---------------------------------
*
* 16: 0x00006a1a or 0x1a6a0000
* 136: if not 0, chans + format = 32-bit float
* 144: if not 0, chans + format = 16-bit linear
*
* from AFgetInfoES.c:
*
* Bytes Type Contents
* 8 -> 11 -- Header size (bytes)
* 12 -> 15 int Sampled data record size
* 16 -> 19 int File identifier
* 40 -> 65 char File creation date
* 124 -> 127 int Number of samples (may indicate zero)
* 132 -> 135 int Number of doubles in a data record
* 136 -> 139 int Number of floats in a data record
* 140 -> 143 int Number of longs in a data record
* 144 -> 147 int Number of shorts in a data record
* 148 -> 151 int Number of chars in a data record
* 160 -> 167 char User name
* 333 -> H-1 -- Generic header items, including "record_freq"
* {followed by a "double8"}
* H -> ... -- Audio data
*/
/* ------------------------------------ INRS ---------------------------------
*
* from AFgetInfoIN.c:
*
* INRS-Telecommunications audio file:
* Bytes Type Contents
* 0 -> 3 float Sampling Frequency (VAX float format)
* 6 -> 25 char Creation time (e.g. Jun 12 16:52:50 1990)
* 26 -> 29 int Number of speech samples in the file
* The data in an INRS-Telecommunications audio file is in 16-bit integer
* format.
/* old Mus10, SAM formats, just for completeness
*
* These were used for sound data on the PDP-10s at SAIL and CCRMA in the
* 70's and 80's.
* The word length was 36-bits.

Liite 5. Uusi formaatti lähes kaikkiin CCRMA-ohjelmistoihin.

* WD 0 - '525252525252
* WD 1 - Clock rate in Hz (PDP-10 36-bit floating point)
* WD 2 - #samples per word,,pack-code
* (has # samples per word in LH, pack-code in RH)
* 0 for 12-bit fixed point
* 1 for 18-bit fixed point
* 2 for 9-bit floating point incremental
* 3 for 36-bit floating point
* 4 for 16-bit sambox fixed point, right justified
* 5 for 20-bit sambox fixed point
* 6 for 20-bit right-adjusted fixed point (sambox SAT format)
* 7 for 16-bit fixed point, left justified
* N>9 for N bit bytes in ILDB format
* WD 3 - # channels
* 1 for MONO
* 2 for STEREO
* 4 for QUAD
* WD 4 - Maximum amplitude (if known)
* is a floating point number
* is zero if not known
* is maximum magnitude (abs value) of signal
* WD 5 number of Sambox ticks per pass
* (inverse of Sambox clock rate, sort of)
* WD 6 - Total #samples in file.
* If 0 then #wds_in_file*#samps_per_wd assumed.
* WD 7 - Block size (if any). 0 means sound is not blocked.
* WDs '10-'77 Reserved for EDSND usage
* WDs '100-'177 Text description of file (in ASCIZ format)
*
*
* "Old" format
*
* WD 0 - '525252525252
* WD 1 - Clock rate
* has code in LH, actual INTEGER rate in RH
* code=0 for 6.4Kc (or anything else)
* =1 for 12.8Kc, =2 for 25.6Kc, =3 for 51.2Kc
* =5 for 102.4Kc, =6 for 204.8Kc
* WD 2 - pack
* 0 for 12 bit
* 1 for 16 bit (18 bit)
* 2 for 9 bit floating point incremental
* 3 for 36-bit floating point
* N>9 for N bit bytes in ILDB format
* has # samples per word in LH.
*WD 3 - # channels
* 1 for MONO
* 2 for STEREO
* 4 for QUAD
* WD 4 - Maximum amplitude (if known)
* is a floating point number
* is zero if not known
* is maximum magnitude (abs value) of signal
* WDs 5-77 Reserved for future expansion
* WDs 100-177 Text description of file (in ASCIZ format)
*/

Liite 6. DeskMaten snd-tiedostoformaattiesimerkki.

DeskMate .snd File Format - Fixed Header ----------------------------------------
offset size what ------ ---- ----
0 byte 1Ah (.snd ID byte)
1 byte Compression code: 0 = no compression; 1 = music compression; 2 = sound compression.
2 byte Number of notes in the instrument file. 1 if sound file.
3 byte Instrument number. 0 if sound file; 0FFh if instrument file with no number set. Valid instrument numbers in an instrument file are 1 to 32. Use this field to distinguish a sound file from an instrument file.
4 10 bytes Sound or instrument name. Filled on the right with nulls if less than 10 characters.
0Eh word Sampling rate in samples per second. Note that although a sampling rate other than 5500, 11000 and 22000 can be entered here, Sound.pdm will not actually play at other rates.
10h variable Note records begin, 28 bytes each. Number of records given in byte 2 above.
DeskMate .snd File Format - Note Record ---------------------------------------
0 byte Pitch of the note: 1 = A1 in American Standard Pitch; 2 = A#1; etc. A1 is lowest note allowed; highest note allowed is B6 (3Fh). Sound files have 0FFh here; so do instrument files with no note set. Note that Sound.pdm does not designate notes in the standard manner to the user. Although A1 and B6 in Sound.pdm are the same as A1 and B6 in standard pitch, Sound.pdm starts octaves at A rather than at C (as is standard). Thus, middle C, C4 in standard pitch, is C3 in Sound.pdm.
1 byte Sound files, and instrument files with no pitch set, have 0 here. If the pitch is set, this byte is 0FFh.
2 2 bytes Range of the note, first byte is lower limit, second is higher limit. Byte encoding as for offset 0 (i.e., 01h to 3Fh). Sound files have FF FF here; so do instrument files with no range set.
4 dword Offset in the file where samples for this note begin (zero-relative), after compression if that was done.
8 dword If compressed, the length of the compressed data in the file for this note. Uncompressed files have 0 here.
0Ch 4 bytes Unknown. Set to zero.
10h dword Number of samples in the note, after decompression if necessary.
14h dword Number of sample at start of sustain region for the note, relative to the first (zeroth) sample of the note. For sound files, or if sustain is not set, this field is 0.
18h dword Number of sample at end of sustain region for the note, relative to the first (zeroth) sample of the note. For sound files, or if sustain is not set, this field is 0.