Prvnim typem jsou karty kompatibilni se SoundBlastrem. Karty jsou standartne vybaveny FM cipem alespon verze OPL-2. Zvuk vznika PCM - pulsni modulaci - zvuk je sniman/prehravan v tzv. samplech (8 nebo 16 bit ) a ty jsou pote ruznou rychlosti ( 5000-44100 Hz, mono/stereo ) prehravany. FM cip slouzi k vytvareni zvuku pomoci frekvencni modulace - mame dva (OPL-2) nebo ctyri( OPL-3) operatory nejcasteji se sinovym prubehem, ktere bud scitame nebo jeden druhym moduluje.
Na podobnem principu pracuji karty Gravis. Rozdil spociva v tom, ze maji vlastni pamet, ve ktere jsou ulozeny samply nastroju a ty dokazi prehravat s ruznymi efekty ve 32 kanalech. Jsou take schopny nahravani/prehravani jako SB. Jsou vhodne jako prehravajici midi zarizeni.
Poslednim typem jsou MIDI karty - slouzi k pripojeni MIDI zarizeni bud pro vstup nebo vystup. To znamena, ze pocitac muze jednak zaznamenavat prehravanou skladbu a zaroven ji prehravat. V podstate SB i Gravis maji MIDI konektory.
SB v2.0 vylepsena SB v1.0
SB pro - ( 8 bit stereo/mono, 44100Hz(mono), 22050Hz(stereo) )
SB 16 - 8/16 bit stereo/mono, 44100Hz, 2x DMA 8,16
SB 16ASP - jako SB16 + HW komprese ALaw/MuLaw/IMA ADPCM, zatim jsem napsal jen prvni alpha verzi
SB AWE32 - jako SB 16 ASP
ProAudio Spectrum 16 - karta podobna SB 16 + OPL-3
Gravis Ultrasound, Gravis MAX
ruzne MIDI karty vetsinou kompatibilni s MPU 401
- ovladace karet se musi pridavat do jadra - viz 'make config'
prehravace formatu mod, s3m,...
tracker prehravac amiga mod souboru ( pres /dev/dsp - viz pozdeji )
s3mod prehravac protracker s3m souboru a mod souboru ( pres /dev/dsp )
prehravace midi
mp, xmp mp je konzolova, xmp X Windows verze. Prehrava midi soubory pres /dev/sequencer. Muze pouzivat bud Gravis, FM (OPL-2/3) nebo external synthesizer. Pro FM syntezu potrebuje banky standartnich MIDI nastroju (std.sb, std.o3) a bubnu (drums.sb,drums.o3). Pro Gravise vyzaduje patche nastroju a bubnu (std.gus,drums.gus) dodavane s kartou. Ovladani je velice snadne. Pod X Windows je lepsi nastaveni parametru.
timidity prehravac, ktery pracuje na principu Gravise - z nasemplovanych nastroju vyrabi vysledny signal a ten bud uklada do soubodu ve formaty WAV nebo prehrava pres /dev/dsp.
ostatni
Svgafft - zobrazuje frekvencni spektrum signalu, potrebuje svgalib nebo existuje verze i do X ( zatim jsem ji nevidel ).
sod - prehravac, pracujici jako timidity, ale prehrava vlastni typ souboru
rawseq - docela dobra hracka - jako sod
maplay - prehravac mpeg sound formatu
ad - prehravac formatu adagio - prevadi i do mid formatu
sox - program na prevod
rsynth - program prevadejici psany text na rec
speak - jako rsynth, ale trochu horsi
ogi - rozpoznavani reci - jeste jsem to nestacil rozchodit (:-")
sox - program na prevadeni zvukovych formatu mezi sebou a provadeni ruznych effektu na nich
Mixery novejsi karty ( SB pro, SB16, Gravis, ... ) maji tzv mixer - dovoluje nastavovat hlasitosti vstupnich/vystupnich linek, urcovat zdroj nahravani.
konzolove mixery
cam, aumixer - ovladni pomoci kurzorovych klaves + zapinani nahravacich kanalu
X Windows mixery
xmix, xmixer - vyzkousejte si je
/dev/sndstat - provedte cat /dev/sndstat a uvidite info o aktualne nainstalovanych kartach
/dev/dsp - zarizeni ke PCM prehravani/nahravani
/dev/audio - jako /dev/dsp ale misto PCM samplu prichazeji Mu Law samply
/dev/mixer - zarizeni k ovladani mixeru
/dev/midi - slouzi jako nejjednodusi MIDI zarizeni dovoluje primo komunikovat s primojenym midi zarizenim
/dev/sequencer - MIDI zarizeji mnohem inteligentnejsi nez /dev/midi, dovoluje rozdelit prehravani vice zarizeni vlozenych do systemu
Pokud je v systemu vice zarizeni pak jsou na dalsich minor cislech, ktera se uvadeji za vlastnim jmenem ( napr. /dev/midi01 ).
Na zacatku se pomoci prikazu open otevre nami pozadovane zarizeni a pak se pomoci ioctl volani nastavuji parametry zarizeni a prikazy write/read provadi presun dat do/z karty. Vsechny info cerpany z linux/soundcard.h a zdrojaku jadra.
/dev/dsp
Nejjednodusim uzitim je toto: 'cat /dev/dsp > sample.raw' a dokud neprerusime tak se ukladaji samply do souboru sample.raw. Vzdy, kdyz se zarizeni otevira, tak se inicializuje na mono,8 bit, 8000 Hz. Pak soubor prehrajeme takto: 'cat sample.raw >/dev/dsp'.
A ted na urovni C
int dsp = open("/dev/dsp", O_RDWR );
ioctl( dsp, SNDCTL_DSP_RESET, NULL )- resetuje kartu
ioctl( dsp, SNDCTL_DSP_SYNC, NULL )- pocka do ukonceni prave probihajici operace
ioctl( dsp, SNDCTL_DSP_SPEED, int *speed )nastavi rychlost na speed a do speed pak ulozi skutecne nastavenou hodnotu
ioctl( dsp, SNDCTL_DSP_STEREO, int *stereo )- stereo = 0/1, vrati ve stereo skutecne nastavenou hodnotu
ioctl( dsp, SNDCTL_DSP_GETFMTS, int *afmts )- vrati bitmapu podporovanych audio formatu:
AFMT_MU_LAW - Mu Law - logaritmicka komprese 16->8, uzivaji Sun spark
AFMT_A_LAW - A Law podobna Mu Law
AFMT_IMA_ADPCM - z 16 bit dela 4 bity
AFMT_U8 - unsigned 8 bit sample
AFMT_S16_LE - little endien signed 16 bit sample
AFMT_S16_BE - big endien signed 16 bit sample
AFMT_S8 - signed 8 bit sample
AFMT_U16_LE - little endien unsigned 16 bit sample
AFMT_U16_BE - big endien unsigned 16 bit sample
ioctl( dsp, SNDCTL_DSP_SETFMT, int *afmt )- nastavi ( precte ) aktualni audio format a vrati skutecne nastaveny ( pokud afmt = AFMT_QUERY tak se vrati aktualni format )
dale pro /dev/dsp ioctl prikazu existuji synonyma jiz uvedenych prikazu - viz linux/soundcard.h
/dev/audio
- vse jako pro /dev/dsp, ale je inicializovano na audio format Mu Law. Pokud ho karta nepodporuje ( SNDCTL_DSP_GETFMTS ) tak je sw emulovano.
/dev/mixer
Existuje nekolik zarizeni, na ktere se odkazujeme pomoci jejich bitovych masek:
SOUND_MASK_VOLUME - hlasitost na vystupu
SOUND_MASK_BASS - basy na vystupu
SOUND_MASK_TREBLE - vysky na vystupu
SOUND_MASK_SYNTH - hlasitos synth
SOUND_MASK_PCM - hlasitost PCM
SOUND_MASK_SPEAKER - hl. pc speakru
SOUND_MASK_LINE - hl. line in
SOUND_MASK_MIC - hl. mic
SOUND_MASK_CD - hl. CD vstupu
SOUND_MASK_IMIX - recording monitor
SOUND_MASK_ALTPCM - druhe PCM zarizeni
SOUND_MASK_RECLEV - zaznamova hlasitost
ioctl( mixer, MIXER_READ(dev), int *volume )- dev je SOUND_MASK_?????, do volume se pak ulozi hlasitost pozadovaneho zarizeni a to takto - do 1. byte se ulozi levy kanal ( 0-100 ) a do 2. byte se ulozi pravy kanal ( 0 - 100 ).
ioctl( mixer, SOUND_MIXER_READ_RECSRC, int *recsrc )- do recsrc ulozi bitovou masku aktualniho nastaveni zaznamovych zarizeni.
ioctl( mixer, SOUND_MIXER_READ_DEVMASK, int *devices )- do devices ulozi bitovou masku vsech mixerem podporovanych zarizeni.
ioctl( mixer, SOUND_MIXER_READ_RECMASK, int *maxrec )- do maxrec da bit. masku vsech zarizeni, ze kterych je mozno nahravat.
ioctl( mixer, SOUND_MIXER_READ_STEREODEVS, int *strdev )- do strdev da vsechna zarizeni schopna sterea.
ioctl( mixer, SOUND_MIXER_READ_CAPS, int *cap )- do cap da schopnost mixeru - bitovou maskou, zatim jen SOUND_CAP_EXCL_INPUT - pokud je nastavena tak lze nahravat jen z jednoho zarizeni najednou.
ioctl( mixer, MIXER_WRITE(dev), int *volume )- jako MIXER_READ, jen nastavuje hlasitosti.
/dev/midi, /dev/sequencer
- programovat tyto zarizeni bez hlubsi znalosti MIDI protokolu a nejakeho MIDI zarizeni je docela nezazivne a malo muzikantu pouziva Linux :-((. Vsechny ioctl prikazy jsou popsany v linux/soundcard.h a mnoho z nich uz primo nazvem rika, co delaji.
/dev/sequencer umoznuje inicializovat jak FM synth tak Gravis pomoci ruznych patchu.
Vsechny poznatky jsou cerpany ze zdrojaku jadra, vlastnich zkusenosti a nahodnych poznamek na ruznych mistech.
Zminovane programy lze stahnout z kazdeho ftp serveru, ktery mirroruje sunsite, napr ftp.muni.cz/pub/UNIX/linux/apps/sound.