# Preguntas y respuestas

Este sección responde a algunas de las preguntas más habituales sobre &arts;.

Preguntas generales

¿Soporta &kde; mi tarjeta de sonido para reproducción de audio?

&kde; utiliza &arts; para reproducir sonido, y &arts; utiliza los controladores de sonido del núcleo de &Linux;, ya sean OSS o ALSA (utilizando la emulación de OSS). Si su tarjeta de sonido está soportada por ALSA o por OSS y correctamente configurada (&ie; cualquier otra apliación de Linux puede reproducir sonido), funcionará. Hay, sin embargo, algunos problemas con hardware específico, por favor lea la sección sobre problemas con hardware específico si tiene problemas con artsd en su ordenador.

Mientras tanto se ha añadido soporta para varias plataformas más. Esta es una lista completa de cómo se puede reproducir sonido con la versión más reciente de &arts;. Si su plataforma no está soportada, por favor considere realizar usted mismo las modificaciones oportunas para que funcione.

Método de E/S de audio de &arts; | Comentario
--- | ---
paud | Soporte para el dispositivo de audio personal de AIX
alsa | Controladores ALSA-0.5 y ALSA-0.9 de Linux
libaudioio | Soporte para la biblioteca genérica LibAudioIO que funciona en Solaris
nas | Servidor de sonido NAS, útil para los terminales X con soporte para NAS
null | Dispositivo de audio nulo, elimina todo el sonido silenciosamente
oss | Soporte para OSS (sistema de sonido abierto), funciona en Linux, varios BSDs y otras plataformas con los controladores OSS instalados
toss | Soporte para OSS multihebra, que funciona mejor en los casos donde el OSS estándar no lo hace correctamente
sgi | Soporte directo multimedia de SGI para IRIX
sun | Soporte para Solaris

No puedo reproducir archivos `wav` con &artsd;.

Comprueba que &artsd; está correctamente enlazado con `libaudiofile` (``ldd` artsd`). Si no lo está, descargue el paquete kdesupport, recompílelo todo y funcionará.

Escucho sonidos cuando entro en el sistema como root, pero ningún otro usuario tiene sonido.

Los permisos del archivo `/dev/dsp` afectan a que los usuarios tengan o no sonido. Para que funcione correctamente, haga esto:

- Acceda al sistema como root.

- Abra una ventana de &konqueror;.

- Vaya al directorio `/dev`.

- Pinche en el archivo `dsp` con el botón derecho del ratón, y abra las propiedades.

- Pinche en el apartado Permisos.

- Active las casillas Leer y Escribir en todas las secciones.

- Pinche en Aceptar.

Puede conseguir los mismos resultados desde una ventana de terminal con el comando ``chmod` `666` /dev/dsp`.

Por registrir el sonido a algunos usuarios específicos, puede utilizar los permisos de grupo. En algunas distribuciones de &Linux; como Debian/Potato, `/dev/dsp` ya aparece en propiedad de un grupo llamado audio, así que lo único que tiene que hacer es añadir los usuarios a ese grupo.

Esto vale para &artsd; pero, ¿qué hay de &kmix;, &kmid;, &kscd;,&etc;?

Hay otros dispositivos que proporcionan la funcionalidad a la que acceden las aplicaciones multimedia. Puede tratarlos de la misma manera, bien haciéndolos accesibles para todo el mundo, o utilizando grupos para controlar el acceso. Esta es una lista, que puede estar incompleta (en caso de que haya varios dispositivos en la forma `midi0`, `midi1`, ..., aquí sólo se mostrará la versión 0):

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

¿Qué puedo hacer si artsd no se inicia o si se cuelga durante el funcionamiento?

En primer lugar: trate de utilizar los parámetros predeterminados en &kcontrol; (o si lo ha iniciado manualmente, no incluya argumentos adicionales salvo quizá ``-F`10 `-S`4096` para latencia). En contreto es bastante probable que falle el full duplex con varios controladores, así que pruebe a desactivarlo.

Una buena forma de investigar por qué no se inicia &artsd; (o se cuelga durante el funcionamiento) es cargarlo manualmente. Abra una ventana de &konsole; y teclee:

    % artsd -F10 -S4096
    >

