# Spørgsmål og svar

Dette afsnit besvarer nogle spørgsmål som ofte stilles om &arts;.

Generelle spørgsmål

Støtter &kde; mit lydkort for lydafspilning?

&kde; bruger &arts; til at afspille lyd, og &arts; bruger driverne kernen for &Linux;, enten OSS eller ALSA (med emulering af OSS). Hvis dit lydkort enten understøttes af ALSA eller OSS og er rigtigt indstillet (dvs. alle andre &Linux;-programmer kan afspille lyd), kommer det til at virke. Der er dog nogle problemer med specifik hardware, læs afsnittet om hardwarespecifikke problemer hvis du har problemer med artsd på din maskine.

I mellemtiderne er støtte for diverse andre platforme også tilføjet. Her er en fuldstændig liste over hvordan den seneste version af &arts; kan afspille lyd. Hvis du har en platform som ikke understøttes, så overvej gerne at overføre &arts; til din platform.

&arts; metode for lyd-I/O | Kommentar
--- | ---
paud | Støtte for AIX personlige lydenhed (Personal Audio Device)
alsa | Linux ALSA-0.5 og ALSA-0.9 drivere
libaudioio | Støtte for det generelle LibAudioIO-bibliotek som virker på Solaris
nas | NAS lydserver, nyttig for X-terminaler med NAS-støtte
null | Lydenheden null, kasserer lyden uden at noget høres
oss | OSS (Open Sound System) støtte (virker på Linux, forskellige BSD-versioner og andre platforme med OSS-drivere installerede)
toss | Trådet OSS-støtte, som virker bedre i visse tilfælde når den almindelige OSS-støtte ikke virker godt
sgi | Støtte for SGI Direct Media for IRIX
sun | Solaris-støtte

Jeg kan ikke spille `wav`-filer med &artsd;!

Tjek at &artsd; er linket til `libaudiofile` (``ldd` artsd`). Hvis den ikke er det, så hent kdesupport, kompilér alt, og det vil virke.

Jeg hører lyd når jeg er logget på som root, men ingen andre brugere har lyd!

Tilladelserne for filen `/dev/dsp` påvirker hvilke brugere der har lyd. For at lade alle bruge den, gør sådan her:

- Log ind som root.

- Åbn et &konqueror;-vindue.

- Gå til mappen `/dev`.

- Klik på filen `dsp` med højre museknap, og vælg egenskaber.

- Klik på fanebladet Tilladelser.

- Markér Læs og Skriv i alle afsnit.

- Klik på O.k..

Du kan opnå samme virkning i et terminalvindue med kommandoen ``chmod` `666` /dev/dsp`.

For at begrænse adgangen af lyd til særlige brugere kan du bruge gruppetilladelser. For visse &Linux;-distributioner, for eksempel Debian/Potato, ejes `/dev/dsp` allerede af en gruppe som hedder audio, så alt du behøver gøre er at tilføje brugerne til denne gruppe.

Dette hjælper for &artsd;, men hvad med for &kmix;, &kmid;, &kscd;?

Der er forskellige andre enheder som sørger for funktioner som der skal være adgang til for multimedieprogrammer. Du kan behandle dem på samme måde, enten ved at gøre dem tilgængelige for alle, eller bruge grupper for at kontrollere adgangen. Her er en liste, som måske stadigvæk er ufuldstændig (og hvis der er flere enheder på formen `midi0`, `midi1`..., så er 0-versionen kun med):

- `/dev/admmidi0`

- `/dev/adsp0`

- `/dev/amidi0`

- `/dev/amixer0`

- `/dev/audio`

- `/dev/audio0`

- `/dev/cdrom`

- `/dev/dmfm0`

- `/dev/dmmidi0`

- `/dev/dsp`

- `/dev/dsp0`

- `/dev/midi0`

- `/dev/midi0`

- `/dev/midi00`

- `/dev/midi00`

- `/dev/mixer`

- `/dev/mixer0`

- `/dev/mpu401data`

- `/dev/mpu401stat`

- `/dev/music`

- `/dev/rmidi0`

- `/dev/rtc`

- `/dev/sequencer`

- `/dev/smpte0`

- `/dev/sndstat`

Hvad kan jeg gøre hvis artsd ikke starter eller bryder sammen når den kører?

Forsøg først at bruge standardindstillingerne i &kcontrol; (eller hvis du starter manuelt, angive ingen ekstra flag bortset fra eventuelt ``-F`10 `-S`4096` for latenstid). Særlig fuld dupleks virker formodentlig ikke med diverse drivere, så forsøg at deaktivere det.

