teejuht
1. Sissejuhatus
2. Kompilleerimine
3. Alsa Utils
4. Seadmed
5. Tähelepanuväärsed programmid
Esmalt olgu üteldud, et minu kogemus põhineb helikaardil Creative Labs SoundBlaste PCI 64 kiviga es1370 ja see kogemus on positiivne :). Kernel 2.0.36. Sealt ma soundi asju üldse ei puutunud. Ainult enablesin module support'i.
Isegi positiivsem kui sama kaardi kasutamine kerneli 2.2.3 driveritega:
seal ta kah töötab aga ainult ühe Pulse Coded Modulation
(PCM) seadmega (/dev/pcm0).
Esmalt hankige endale viimased versioonid ftp://alsa.jcu.cz/pub (või http://alsa.jcu.cz) ning installeerige toodud järjekorras:
1. alsa-driver-0.3.0-pre4.tar.gz
2. alsa-lib-0.3.0pre4.tar.gz
3. alsa-utils-0.3.0-pre3.tar.gz
Mis toimub on:
1. alsa-driver-0.3.0-pre4.tar.gz
Installeeritakse driverid st. kerneli moodulid. seal tuleb teha kindlasti ka './snddevices' mis lood /dev/'i alsa'le spetsiifilised nö. seadmed.
2. alsa-lib-0.3.0pre4.tar.gz
library'd: need on asjad mis oskavad suhelda alsa driveritega; nendega aga suhtlevad omakorda programmid mis kasutaja käivitab.
bash# ldd /usr/bin/arecord
libasound.so.0 => /usr/lib/libasound.so.0 (0x4000b000)
libc.so.5 => /lib/libc.so.5 (0x40014000)
bash# ldd /usr/bin/aplay
libasound.so.0 => /usr/lib/libasound.so.0 (0x4000b000)
libc.so.5 => /lib/libc.so.5 (0x40014000)
bash# ldd /usr/bin/alsamixer
libasound.so.0 => /usr/lib/libasound.so.0 (0x4000b000)
libncurses.so.4 => /usr/lib/libncurses.so.4 (0x40014000)
libc.so.5 => /lib/libc.so.5 (0x40053000)
bash# ldd /usr/bin/amixer
libasound.so.0 => /usr/lib/libasound.so.0 (0x4000b000)
libg++.so.27 => /usr/lib/libg++.so.27 (0x40014000)
libstdc++.so.27 => /usr/lib/libstdc++.so.27 (0x4004c000)
libm.so.5 => /lib/libm.so.5 (0x4007e000)
libc.so.5 => /lib/libc.so.5 (0x40086000)
bash#
3. alsa-utils-0.3.0-pre3.tar.gz
Enne kui saab asju kasutama hakata on vaja moodulid laadida:
Installeerimise aja tõstetakse nad /lib/modules/misc'ssi teiste moodulite juurde. Ja nad laaditakse modprobega. Mina teen seda rc.localist nii:
modprobe snd-audiopci
modprobe snd-pcm1-oss
alsactl restore
/usr/local/bin/mpg123 /etc/rc.d/pala.mp3
> /dev/null 2>&1 &
ning lsmod'iga vaadates avaneb järgmine pilt:
bash# lsmod
Module:
#pages: Used by:
ppp
5 0
serial
7 1
slhc
2 [ppp] 0
snd-pcm1-oss
4 0
snd-audiopci
1 1
snd-ens1370
3 [snd-audiopci] 0
snd-ac97-codec
3 [snd-ens1370] 0
snd-pcm1
4 [snd-pcm1-oss snd-ens1370]
0
snd-midi
4 [snd-audiopci snd-ens1370]
0
snd-mixer
4 [snd-pcm1-oss snd-audiopci snd-ens1370 snd-ac97-codec]
1
snd-pcm
3 [snd-pcm1-oss snd-audiopci snd-pcm1]
0
snd
9 [snd-pcm1-oss snd-audiopci snd-ens1370 snd-ac97-codec
snd-pcm1 snd-midisnd-mixer snd-pcm] 1
bash#
Tõsi, neid ridu vaadates jääb küll mulje, et midi't
peaks saama mängida ka kuidagi otse ilma timidity'ta. Aga midi'id
teevad nii kui nii enamasti nii ebaloomulikku häält et neid vist
harva mängitakse. Vähemalt minu kogemuse ja arvamuse põhjal
:)
Heliga manipuleerimine
komplekti kuulub viis programmi (amixer, alsamixer, alsactl, aplay,
arecord):
mikser
alsamixer
amixer (käsurea variant, kasutada nt. scriptidest)
Need on vastavalt ncurses ja käsurea utiliit seadmaks erinevaid helikaardi seadmeid (
sisendid välismaailmast:
line in - sisend nt. magnetofoni või grammofoni väljundist.
Sinna võib pista tolle juhtme mis muidu läheb võimendisse.
mic - mikrofon
sisendid arvuti poolt:
cd - eeldab, et ühendate juhtme CD ja helikaardi vahel (ta tuleb
panna helikaardi pistikupesadepoolsemaisse pistikupessa, vist)
pcm0 - sellesse võib saata nt. mpg123 või aplay väljundi:
bash# mpg123 -a /dev/dsp heli.mp3
pcm1 - samaaegselt võib veel panna teise pala mängima
bash# mpg123 -a /dev/adsp heli.mp3
Miksriga on see lugu, et vaikimisi on kõik valjused maha keeratud. Nii, et värskelt alsa asjad peale pannes ning pala mängides te ei kuule jah midagi. Kasutage mixerit!
Näpunäited:
alsamixer on umbes selline:
AlsaMixer v0.9
Card: Ensoniq AudioPCI
Chip Asahi Kasei AK4531
RECORD
MM
L R
##
##
## ##
# ##
## ##
##
##
##
## ##
# ##
## ##
##
##
##
## ##
## ## ##
## ##
##
##
## ##
## ## ##
## ##
##
##
## ##
## ## ##
## ##
##
##
## ##
## ## ##
## ##
##
##
## ##
## ## ##
## ##
##
##
## ##
## ##
## ##
## ##
##
##
## ##
## ##
## ##
## ##
##
##
## ##
## ##
## ##
## ##
92<>92
92<>92 92<>92
92<>92 92<>92 92<>82
92<>92 92<>92 92<>92 92<>92
master
master m pcm
pcm1 line-in mic
cd mono1 mono2
aux a
Ja kuidas selline settting on seatud?
- nooltega (ehk n ja p) saab liikuda erinevate, ütleme soundi kaardi
seadete vahel
- kummagi ja mõlema kanali valjust saab muuta q, w, e ja z,
x, c 'ga.
- tühikuga saab 'toggle'da kas seade lindistab või mitte
- m'ga saab toggleda seadme mute'iks (tummaks)
- . ja , ga saab toggleda kumbagi kanalit mute'ks
kui miski seade lindistama panna siis asi salvestub kui käivitada 'arecord':
bash # arecord -w -m -t 10 file.wav
- w - tuleb nn. wav fail
-m sample rate 44100 kHz 16 bit PCM
- t aeg 10 sekundit
aga vaadake ise ka man'i ja -h'ga help'i!.
alsactl
see on selline asi, et võimaldab salvestada käesolevaid settinguid korraga ja neid peale keerata. Settinguid saab salvestada vaikimisi faili '/etc/asound.conf'
bash# alsactl store
ja lugeda nii:
bash# alsactl restore
viimane on tark panna koos soundi driveri moodulite laadimisega rc faili
(nt. rc.local).
wav'i de taasesitamine:
bash# aplay -d /dev/dsp nimi.wav
Nendega on minu jaoks keeruline lugu :)
Aga põhimõtteliselt ei kasutata enam /dev/snd'd. Olulised on alsa puhul kataloogist /proc/asound allapoole jäävad asjad. Minu taedmist mööda minu es1370 kiviga kaardil pole mixerit peal. Niisiis, saan mängida kokkuvõttes ainult pcm (pulse coded modulation asju) mitte nt. midi'sid.
Ja nii toimub mpg123'ga mp3'sid mängides see, et programm dekodeerib mp3'le lahti pcm signaaliks mis saadetakse seadmesse /dev/dsp.
Või aplay'ga .wav'i taasesitades läheb info samuti /dev/dso'sse.
Ja programm timidity konverteerib midi'i faili käigult pcm'iks (st. wav'iks) ja saadetakse samasse seadmesse.
nii ka nsmod .mod failide jaoks.
5. Tähelpanuväärsed programmid
Kas nad nii vabalt alsa driveritega koos töötavad pole kindel, aga neist peaks teadlik olema:
sox - The Swiss Army Knife of Sound Formats
wavplay
nsmod
mpg123 (o'ga - assembleris suuresti)
Ja mida ma ise tegin:
Oli probleem: teha vinüülplaatidest lood mp3'deks ja kirjutada cd'le. Siis hea kuulata, ei ole vaja pidevalt plaate vahetada kuigi ma pole just teab mis muusikamees. Ikkagi.
Olles salvestanud kolm plaati arecordiga lugu haaval ära (nb! cdparanoia extractib CD-ROM'ilt; grammofon on line-in'is) tuli tüdimus.
Ja siin ma tegin nii, et salvestasin mitu plaati üheks suureks failiks (ca 1 GB) PCM signaaliga (see on vist sama mis wav).
Ning hakkasin seada sellise C jupiga lõikuma:
#include <stdio.h>
struct rec
{
char x;
};
main(int argc, char *argv[])
{
int i,j, b;
FILE *f1, *f2;
struct rec r;
b=atoi(argv[2]);
f1=fopen(argv[1],"r");
f2=fopen(argv[3],"w");
fseek(f1,b,SEEK_END);
fseek(f2,0,SEEK_SET);
while (fread(&r,sizeof(struct
rec),1,f1) == 1)
{
fwrite(&r,sizeof(struct
rec),1,f2);
}
fclose(f1);
fclose(f2);
}
See konkreetne asi töötab nii, et
bash# loikaja.b orig.wav -1000000 lugu.1.wav
ning tulemusena on orig.wav'ist viimane 1MB kopeeritud faili lugu.1.wav
Eks tule asja natuke veel sättida.
Ja muidugi tekib küsimus, et kuidas teada millise baidi peal on esimese ja teise loo vahe ja millise peal teise ja kolmanda vahe jne.
Seda saab kindlaks teha kui seda orig.wav'i soxiga kuulata. sox'i sourcesse on vaja kirjutada 'ühte kohta juurde
'printf("tere%d", arv)'
ning ta trükib mängimise ajal ekraanile numbreid. Lugude pauside ajal on vaja need üles märkida ja siinneid kasutada.
See koht kuhu see print kirjutada tuleb on selline:
sox.c
funktsioon process {}
wav'i faili ime on vist see, et teada võib tükeldada nii kuis süda ihkab (tõenäoliselt paarisarvuliselt või neljaga jaguvate pikkuste pealt) ning kui saata /dev/dsp'sse, siis ikka töötab.
wav'idel on 44 B suurune päis mille tähendust pole ma saanud kindalks teha. Kuid eks te ise proovige, abiks on programm 'od'.
gggg