También puede incluir la opción `-l0`, que mostrará más información sobre lo que está ocurriendo, como aquí:

    % artsd -l0 -F10 -S4096

Al hacer esto, lo más probable es que obtenga suficiente información sobre los motivos de los fallos. O, si se cuelga al hacer una cosa concreta, puede hacerla en este momento para observar como falla. Si desea informar de un fallo, el generar un trazado inverso con `gdb` y/o `strace` puede ayudar a localizar el problema.

¿Se pueden mover los archivos compilador de &artsd; a otro directorio?

Se pueden mover &artsd; sin ningún problema. El único inconveniente es que &artswrapper; guarda la localización de &artsd; compilada por motivos de seguridad. Usted puede, sin embargo, utilizar el archivo `.mcoprc` (entradas TraderPath/ExtensionPath) para indicar a &artsd; dónde puede localizar sus componentes. Vea el capítulo sobre el archivo `.mcoprc` para obtener más detalles sobre esto.

¿Puedo compilar &arts; con gcc-3.0?

Respuesta rápida: no, &arts; no funcionará si lo compila con gcc-3.0.

Respuesta más larga: en su publicación oficial, hay dos fallos en gcc-3.0 que afecta a &arts;. El primero, fallo gcc-3.0 c++/2733 es relativamente inofensivo (y está relacionado con problemas con las declaraciones del ensamblador). Impide la compilación de convert.cc. Ya ha sido corregido en el CVS de gcc-3.0, y no será un problema en gcc-3.0.1 y superiores. Además hay una solución en la versión CVS de KDE/aRts.

El segundo fallo de gcc-3.0, el c++/3145 (que trata sobre la generación de código erróneo en algunos casos de herencia virtual múltiple), es crítico. Las aplicaciones como &artsd; simplemente no funcionarán si están compiladaos con gcc-3.0. Aunque se está haciendo algún progreso al respecto en la rama de gcc-3.0 en el momento de escribir esto, &artsd; sigue fallando habitualmente y de forma impredecible.

¿Qué aplicaciones funcionan bajo &arts;?

Obviamente, todas las aplicaciones incluidas en &kde; funcionan con &arts;. Esto incluye:

- &noatun;

- &artsbuilder;

- &aktion;

- &kmid;

- &kmidi;

- &kmix;

- &kscd;

- juegos de &kde; como &kpoker; y &ktuberling;

Algunas aplicaciones &kde; que aún no se incluyen en las publicaciones de &kde; (⪚ en kdenonbeta) también soportan &arts;, incluyendo:

- &brahms;

- Kaboodle

- Kdao

La siguientes aplicaciones que no son de &kde; también soportan &arts;:

- xmms (con el conector &arts;)

- Real Networks RealPlayer 8.0 (funciona con &artsdsp;; se está considerando el soporte nativo de &arts;)

La siguiente aplicaciones no funcionan con &arts;:

- none

Vea también las respuestas a las cuestions en la sección sobre aplicaciones que no son de &arts;.

Esta sección está incompleta, si tiene más información sobre aplicaciones soportadas o no soportadas, por favor póngase en contacto con el autor para poder incluir aquí esos datos.

Aplicaciones que no son de &arts;

Una vez que &kde; está funcionando, ninguna otra aplicación puede acceder al dispositivo de sonido.

Ya el servidor de sonido &arts;, utilizado por &kde;, está ocupando el dispositivo de sonido. Si el servidor está inactivo durante más de 60 segundos, se auto suspende y libera el dispositivo automáticamente.

Se supone que la suspensión es en 60 segundos, pero no en mi caso.

Si inicia artsd desde el panel de control de KDE, el tiempo de suspensión predeterminado es de 60 segundos. Si inicia artsd desde la línea de comandos necesitará utilizar la opción -s para especificar el tiempo para la suspensión. De otro modo, el comportamiento predeterminado es desactivar la característica de suspensión.

En este momento no hay suspensión si está en uso el full duplex. Apague el full duplex desde &kcontrol; para que funcione la suspensión. Desactivar el full duplex es una buena idea si &arts; se utiliza para la reproducción y no para la grabación de audio.

¿Cómo puedo ejecutar aplicaciones antíguas o que no soporten &arts;?

Ejecútelas utilizando &artsdsp;. Por ejemplo, si normalmente ejecutaría:

    % mpg123 cosa.mp3