En god måde at regne ud hvorfor &artsd; ikke starter (eller bryder sammen når den kørt) er at starte den manuelt. Åbn et &konsole;-vindue og skriv:

    % artsd -F10 -S4096
    >

Du kan også tilføje flaget `-l0`, som udskriver mere information om hvad der sker, sådan her:

    % artsd -l0 -F10 -S4096

Ved at gøre dette får du formodentlig nogen nyttig information om hvorfor den ikke startede. Eller hvis den bryder sammen mens noget særligt foregår, kan du gøre det og se hvordan den bryder sammen. Hvis du vil rapportere en fejl, kan et backtrace oprettet med `gdb` og/eller en `strace` hjælpe med til at finde problemet.

Kan jeg flytte &artsd; (flytte kompilerede filer til en anden mappe)?

Du kan ikke flytte &arts; helt perfekt. Problemet er at &artswrapper; har stedet for &artsd; indkompileret af sikkerhedsgrunde. Du kan imidlertid bruge `.mcoprc`-filen (TraderPath/ExtensionPath indgangene) til i det mindste at få en flyttet &artsd; til at finde sine komponenter. Se kapitlet om `.mcoprc`-filen for detaljer om hvordan man gør dette.

Kan jeg kompilere &arts; med gcc-3.0?

Et kort svar: nej, &arts; virker ikke hvis du kompilerer den med gcc-3.0.

Langt svar: i den officielle udgave af gcc-3.0, er der to fejl som påvirker &arts;. Det første problem med gcc-3.0, c++/2733, er ganske ufarligt (og har at gøre med problemer med asm-sætningen). Det gør at convert.cc ikke kan kompileres. Dette er rettet i gcc-3.0 CVS, og vil ikke være et problem med gcc-3.0.1 og senere. En måde at gå udenom problemet er også tilføjet i CVS-versionen af KDE/aRts.

Det andet problem med gcc-3.0, c++/3145 (som forårsager fejlagtig kodegenerering i visse tilfælde af multipel virtuel arv) er kritisk. Programmer som &artsd; bryder helt enkelt sammen når de startes hvis de er kompileret med gcc-3.0. Selvom visse fremskridt er gjort i gcc-3.0 grenen når dette skrives, bryder &artsd; stadigvæk vældigt ofte sammen, uforudsigeligt.

Hvilke programmer kører med &arts;?

Selvfølgelig så virker alle programmer som indgår i &kde; med &arts;. Dette omfatter:

- &noatun;

- &arts-builder;

- &aktion;

- &kmid;

- &kmidi;

- &kmix;

- &kscd;

- &kde;-spil såsom &kpoker; og &ktuberling;

Visse &kde;-programmer som endnu ikke indgår i &kde;-udgaver (f.eks. i kdenonbeta) understøtter også &arts;, inklusive:

- &brahms;

- Kaboodle

- Kdao

Følgende programmer som ikke hører til -&kde; er kendte for at virke med &arts;:

- xmms (med &arts;-plugin)

- Real Networks RealPlayer 8.0 (virker med &artsdsp;; indbygget &arts;-støtte overvejes)

Følgende programmer er kendte for ikke at virke med &arts;:

- ingen

Se også svarene på spørgsmålene i afsnittet om programmer som ikke understøtter &arts;.

Dette afsnit er ufuldstændigt. Hvis du har mere information om programmer som understøttes eller ej, så vær venlig at sende dem til forfatteren så at de kan tilføjes her.

Programmer som ikke understøtter &arts;

Så snart &kde; kører, så kan ingen andre programmer få adgang til mit lydkort!

Når &arts;-lydserveren som bruges af &kde; kører, bruger den lydenheden. Hvis serveren er i tomgang i 60 sekunder, går den i autosuspension og slipper enheden automatisk.

Du sagde at den går i autosuspension efter 60 sekunder, det gør den ikke for mig!

Hvis du starter artsd fra KDE's kontrolcenter, er det standardværdien at gå i autosuspension efter 60 sekunder. Hvis du starter artsd fra kommandolinjen skal du bruge flaget -s for at angive ventetilstandsværdien, ellers er det standardopførsel at lukke af for autosuspensionsfunktionen.

For øjeblikket går serveren ikke i autosuspension hvis fuld dupleks bruges. Luk af for fuld dupleks i kontrolcentret så går den i autosuspension. At lukke af for fuld dupleks er i almindelighed en god idé alligevel, hvis du kun bruger &arts; til at afspille lyd og ikke til at indspille.

Hvordan kan jeg køre gamle programmer som ikke understøtter &arts;?

Kør dem med &artsdsp;. Hvis du for eksempel normalt ville køre:

    % mpg123 foo.mp3

