# Questions et réponses

Cette section répond aux questions les plus fréquemment posées à propos de &arts;.

Généralités

&kde; reconnaît-il ma carte son ?

&kde; utilise &arts; pour le son, et &arts; utilise les pilotes sonores du noyau de &Linux;, soit OSS, soit ALSA (en utilisant l'émulation OSS). Si votre carte son est reconnue par ALSA ou OSS et correctement configurée (&cad; que les autres applications &Linux; l'utilisent sans problème), ça marchera. Il y a cependant des problèmes avec certains matériels spécifiques, lisez la section pour les problèmes spécifiques au matériel si vous avez des problèmes avec artsd sur votre machine.

En attendant, la gestion pour d'autres plates-formes diverses a été ajoutée. Voici une liste complète de la façon dont les versions les plus récentes de &arts; peuvent lire le sons. Si vous avez une plate-forme non gérée, veuillez porter &arts; sur votre plate-forme.

Méthodes d'entrées/sorties audio de &arts; | Comment
--- | ---
paud | Gestion des périphériques audio personnels AIX
alsa | Pilotes Linux ALSA-0.5 et ALSA-0.9
libaudioio | Gestion des librairies génériques LibAudioIO qui fonctionnent avec Solaris
nas | Serveur de son NAS, utile pour les terminaux X avec la gestion de NAS
null | Périphérique audio null, désactive le son
oss | Gestion de OSS (Open Sound System). Fonctionne sous Linux, divers BSD et d'autres plates-formes sur lesquelles les pilotes OSS sont installés.
toss | L'implantation d'OSS multithreadés qui fonctionne mieux dans certains cas où l'implantation standard d'OSS ne fonctionne pas très bien
sgi | Gestion de SGI Direct Media pour IRIX
sun | Gestion de Solaris

Je ne peux pas lire de fichiers `wav` avec &artsd; !

Vérifiez que &artsd; est lié à `libaudiofile` (``ldd`artsd`). Si ce n'est pas le cas, téléchargez kdesupport, recompilez tout et ça devrait marcher.

J'entends un son lorsque je me connecte en root mais les autres utilisateurs n'ont pas le son !

Les permission du fichier `/dev/dsp` déterminent quels utilisateurs ont accès au son. Pour permettre à tout le monde de l'utiliser, faites ceci :

- Connectez-vous en root

- ouvrez une fenêtre &konqueror;

- allez dans le dossier `/dev`

- cliquez sur le fichier `dsp` avec le bouton droit de la souris, et choisissez propriétés.

- cliquez sur l'onglet Permissions

- cochez les cases Lecture et Écriture dans toutes les sections.

- cliquez sur OK

Vous pouvez obtenir le même effet dans un terminal en utilisant la commande ``chmod` `666` /dev/dsp`.

Pour restreindre l'accès au son à certains utilisateurs, vous pouvez utiliser les permissions de groupe. Avec certaines distributions &Linux;, par exemple Debian/Potato, `/dev/dsp` appartient déjà au groupe audio, donc vous devez juste ajouter les utilisateurs à ce groupe.

Ça fonctionne pour &artsd;, mais pour les autres applications comme &kmix;, &kmid;, &kscd;,&etc; ?

Il y a d'autres périphériques qui fournissent des fonctionnalités auxquelles accèdent des applications multimédia. Vous pouvez les traiter de la même manière, soit en les rendant accessibles à tout le monde, soit en utilisant des groupes pour contrôler les accès. Voici une liste, qui est vraisemblablement incomplète (s'il y a plusieurs périphériques de la forme `midi0`, `midi1`, &etc; seule la version avec le zéro est listée ici) :

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

Que puis-je faire si artsd ne démarre pas ou plante en cours de fonctionnement ?