utilice ahora:

    % artsdsp mpg123 cosa.mp3

Esto reenviará la salida de sonido a &arts;. Este método no requiere realizar cambios en las aplicaciones. Es, sin embargo, una solución un poco engorrosa y que, además, no admite todas las características de las tarjetas de sonido, así que algunas aplicaciones podrían no funcionar.

No puedo ejecutar &artsdsp; con ninguna aplicación, siempre falla.

Necesita una versión reciente de la biblioteca glibc; &artsdsp; no funcionará de forma fiable en distribuciones antiguas de &Linux;. Por ejemplo, en Debian 2.1 (basada en glibc 2.0) no funciona, mientras que en Debian 2.2 (basada en glibc 2.1.3), lo hace correctamente.

¿Hay algún tipo de límite teórico en las aplicaciones que evitaría el funcionamiento con &artsdsp;?

No. El uso de &artsdsp; puede resultar en una mayor latencia y carga del procesador que utilizar las APIs de &arts; directamente. A parte de eso, cualquier aplicación que no funcione se deberá considerar como un fallo en &artsdsp;. La técnica utilizada por &artsdsp; debería, si está implementada correctamente, permite que cualquier aplicación funcione (incluyendo aplicaciones grandes como Quake 3).

¿Qué puedo hacer si una aplicación no funciona con &artsdsp;?

Puede esperar a que &artsd; entre en suspensión o utilizar el comando ``artsshell` `suspend`` para hacer que el servidor entre forzosamente en suspensión. Sólo podrá suspender el servidor si no hay ninguna aplicación utilizando &arts; en ese momento, y no se permitirá el funcionamiento de ninguna aplicación que utilice &arts; durante el tiempo que dure la suspensión.

Si el sevidor está ocupado, este es un método brutal pero efectivo de solucionarlo:

    % killall artsd ; killall artswrapper
    Ahora inicie la aplicación.
    % kcminit arts

Esto puede provocar que las aplicaciones utilizando &arts; en ese momento fallen, al haberse cerrado el servidor.

¿Qué ocurre con las aplicaciones escritas para &kde; 1.x?

Si está ejecutando aplicaciones de &kde; 1.x, cuya salida de sonido es a través del servidor de audio de &kde; 1, deberá ejecutar kaudioserver para que funcionen. Puede iniciar kaudioserver de la misma forma que otras aplicaciones que no son de &arts;:

    % artsdsp kaudioserver

Deberá tener instalado kaudioserver (del mismo sitio del que haya obtenido las aplicaciones de &kde; 1.x), pertenece a &kde; 1.x y no a &kde; 2.

¿Qué ocurre con las aplicaciones que utilizan el servidor de sondo enlightened, ESD?

El problema es similar al de kaudioserver. Esas aplicaciones necesitan un servidor esd funcionando. Puede iniciar `esd` a través de &artsdsp;, y todas las aplicaciones ESD funcionarán correctamente, de esta manera:

    % artsdsp esd

Latencia

En ocasiones oigo pequeñas pausas al escuchar música, ¿se trata de un fallo?

Lo más probable es que no, sino que esté causado por el hecho de que el núcleo de &Linux; no se lleva muy bien con el procesamiento a tiempo real. Hay situaciones en las que &arts; no es capaz de mantener el flujo de reproducción. Usted puede, sin embargo, activar derechos de tiempo real (a través de &kcontrol;), y utilizar un tiempo de latencia grande (como 250ms o tan grande como sea posible), lo que debería mejorar la situación.

¿Qué efecto tiempo el parámetro del tiempo de respuesta?

El texto de ayuda de este parámetro en &kcontrol; puede despistas. Un valor más bajo significa que &arts; tardará menos tiempo en responder a los eventos externos (&ie;, el tiempo tiempo que pasa desde que se selecciona una ventana hasta que se oye un sonido reproducido por &artsd;). Además utiliza más recursos de CPU, y lo más probable es que produzca más rudios.

¿Se puede hacer algo para evitar las pausas?