så brug i stedet:

    % artsdsp mpg123 foo.mp3

Dette sender lyduddata til &arts;. Denne metode kræver ikke nogen ændringer i programmet. Det er noget af et grimt fiks, og understøtter endnu ikke alle funktioner i lydkortsenheden, så visse programmer virker måske ikke.

Jeg kan ikke køre &artsdsp; med noget program. Den bryder altid sammen!

Du behøver en ny udgave af glibc-bilblioteket. &artsdsp; virker ikke tilforladeligt på visse ældre &Linux;-distributioner. For eksempel på Debian 2.1 (som er baseret på glibc 2.0) virker den ikke, mens den gør det på Debian 2.2 (som er baseret på glibc 2.1.3).

Er der teoretiske begrænsninger med visse programmer som forhindrer at de nogensinde kan virke med &artsdsp;?

Nej. Brugen &artsdsp; kan resultere i noget højere latenstider og CPU-brug end at bruge &arts; programmeringsgrænseflade direkte. Udover det, skal alle program som ikke virker anses som en fejl i &artsdsp;. Teknikken som bruges af &artsdsp; skal, hvis den er rigtigt implementeret, tillade hvert program at virke med den (inklusive store programmer såsom Quake 3).

Hvad kan jeg gøre hvis et program ikke virker med &artsdsp;?

Du kan vente på at &artsd; går i autosuspension eller bruge kommandoen ``artsshell` `suspend`` for at bede at servere om at gå i autosuspension. Du kommer kun til at kunne få serveren til at gå i autosuspension hvis intet &arts;-program bruger den for øjeblikket, og ingen &arts;-programmer kan køre mens serveren er i autosuspension.

Hvis serveren er optaget ser en grov men effektivt måde at slippe af med den sådan her ud:

    % killall artsd ; killall artswrapper
    Start nu dit eget program.
    % kcminit arts

Alle &arts;-programmer som kører lige nu kan bryde sammen, når du afslutter serveren.

Hvad gælder for programmer skrevet for &kde; 1.x?

Hvis du kører &kde; 1.x programmer, som afspiller lyd via lydserveren i &kde; 1, skal du køre kaudioserver for at det skal virke. Du kan starte kaudioserver på samme måde som andre programmer som ikke understøtter &arts;:

    % artsdsp kaudioserver

Du skal have installeret kaudioserver (fra samme kilde hvor du skaffede &kde; 1.x programmerne). Den hører til &kde; 1.x, ikke &kde; 2.

Hvad gælder for programmer som bruger Enlightened Sound Daemon, ESD?

Dette problem ligner tilfældet med kaudioserver. Sådanne programmer kræver en esd-server som kører. Du kan starte `esd` via &artsdsp;, og alle programmer som understøtter ESD vil så virke godt, sådan her:

    % artsdsp esd

Nyere versioner af aRts ( >= 1.2.0) kan også bruge Enlightened Sound Daemon i stedet for direkte adgang til lydkortet. På kommandolinjen kan du bruge flaget -a, på følgende måde

    % artsd -a esd

til at få understøttelse af ESD. I stedet for, i KDE, kan du bruge kontrolcentret til at indstille artsd til at bruge ESD, via Lyd -> Lydserver -> Lyd I/O.

Latenstid

Ind imellem hører jeg korte pauser når jeg lytter til musik. Er dette en fejl?

Dette er formodentlig ikke en fejl, men forårsages af det faktum at &Linux; kernen ikke er særlig god til realtidsskemalægning. Der er situationer hvor &arts; ikke kan følge med i afspilningen. Du kan dog aktivere realtidsrettigheder (via kontrolcentret), og bruge en stor latenstidsindstilling (såsom 250 ms eller så stor som muligt), hvilket bør forbedre situationen.

Hvad er effekten af svarstidsindstillingen?

Hjælpeteksten for denne indstilling i kontrolcentret kan være forvirrende. En lavere værdi betyder at &arts; reagerer hurtigere på ydre begivenheder (dvs. tiden det tager mellem et vindue lukkes og lyden afspilles af &artsd;). Den kommer også til at bruge flere CPU-ressourcer og det vil være mere sandsynligt med pauser i lyden.

Er der noget andet jeg kan gøre for at undgå pauser?

For brugere af IDE-enheder, kan man bruge kommandoen `hdparm` til at indstille din IDE-enhed til at bruge DMA-tilstand. Et advarselsord: Dette virker ikke med alle slags hardware, og kan forårsage at man skal lave en hardware-nulstilling, eller i sjældne tilfælde, tab af data. Læs dokumentationen for kommandoen `hdparm` for flere detaljer. Jeg har brugt følgende kommando med heldigt resultat:

    % hdparm -c1 -d1 -k1 -K1 /dev/hda

