# 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 soporte para varias plataformas más. Ésta 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 multihilo, 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;.

Compruebe que &artsd; está correctamente enlazado con `libaudiofile` (``ldd` `artsd``). Si no lo está, descargue el paquete tdesupport, 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:

1. Acceda al sistema como `root`.

2. Abra una ventana de &konqueror;.

3. Vaya a la carpeta `/dev`.

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

5. Pinche en el apartado Permisos.

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

7. Pinche en Aceptar.

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

Para restringir 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;, &tdemid;, &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 (transmisión bidireccional) 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 «cómo» 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 compilados de &artsd; a otra carpeta?

No se podrá mover &artsd; sin problemas directamente. 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 afectan 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 compiladas 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 incluídas en &kde; funcionan con &arts;. Ésto incluye:

- &noatun;.

- &arts-builder;.

- &aktion;.

- &tdemid;.

- &tdemidi;.

- &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 siguientes aplicaciones no funcionan con &arts;:

- none

Vea también las respuestas a las preguntas 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 que 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 órdenes 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 más lento y cargar más 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, permitir 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 la orden ``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 servidor está ocupado, este es un método un poco bruto, pero efectivo, de solucionarlo:

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

Ésto puede provocar que las aplicaciones que utilicen &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 sonido mejorado, 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

Las nuevas versiones de aRts (>= 1.2.0) también pueden utilizar el demonio de sonido mejorado en lugar de acceder directamente a la tarjeta de sonido. En la línea de órdenes, puede utilizar la opción -a, de la siguiente forma:

    % artsd -a esd

para conseguir soporte de EsounD, en KDE podrá utilizar kcontrol para configurar artsd y utilizar esd a través de Sonidos y multimedia -> Sistema de sonido -> E/S sonido.

## 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 tiene 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 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 ruidos.

¿Se puede hacer algo para evitar las pausas?

Los usuarios de los discos duros IDE puede utilizar la orden `hdparm` para poner sus discos en modo DMA. Una advertencia: esto no funciona con todo el hardware, y puede dar como resultado el tener que reiniciar el sistema o, en algún caso poco habitual, en pérdida de datos. Lea la documentación sobre la orden `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 script al inicio del sistema (esto 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 se supone que debería estarlo. 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 hace &artswrapper; SUID `root`, probablemente mejorará la calidad de su sistema de audio reduciendo las distorsión en la música. Sin embargo, se incrementará el riesgo de que un fallo en el código o un usuario malicioso pueda colgar o dañar su máquina. Adicionalmente, en las máquinas multi-usuario, priorizar la alta calidad de audio puede deteriorar el rendimiento para los usuarios que intenten hacer un uso «productivo» de la máquina.

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

Compruebe 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 al sistema. Asegúrese de que los ordenadores que está interaccionando conocen los nombres de los otros (&ie;, los nombres que resolverá o que se encuentren 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 del 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 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 ésta 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 `tdelibs/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`.

## Preguntas específicas de hardware

¿Con qué hardware no funciona artsd correctamente?

Parece ser que existen unos pocos controladores linux que no funcionan bien con aRts en algunas versiones del núcleo. Por favor, lea esta lista antes de informar de un fallo. Si encuentra que parte de la información de esta lista esta incompleta, por favor, no dude en comunicarlo.

Controlador / tarjeta de sonido linux | Falla bajo | Funciona bajo | Observaciones
controlador i810 (Intel 810 + audio AC97) | 2.4.9 | 2.4.18, 2.2.20, controlador oss comercial, alsa-0.5.12a con emulación OSS | el controlador provoca sobrecarga de la cpu (ver debajo)
chipset 3/4 maestro | 2.4.9 | ? | el controlador algunas veces provoca la sobrecarga de la cpu (ver debajo)
controladores aureal8820 y aureal8830 de sourceforge | 2.4.17 | ? | el controlador activa el disparador/provoca la sobrecarga de la cpu (ver debajo)
OSS Comercial 3.9.4g con Aureal Vortex | ? | ? | bloqueo del sistema
ymfpci | 2.4.0, 2.4.12 | 2.4.17 | el controlador activa el disparador (ver debajo)

¿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 cuándo se debe escribir información de sonido. La mayoría de los controladores OSS proporcionan la información correcta, 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 cuánta información debe escribir. Por último, escribe esa información.

Los problemas ocurren cuando se llama a artsd contínuamente 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 debe 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 cuánta información debe escribir. Por último, escribe esa información.

Si artsd no puede escribir toda 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 &arts-builder;. ¡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 &arts-builder; 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 &arts-builder; (pulse F1 en &arts-builder;).

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