Los usuarios de los discos duros IDE puede utilizar el comando `hdparm` para poner sus discos en modo DMA. Una advertencia: esto no funciona con todo el hardware, y puede resultar en tener que reiniciar el sistema o, en algún caso poco habitual, en pérdida de datos. Lea la documentación sobre el comando `hdparm` para obtener más detalles. Yo lo he utilizado con éxito:

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

Debe hacer esto después de cada inicio del sistema, así que lo mejor es que lo incluya en algún guión del inicio del sistema (estoo depende de las distribuciones, en Debian &Linux; lo normal es añadirlo a `/etc/rc.boot`).

¿La prioridad de tiempo real no parece tener ningún efecto?

Verifique que artswrapper está instalado con permisos suid de root, como debería estar. Muchas distribuciones (SuSE7.x por ejemplo) no hacen esto. Puede verificarlo utilizando: ls -l $(which artswrapper). Correcto:

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

Incorrecto:

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

Si no tiene la s, puede ponerla utilizando:

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

Si usted hace &artswrapper; SUID root, probablemente mejorará la calidad de su reproducción audio reduciendo los silencios en la música. Sin embargo aumenta el riesgo de que un error en el código o un usuario malicioso pueda hacer caer o dañar la máquina. Además, en máquinas multiusuario, si prioriza el audio de alta calidad puede que reduzca las prestaciones para ususarios que realizan trabajos productivos en esa misma máquina.

¿Por qué &artsd; consume tanto tiempo de CPU?

Comprueba sus parámetros de tiempo de respuesta. Sin embargo, la versión actual no está muy optimizada. Esto mejorará, y hasta ese momento no se puede hacer una predicción real de lo rápido o lento que puede ser &artsd;.

Transparencia de red

¿Qué necesito para la transparencia de red?

Actívela en los parámetros del Servidor de sonido de &kcontrol; (activar el servidor X11 para información de seguridad y transparencia de red). Después copie su archivo `.mcoprc` a todas las máquinas en las que piense utilizar la transparencia de red. Vuelva a acceder a sistema. Asegúrese de que los ordenadores que está interaccionando conocen los nombres de los otros (&ie; los nombres están en el archivo `/etc/hosts`).

Esto debería ser todo. Sin embargo, si aún no funciona, aquí tiene algún detalle adicional. El proceso del servidor de sonido &arts;, &artsd;, sólo debe ejecutarse en uno de los sistemas, el que tenga la tarjeta de sonido que reproducirá el audio. Se puede iniciar automáticamente al acceder a &kde; (si está configurado en &kcontrol;), o de forma manual utilizando algo como:

    % artsd -n -F 5 -S 8192

El parámetro `-n` es para la transparencia de red, mientras que los otros tienen que ver con la lantencia.

El archivo `.mcoprc` debe contener esta entrada:

    GlobalComm=Arts::X11GlobalComm

en todas las máquinas involucradas, para hacer que funcione la transparencia de red. Esto es lo que se activa con el parámetro del panel de control servidor X11 para información de seguridad.

Por último, en todas la versiones de &kde; de la serie 2.0.x, hay un error que influye si no está configurado el nombre del dominio. Los clientes de &artsd; tratan de buscar a dónde conectarse a través de la combinación nombresistema.nombredominio. Si el nombre del dominio está vacío, tratará de conectarse a nombresistema. (tenga en cuenta el punto adicional). Si se añade una entrada como esta al archivo `/etc/hosts` (&ie; `orion.` si el nombre de su sistema es orion), soluciona el problema.

¿Cómo puedo analizar la transparencia de red si no funciona?

Asumiendo que usted tiene acceso al código fuente de &kde;, vaya a `kdelibs/arts/examples`, y ejecute ``make` `check`` para compilar algunos programas, incluyendo referenceinfo. A continuación ejecute

    % ./referenceinfo global:Arts_SimpleSoundServer

La salida indicará el nombre del sistema y el puerto que están siendo utilizados por &arts;. Por ejemplo, `tcp:orion:1698` significa que cualquier cliente que intente utilizar la transparencia de red debería ser capaz de acceder al sistema orion.

Cuestiones específicas de hardware

¿Con qué hardware no funciona artsd correctamente?

Parece que hay algunos controladores de Linuz que no funcionan correctamente con aRts en algunas versiones del núcleo. Por favor lea esta lista antes de informar de un fallo. Si encuentra que algunas de las informaciones de esta lista son incompletas, por favor no dude en hacérnoslo saber.