Du skal køre dette efter hver boot, så måske vil du tilføje det i et opstartsscript for systemet (hvordan man gør dette er specifikt for hver distribution, på Debian &Linux; tilføjes det oftest i `/etc/rc.boot`).

Realtidsprioritet synes ikke at have nogen virkning for mig?

Kontrollér at artswrapper virkelig er installeret suid root, som det er meningen at den skal være. Mange distributioner (for eksempel SuSE7.x) gør ikke dette. Du kan kontrollere det med: ls -l $(which artswrapper). Godt:

    % ls -l $(which artswrapper)
    -rwsr-xr-x    1 root     root         4556 Sep 24 18:05 /opt/kde2/bin/artswrapper

Dårligt:

    % ls -l $(which artswrapper)
    -rwxr-xr-x    1 root     root         4556 Sep 24 18:05 /opt/kde2/bin/artswrapper

Hvis du ikke har s'et med, kan du få det med:

    % chown root $(which artswrapper)
    % chmod 4755 $(which artswrapper)

Hvis du gør &artswrapper; SUID root, kommer det formodentlig til at forbedre kvaliteten på lydafgivelsen ved at reducere ophold i musikken. Dog øger det også risikoen for at en fejl i koden, eller en bruger med lyst til at skade kan få maskinen til at bryde sammen eller skade på anden måde. Desuden, at prioritere høj lydkvalitet på flerbrugermaskiner kan forårsage forværret ydelse for brugere som forsøger at bruge maskinen på en produktiv måde.

Hvorfor tager &artsd; så meget CPU-tid?

Kontrollér dine svarstidsindstillinger. Desuden er den nuværende version ikke egentlig optimeret. Dette vil blive bedre, og indtil da kan det ikke rigtigt forudsiges hvor hurtig &artsd; kan eller ikke kan være.

Netværkstransparens

Hvad skal jeg gøre for at få netværkstransparens?

Aktivér det i kontrolcentrets indstillinger for Lydserver (Aktivér sikkerheds- og referenceinformation for X11-serveren og Aktivér netværkstransparens). Kopiér derefter din `.mcoprc`-fil til alle maskiner som du vil bruge netværkstransparensen fra. Log på igen. Sørg for at værtsmaskinerne som skal samarbejde kender hinandens navne (dvs. de har navne som kan opløses eller findes i `/etc/hosts`).

Dette skulle være alt du behøver at gøre. Hvis det ikke virker alligevel, følger nogen yderligere detaljer. &arts; lydserverprocessen &artsd; skal kun køres på en værtsmaskine, den med lydkortet hvor lyden skal afspilles. Den kan startes automatisk ved indlogning til &kde; (hvis du angiver det i kontrolcentret), eller manuelt med noget i retning af:

    % artsd -n -F 5 -S 8192

Flaget `-n` angiver netværkstransparens, mens de øvrige indstiller latenstider.

Din `.mcoprc`-fil skal indeholde denne linje:

    GlobalComm=Arts::X11GlobalComm

for alle maskiner som er involverede, for at netværkstransparens skal virke. Det er dette som aktiveres af indstillingen Aktivér sikkerheds- og referenceinformation over X11-serveren i kontrolcentret.

Til sidst, i alle &kde;-versioner i 2.0.x serien, er der en fejl som viser sig hvis du ikke har et domænenavn indstillet. Klienter for &artsd; forsøger at finde en forbindelse via kombinationen af værtsmaskinenavn.domænenavn. Hvis domænenavnet er tomt, forsøger de at forbinde til værtsmaskinenavn. (læg mærke til det ekstra punktum). At tilføje en post som ser sådan her ud i `/etc/hosts` (dvs. `orion.` hvis værtsmaskinenavnet er orion) gør at man undgår problemet.

Hvordan fejlretter jeg netværkstransparens hvis det ikke virker?

Hvis du har &kde;'s kildekode, gå til `kdelibs/arts/examples`, og kør ``make` `check`` for at kompilere nogle programmer, inklusive referenceinfo. Kør derefter

    % ./referenceinfo global:Arts_SimpleSoundServer

Udskriften angiver værtsmaskinenavnet og porten som bruges af &arts;. For eksempel, `tcp:orion:1698` ville betyde at alle klienter som forsøger at bruge netværkstransparens skal vide hvordan værtsmaskinen orion kan nås.

Hardware-specifikke spørgsmål

Hvilken hardware virker artsd ikke godt sammen med?