Tout d'abord, essayez d'utiliser les réglages par défaut du ¢reConfiguration; (ou si vous démarrez manuellement, ne donnez pas d'options supplémentaires outre ``-F`10 `-S`4096` pour les temps de réponse). Tout particulièrement, full duplex est susceptible de ne pas fonctionner avec divers pilotes, donc essayez de le désactiver.

Une bonne façon de vous rendre compte pourquoi &artsd; ne démarre pas (ou plante en cours de fonctionnement) est de démarrer manuellement. Ouvrez une fenêtre &konsole;, et saisissez :

    % artsd -F10 -S4096

Vous pouvez aussi ajouter l'option `-l0`, qui affichera plus d'informations sur ce qu'il se passe, comme ceci :

    % artsd -l0 -F10 -S4096

En faisant ceci, vous obtiendrez sûrement des informations utiles. S'il plante en faisant ceci ou cela, vous pouvez refaire ceci et cela et voir comment il plante. Si vous voulez faire un rapport de bogue, générer un backtrace avec `gdb` et/ou un `strace` peut aider à régler le problème.

Puis-je relocaliser &arts; (déplacer les fichiers compilés dans un autre dossier) ?

Vous ne pouvez pas modifier le dossier de &arts; de manière parfaite. Le problème est que la localisation de &artsd; est compilée dans &artswrapper; pour des raisons de sécurité. Vous pouvez cependant utiliser le fichier `.mcoprc` (entrées TraderPath/ExtensionPath) pour qu'un &artsd; déplacé puisse au moins trouver ses composants. Voyez le chapitre à propos du fichier `.mcoprc` pour plus de détails.

Puis-je compiler &arts; avec gcc-3.0 ?

Réponse courte : non. &arts; ne fonctionnera pas si vous le compilez avec gcc-3.0.

Réponse longue : dans les versions officielles, il y a deux bogues gcc-3.0 affectant &arts;. Le premier, gcc-3.0 bug c++/2733est relativement innofensif (et a à voir avec des problèmes avec les instructions asm). Il fait échouer la compilation de convert.cc. Il a été corrigé dans le CVS de gcc-3.0, et ne sera plus un problème avec gcc-3.0.1et supérieur. Une solution temporaire a également été ajoutée dans la version CVS de KDE/aRts.

Le second bogue, c++/3145 (qui provoque la génération de mauvais code dans le cas d'héritages virtuels multiples) est critique. Des applications comme &artsd; planteront simplement au démarrage lorsqu'elles sont compilées avec gcc-3.0. Même si des progrès ont été effectués dans la branche de gcc-3.0, au moment où ces lignes sont écrites, &artsd; plante toujours relativement souvent, de manière imprévisible.

Quelles applications fonctionnent avec &arts; ?

Évidemment, toutes les applications fournies avec &kde; sont compatibles avec &arts;. Ceci inclut :

- &noatun;

- &arts-builder;

- &aktion;

- &kmid;

- &kmidi;

- &kmix;

- &kscd;

- Des jeux &kde; tels que &kpoker; et &ktuberling;

Certaines applications non incluses dans la distribution de &kde; (&pex; contenues dans kdenonbeta) gèrent aussi &arts;, comme :

- &brahms;

- Kaboodle

- Kdao

Les application non-&kde; suivantes devraient fonctionner avec &arts; :

- xmms (avec le module externe &arts;)

- Real Networks RealPlayer 8.0 (fonctionne avec &artsdsp; ; le support natif de &arts; est en cours d'étude)

Les applications suivantes ne fonctionnent pas avec &arts; :

- aucune

Voyez aussi les réponses aux questions dans la faq applications non-&arts;.

Cette section est incomplète - si vous avez plus d'informations sur les applications reconnues ou non, prévenez l'auteur afin de les inclure ici.

Applications non-&arts;

Dès que &kde; fonctionne, les autres applications ne peuvent plus accéder au périphérique son !

Lorsque le serveur sonore de &arts; est utilisé par &kde;, il utilise le périphérique sonore. Si le serveur ne fait rien pendant 60 secondes, il est suspendu automatiquement et libère le périphérique.

Vous dites qu'il est suspendu après 60 secondes, mais ça ne marche pas chez moi !

Si vous démarrez artsd depuis le centre de configuration de KDE, la suspension automatique est réglée par défaut à 60 secondes. Si vous démarrez artsd depuis la ligne de commande, vous devrez utiliser l'option -s pour spécifier le temps de suspension automatique, sinon elle sera désactivée par défaut.

Actuellement, il n'est pas suspendu si le mode full duplex est activé. Désactivez-le depuis le ¢reConfiguration;. Il est conseillé généralement de désactiver le mode full duplex si vous utilisez &arts; pour lire de l'audio et pas pour enregistrer.

Comment exécuter de vieilles applications qui ne reconnaissent pas &arts; ?

Exécutez-les avec &artsdsp;. Par exemple, si vous aviez écrit en temps normal :

    % mpg123 foo.mp3

utilisez plutôt :

    % artsdsp mpg123 foo.mp3

Ceci redirigera la sortie son vers &arts;. Cette méthode ne nécessite pas de modifications de l'application. Ce n'est pas très élégant, et ne gère pas toutes les caractéristiques de la carte son donc il est possible que ça ne fonctionne pas pour certaines applications.

Je ne peux exécuter &artsdsp; avec aucune application, il plante à tous les coups !

Vous avez besoin d'une version récente des librairies glibc ; &artsdsp; ne fonctionnera pas de manière sûre sur certaines vieilles distributions de &Linux;. Par exemple, avec une Debian 2.1 (basée sur glibc 2.0), ça ne fonctionnera pas, tandis que ça fonctionnera avec une Debian2.2 (basée sur glibc 2.1.3).

Y a-t-il des limitations théoriques avec certaines applications qui m'empêcheraient de les utiliser avec &artsdsp; ?

Non, utiliser &artsdsp; peut entraîner des temps de latence et une augmentation légère de l'utilisation du processeur par rapport à l'utilisation directe des API de &arts;. À part ça, si ça ne fonctionne pas pour une application, il faut considérer ça comme un bogue dans &artsdsp;. La technique utilisée par &artsdsp; devrait, si elle est implantée correctement, permettre à toute application de fonctionner avec (y compris les grosses applications comme Quake 3).

Que puis-je faire si une application ne fonctionne pas avec &artsdsp; ?

Vous pouvez attendre que &artsd; se suspende automatiquement, ou utiliser la commande ``artsshell``suspend`` pour demander au serveur de se suspendre. Vous ne pourrez le suspendre que si plus aucune application reconnaissant &arts;ne l'utilise, et ensuite plus aucune de ces applications ne pourra le réutiliser lorsqu'il sera suspendu.

Si le serveur est occupé, un moyen un peu rude, mais efficace de s'en débarrasser est :

    % killall artsd ; killall artswrapper
    Maintenant démarrons notre application.
    % kcminit arts

Une fois que vous avez tué le serveur, toute application reconnaissant &arts; et en fonctionnement est alors susceptible de planter.

Et les applications écrites pour &kde; 1 ?

Si vous exécutez des applications &kde; 1, qui envoient les signaux audio vers le serveur audio de &kde; 1, vous devrez exécuter kaudioserver pour les faire fonctionner. Vous pouvez démarrer kaudioserver de la même façon que les applications non-&arts; :

    % artsdsp kaudioserver

kaudioserver doit être installé (depuis les sources de &kde; 1) - il appartient à &kde; 1.x, pas &kde; 2.

Et les applications utilisant le enlightened sound daemon, ESD ?

La méthode est similaire à celle pour kaudioserver. De telles applications nécessitent que le serveur esd fonctionne. Vous pouvez démarrer `esd` via &artsdsp;, et chaque application utilisant ESD devrait fonctionner correctement, comme ceci :

    % artsdsp esd

Les version de aRts plus récentes ( >=1.2.0) peuvent également utiliser le démon sonore d'enlightment au lieu d'accéder directement à la carte son. Sur la ligne de commande, vous pouvez utiliser l'option -a, comme

    % artsd -a esd

pour activer la gestion de EsounD, tandis que dans KDE, vous pouvez utiliser le centre de configuration pour configurer artsd pour utiliser esd via Son -> Serveur sonore -> Entrées / sorties.

Temps de latence

J'entends parfois de courtes pauses lorsque j'écoute de la musique. C'est un bogue ?

Ce n'est probablement pas un bogue, mais dû au fait que le noyau de &Linux; n'est pas adapté à l'ordonnancement temps-réel. Il y a des situations où &arts; ne pourra pas continuer à jouer. Vous pouvez cependant activer les droits temps-réel (via le ¢reConfiguration;), et utiliser un temps de réponse important (comme250ms ou le plus grand possible), ce qui devrait améliorer la situation.

Quel est l'effet du réglage du temps de réponse ?

Le texte d'aide pour ce réglage dans le ¢reConfiguration; peut être trompeur. Une valeur faible signifie que &arts; aura moins de temps pour répondre à un événement extérieur (&cad; le temps qui sépare le moment ou une fenêtre est fermée, et le moment ou un son est joué par &artsd;). Plus de ressources processeur seront aussi utilisées, ce qui peut entraîner des interruptions brèves du son.

Est-ce que je peux faire autre chose pour éviter ces interruptions ?

Pour les utilisateurs de lecteurs IDE, vous pouvez utiliser la commande `hdparm` pour placer votre lecteur IDE en mode DMA. Attention, ça ne fonctionne pas avec tous les matériels, et peut vous obliger à redémarrer la machine, ou plus rare, peut entraîner des pertes de données. Lisez la documentation sur la commande `hdparm` pour de plus amples informations. J'ai utilisé avec succès la commande suivante :

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

Vous devez lancer ceci après chaque démarrage, donc placez-le dans un script de démarrage de votre système (la façon de procéder dépend de votre distribution, sur une Debian &Linux;, la commande est souvent ajoutée dans `/etc/rc.boot`).

La priorité temps-réel ne semble pas avoir un effet chez moi.

Vérifiez que artswrapper est installé suid root, comme il est supposé l'être. Beaucoup de distributions (SuSE7.x for instance) ne le font pas. Vous pouvez vérifier ceci en utilisant : ls -l $(which artswrapper). Bon :

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

Mauvais :

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

Si vous n'avez pas le s, vous pouvez l'obtenir en utilisant :

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

Si vous rendez artswrapper SUID root, ceci améliorera sensiblement la qualité de la lecture audio en réduisant les coupures dans la musique. Cependant, ceci augmente également le risque qu'un bogue dans le code ou qu'un utilisateur malicieux ne fasse planter ou bloquer votre machine. De plus, sur des machines multiutilisateurs, donner la priorité à un son de haute qualité peut diminuer les performances pour les utilisateurs qui essaient d'utiliser la machine de manière productive.

Pourquoi &artsd; consomme-t-il autant de temps processeur ?

Vérifiez le réglage du temps de réponse. Cependant, la version actuelle n'est pas encore vraiment optimisée. Ça devrait s'améliorer, mais jusque là, aucune estimation sur la vitesse de &artsd; ne peut vraiment être faite.

Transparence réseau

De quoi ai-je besoin pour utiliser la transparence réseau ?

Activez-la à partir de Serveur de son dans le ¢reConfiguration;(Échanger les informations de sécurité et de référence sur le serveur X11 et Activer la transparence réseau). Copiez ensuite votre fichier `.mcoprc` sur toutes les machines à partir desquelles vous voulez utiliser la transparence réseau. Connectez-vous à nouveau. Assurez-vous que les hôtes mis en jeu se connaissent bien entre eux (&cad; qu'ils ont des noms résolvables ou qu'ils sont dans `/etc/hosts`).

Ce devrait être tout ce que vous avez à faire. Cependant, si ça ne fonctionne toujours pas, il y a quelques détails supplémentaires. Le processus du serveur de son de &arts;, &artsd;, ne doit être exécuté que sur un hôte, celui contenant la carte son qui va être utilisée. Ce processus peut être démarré automatiquement à la connexion à &kde; (vous configurez ceci dans le ¢reConfiguration;), ou manuellement en utilisant quelque chose comme :

    % artsd -n -F 5 -S 8192

Le paramètre `-n` correspond à la transparence réseau, et les autres paramètres configurent le temps de réponse.

Votre fichier `.mcoprc` devrait contenir l'entrée :

    GlobalComm=Arts::X11GlobalComm

sur toutes les machines mises en jeu, afin de faire fonctionner la transparence réseau. C'est ce qui est activé par le réglage Échanger les informations de sécurité et de référence sur le serveur X11 du centre de configuration de &kde;.

Enfin, dans toutes les versions de &kde; de la série 2.0.x, un bogue apparaît si vous n'avez pas de nom de domaine. Les clients de &artsd; essaient de trouver où se connecter via la combinaison hostname.domainname Si votre nom de domaine est vide, ils essaieront de se connecter à hostname. (notez le point supplémentaire). Il est possible de contourner ce problème en ajoutant une entrée à `/etc/hosts` (&cad; `orion.` si votre nom d'hôte est orion).

Comment déboguer la transparence réseau si ça ne fonctionne pas ?

Si vous avez le code source de &kde;, allez dans `kdelibs/arts/examples`, et exécutez ``make` `check`` pour compiler certains programmes, dont referenceinfo. Exécutez ensuite

    % ./referenceinfo global:Arts_SimpleSoundServer

La sortie indiquera le nom d'hôte et le port en cours d'utilisation par &arts;. Par exemple, `tcp:orion:1698` signifierait que tout client essayant d'utiliser la transparence réseau devrait savoir comment atteindre l'hôte orion.

Questions spécifiques au matériel

Avec quels matériels artsd ne fonctionne-t-il pas correctement ?

Il semble qu'il y a quelques pilotes linux qui ne fonctionnent pas très bien avec aRts avec certaines versions du noyau. Veuillez lire cette liste avant de signaler un bogue. Si vous trouvez des informations incomplètes dans cette liste, n'hésitez pas à nous le faire savoir.

Pilote Linux / carte son | Ne fonctionne pas sous | Fonctionne sous | Remarques
--- | --- | --- | ---
Pilote i810 (Intel 810 + AC97 Audio) | 2.4.9 | 2.4.18, 2.2.20, pilote commercial oss, alsa-0.5.12a avec émulation OSS | le pilote cause une surcharge du processeur (voir plus bas)
maestro 3/4 chipset | 2.4.9 | ? | le pilote cause parfois une surcharge du processeur (voir plus bas)
aureal8820, pilotes aureal8830 de sourceforge | 2.4.17 | ? | le pilote déclenche des assertions et entraîne une surcharge du processeur (voir plus bas)
OSS Commercial 3.9.4g avec Aureal Vortex | ? | ? | blocage du système
ymfpci | 2.4.0, 2.4.12 | 2.4.17 | le pilote déclenche des assertions (voir plus bas)

Pourquoi y-a-t-il des problèmes spécifiques au matériel et comment les détecter ?

Le problème courant est que le pilote ne fournit pas à aRts suffisamment d'informations ou de manière trop peu précise sur le moment auquel écrire les données sonores. La plupart des pilotes OSS fournissent correctement ces informations, mais pas tous.

Vous avez peut-être remarqué que certaines autres applications (comme xmms) n'ont pas besoin de ces données, et ainsi fonctionnement correctement même avec votre matériel. Cependant, &arts; a besoin de ces données, donc artsd peut ne pas fonctionner. Ceci est un bogue dans le pilote, pas dans &arts;.

Il y a deux sortes de comportement possibles pour artsd lorsqu'il fonctionne avec un pilote incorrect. Soit il tente continuellement d'apporter de nouvelles données, mais n'y parvient jamais, ce qui peut amener éventuellement à une consommation excessive du processeur donnant une surcharge processeur et sort. L'autre problème est que &artsd; peut se voir fournir de mauvaises informations sur la quantité d'informations à écrire. Artsd s'arrêtera alors avec une assertion comme :

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

Qu'est-ce qui ne va pas avec le pilote si j'ai des problèmes de surcharge du processeur ?

Habituellement, artsd utilise select() pour trouver quand écrire de nouvelles données. Ensuite, il utilise un ioctl(...GETOSPACE...) pour trouver la quantité d'informations à écrire. Enfin, il écrit ces données.

Un problème survient si artsd est réveillé soit en permanence, soit si il y a une quantité minimale de données à écrire. La documentation OSS spécifie que select() ne réveille un processus que s'il y a au moins un fragment à écrire, ou très peut, par exemple un échantillon, alorsalors il continuera à écrire de petits morceaux de données audio, ce qui peut devenir très coûteux, et éventuellement surcharger le processeur.

Pour corriger ceci, le pilote devrait réveiller artsd uniquement s'il y a un fragment entier à écrire.

Qu'est-ce qui ne va pas avec le pilote si j'ai des assertions ?

Habituellement, artsd utilise select() pour trouver quand écrire de nouvelles données. Ensuite, il utilise un ioctl(...GETOSPACE...) pour trouver la quantité d'informations à écrire. Enfin, il écrit ces données.

Si artsd ne peut pas écrire autant de données que ce qui est spécifié par ioctl, il échouera dans son assertion. Pour corriger ceci, le pilote doit fournir la quantité correcte d'espace libre.

Divers

Je ne peux pas utiliser &arts-builder;. Il plante chaque fois que j'exécute un module !

La cause la plus probable est que vous utilisez de vieilles structures ou de vieux modules qui ne sont pas reconnus pas la version pour &kde; 2. Malheureusement, la documentation disponible sur internet se réfère à &arts;-0.3.4.1 qui est une ancienne version. Le plantage le plus souvent rencontré est l'apparition du message d'erreur [artsd] Synth_PLAY:audio subsystem is already used. dans &arts-builder; lorsqu'une structure est exécutée.

Utilisez un module Synth_AMAN_PLAY plutôt qu'un module Synth_PLAY et le problème disparaîtra. Voyez aussi l'aide de &arts-builder; en appuyant sur F1 depuis &arts-builder;).

Les versions récentes de &arts-builder; (&kde; 2.1 beta1 et suivantes) sont livrées avec plusieurs exemples.