Controlador de Linux / Tarjeta de sonido | Falla | Funciona | Notas
--- | --- | --- | ---
Controlador i810 (Intel 810 + Audio AC97) | 2.4.9 | 2.2.20, controlador oss comercial, alsa-0.5.12a con emulación OSS | el controlador provoca sobrecarga en la cpu (ver más abajo)
Chipset maestro 3/4 | 2.4.9 | ? | el controlador en ocasiones provoca sobrecarga en la cpu (ver más abajo)
Controladores aureal8820, aureal8830 de sourceforge | 2.4.17 | ? | el controlador provoca sobrecarga en la cpu y dispara una advertencia (ver más abajo)
OSS Comercial 3.9.4g con Aureal Vortex | ? | ? | bloqueo del sistema
ymfpci | 2.4.0, 2.4.12 | 2.4.17 | el controlador dispara una advertencia (ver más abajo)

¿Por qué se producen los problemas específicos de hardware y cómo puedo detectarlos?

La causa más común es que el controlador no proporciona a aRts la suficiente información sobre cuando se debe escribir información de sonido. La mayoría de los controladores OSS son correctos en esto, pero no todos.

Puede que advierta que hay otras aplicaciones (como xmms) que no necesitan esta información, y que, sin embargo, funcionan correctamente incluso con su hardware. A pesar de todo, &arts; necesita esa información, o artsd no funcionará correctamente. Esto es un fallo del controlador, y no de &arts;.

Hay dos tipos de comportamientos que artsd muestra cuando se está ejecutando un controlador incorrecto. O bien trata de forma contínua de enviar nueva información, pero nunca lo consigue, lo que produce un consumo de toda la potencia de la CPU, informa de sobrecarga en la cpu y sale. El otro problema es que a artsd se le puede comunicar información incorrecta sobre la cantidad de datos a escribir. En este caso artsd se detendrá mostrando una advertencia de este aspecto:

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

¿Qué tiene mal el controlador si se produce el problema de la sobrecarga de la cpu?

Normalmente, artsd utiliza select() para descubrir cuándo se deben escribir nuevos datos. Entonces, utiliza la función ioctl(...GETOSPACE) para descubrir cuanta información debe escribir. Por último, escribe esa información.

Los problemas ocurren cuando se llama a artsd continuamente o si hay para escribir cantidades de información mínimas. La documentación de OSS especifica que select() únicamente llama a un proceso si hay al menos un fragmento para escribir. Sin embargo, si se llama a artsd sin datos para escribir, o muy pocos, por ejemplo una sola muestra, este se mantendrá escribiendo pequeños segmentos de datos de audio, lo que resulta muy costoso y puede, en determinados casos, sobrecargar la cpu.

Para solucionar esto, el controlador de llamar a artsd únicamente si hay para escribir un fragmento completo.

¿Qué le ocurre al controlador si se produce la advertencia?

Normalmente, artsd utiliza select() para descubrir cuándo se deben escribir nuevos datos. Entonces, utiliza la función ioctl(...GETOSPACE) para descubrir cuanta información debe escribir. Por último, escribe esa información.

Si artsd no puede escribir todo la información que indica la llamada a ioctl, producirá una advertencia. Para solucionarlo, el controlador debe proporcionar la información correcta sobre la cantidad de espacio libre.

Otros problemas

No puedo utilizar &artsbuilder;. Falla al ejecutar un módulo.

La causa más probable es que está utilizando estructuras antiguas o módulos que no están soportados en la versión 2 de &kde;. Por desgracia, la documentación que se encuentra en la web hace referencia a &arts;-0.3.4.1, que ya está obsoleto. El error del que más se informa es: que ejecutar una estructura en &artsbuilder; da como resultado el mensaje de error [artsd] Synth_PLAY: el subsistema de audio ya está en uso.

Utilizando el módulo Synth_AMAN_PLAY en lugar de Synth_PLAY, el problema desaparecerá. Consulte también el archivo de ayuda de &artsbuilder; (pulse F1 en &artsbuilder;).

Las versiones más recientes de &artsbuilder; (&kde; 2.1 beta 1 y posteriores) vienen con un conjunto de ejemplos que pueden ser utilizados.