Det virker som om der er nogle få Linux-drivere som ikke virker godt sammen med aRts for visse udgaver af kernen. Læs først denne liste inden du rapporterer en fejl. Hvis du finder at informationen i listen ikke er fuldstændig, så tøv venligst ikke med at fortælle os om det.

Linux-driver/lydkort | Virker ikke med | Virker med | Bemærkninger
--- | --- | --- | ---
i810-driver (Intel 810 + AC97 Audio) | 2.4.9 | 2.4.18, 2.2.20, kommerciel OSS-driver, alsa-0.5.12a med OSS-emulering | driver forårsager for stor CPU-belastning (se nedenfor)
maestro 3/4-kredse | 2.4.9 | ? | driver forårsager ind imellem overbelastning af processoren (se nedenfor)
aureal8820, aureal8830-drivere fra sourceforge | 2.4.17 | ? | driver forårsager fejlmeddelelse / for meget CPU-belastning (se nedenfor)
OSS kommerciel 3.9.4g med Aureal Vortex | ? | ? | systemet låses
ymfpci | 2.4.0, 2.4.12 | 2.4.17 | driver forårsager fejlmeddelelse (se nedenfor)

Hvorfor er der hardware-specifikke problemer, og hvordan ser jeg dem?

De almindelige problemer er at driveren ikke giver aRts tilstrækkelig eller tilstrækkeligt nøjagtig information om hvornår lyddata skal skrives. De fleste OSS-drivere giver rigtig information, men ikke alle.

Du vil måske bemærke at visse andre programmer (såsom xmms) ikke behøver denne information, og derfor virker rigtigt til og med for din hardware. Men &arts; behøver denne information, så artsd vil måske ikke virke. Dette er stadigvæk en fejl i driveren, og ikke i &arts;.

Der er to slags opførsel som artsd påviser når den køres med en fejlagtig driver. Enten forsøger den at sende ny data, men det lykkes egentlig aldrig, hvilket til slut fører til en for stor CPU-belastning, dette rapporteres, og at den afsluttes. Det andet problem er at artsd kan få forkert information om hvor meget data der skal skrives. Så stopper artsd med et fejlmeddelelse som:

    artsd: audiosubsys.cc:458: void Arts::AudioSubSystem::handleIO(int):
    Assertion `len == can_write' failed.
    Aborted

Hvad er forkert i driveren hvis jeg får problemet med for stor CPU-belastning?

Oftest bruger artsd kaldet select() for at holde styr på hvornår ny data skal skrives. Derefter bruger den kaldet ioctl(...GETOSPACE...), for at holde styr hvor meget data som skal skrives. Til sidst skriver den data.

Et problem opstår hvis artsd enten altid vækkes, eller hvis der er meget lidt data at skrive. OSS-dokumentationen angiver at kaldet select() kun vækker en proces hvis der er mindst et fragment at skrive. Hvis artsd vækkes når der ikke er nogen, eller meget lidt, data at skrive, for eksempel en sampling, forsøger den at skrive små stumper med lyddata, hvilket kan blive meget kostbart, og til slut give for stor CPU-belastning.

For at rette dette, skal driveren kun vække artsd hvis et helt fragment kan skrives.

Hvad er forkert i driveren hvis jag får denne fejlmeddelelse?

Oftest bruger artsd kaldet select() for at holde styr på hvornår ny data skal skrives. Derefter bruger den kaldet ioctl(...GETOSPACE...), for at holde styr hvor meget data som skal skrives. Til sidst skriver den data.

Hvis artsd ikke kan skrive så meget data som angives af kaldet ioctl, så stopper den med fejlmeddelelsen ovenfor. For at rette dette, skal driveren angive den rigtige størrelse på det ledige plads.

Andre problemer

Jeg kan ikke bruge &arts-builder;. Den bryder sammen når jeg kører et modul!

Den mest sandsynlige grund er at du bruger gamle strukturer eller moduler som ikke understøttes i &kde; 2 versionen. Desværre er dokumentationen på nettet for &arts;-0.3.4.1 som er helt forældet. Det oftest rapporterede sammenbrud er at hvis en struktur køres i &arts-builder; så fås fejlmeddelelsen [artsd] Synth_PLAY: lydsystemet bruges allerede.

Du skal bruge et Synth_AMAN_PLAY modul i stedet for Synth_PLAY så forsvinder problemet. Se også &arts-builder;'s hjælpefil (tryk på F1 i &arts-builder;).

Nyere udgaver af &arts-builder; (&kde; 2.1 beta 1 og senere) levereres med et antal eksempler som du kan bruge.