<!-- 
<?xml version="1.0" ?>
<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd">

To validate or process this file as a standalone document, uncomment
this prolog. Be sure to comment it out again when you are done -->

<chapter id="arts-tools">
<title
>Ferramentas do &arts;</title>

<para
>Incluído com o &arts;, vem um conjunto de utilitários para controlar e configurar o seu comportamento. Você precisa de ter alguma familiaridade com a maioria dessas ferramentas para usar efectivamente o &arts;. Esta secção descreve cada um dos utilitários e as suas opções de comando. </para>

<sect1 id="kde-control-center">
<title
>&kcontrol;</title>

<para
>Ao correr o &arts; no &kde;, o &kcontrolcenter; oferece um grupo de opções do painel de controlo na categoria <guilabel
>Som</guilabel
>. Algumas dessas opções são usadas pelo &arts;. Você também poderá associar sons com vários eventos do gestor de janelas e do &kde; com o painel <menuchoice
><guilabel
>Aparência &amp; Comportamento</guilabel
><guilabel
>Notificações do Sistema</guilabel
></menuchoice
>. Veja o manual do &kcontrol; para saber como usar as opções do painel. </para>

</sect1>

<sect1 id="artsd">
<title
>&artsd;</title>

<para
>O acesso aos recursos de 'hardware' de som é controlado pelo &artsd;, o servidor do &arts;. Isto permite às várias aplicações enviarem pedidos simultâneos ao servidor, onde poderão ser misturados e tocados. Sem um servidor de som centralizado, uma única aplicação que usasse um dispositivo de som iria impedir que as outras aplicações o usassem também. </para>

<para
>Para usar o &arts;, deverá existir uma e apenas uma cópia do &artsd; a correr. É tipicamente executada quando o &kde; se inicia, se estiver activo no painel do &kcontrol; <guilabel
>Servidor de Som</guilabel
> do &kcontrol;. </para>

<para
>O programa aceita os seguintes argumentos:</para>

<!-- LW: FIX THIS -->

<cmdsynopsis
><command
>artsd</command
> <group choice="opt"
> <option
>-n</option
> <option
>-p</option
> <option
>-N</option
> <option
>-W <replaceable
>n</replaceable
></option
> </group
> <group choice="opt"
> <option
>-a <replaceable
>método de audio</replaceable
></option
> <option
>-r <replaceable
>taxa amostragem</replaceable
></option
> <option
>-b <replaceable
>bits</replaceable
></option
> <option
>-d</option
> <option
>-D <replaceable
>nome dispositivo</replaceable
></option
> <option
>-F <replaceable
>fragmentos</replaceable
></option
> <option
>-S <replaceable
>tamanho</replaceable
></option
> <option
>-s <replaceable
>segundos</replaceable
></option
> <option
>-m <replaceable
>nome da aplicação</replaceable
></option
> </group
> <group choice="opt"
> <option
>-h</option
> <option
>-A</option
> <option
>-v</option
> <option
>-l <replaceable
>nível</replaceable
></option
> </group
> </cmdsynopsis>

<variablelist
><varlistentry>
<term
><option
>-r <replaceable
>taxa de amostragem</replaceable
></option
></term>
<listitem>
<para
>Indica a taxa de amostragem a usar.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-h</option
></term>
<listitem>
<para
>Mostra a utilização dos comandos.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-n</option
></term>
<listitem>
<para
>Activa a transparência na rede.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-p <replaceable
>porto</replaceable
></option>
</term>
<listitem>
<para
>Define o porto de <acronym
>TCP</acronym
> a usar (implica o <option
>-n</option
>).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-u</option
></term>
<listitem>
<para
>Público e sem autenticação (perigoso).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-d</option
></term>
<listitem>
<para
>Activa a operação em 'full duplex'.</para>
</listitem>
</varlistentry>
<varlistentry>
<term
><option
>-D <replaceable
>nome do dispositivo</replaceable
></option
></term>
<listitem>
<para
>Indica o dispositivo de áudio a usar (normalmente é o <filename
>/dev/dsp</filename
>).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-F <replaceable
>fragmentos</replaceable
></option
></term>
<listitem>
<para
>Define o número de fragmentos.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-S <replaceable
>tamanho</replaceable
></option
></term>
<listitem>
<para
>Define o tamanho de cada fragmento em 'bytes'.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-s <replaceable
>segundos</replaceable
></option
></term>
<listitem>
<para
>Define o tempo de suspensão automática do servidor, em segundos. Um valor igual a zero desactiva a suspensão automática.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-m <replaceable
>nome da aplicação</replaceable
></option
></term>
<listitem>
<para
>Indica o nome de uma aplicação para usar para mostrar as mensagem de erro, de aviso e informativas. Se você estiver a correr o KDE, poderá usar o utilitário <application
>artsmessage</application
> para isto.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-N</option
></term>
<listitem>
<para
>Aumenta o tamanho dos tampões de rede para um valor adequado para correr numa LAN de 10 Mbps. Isto é equivalente a usar a opção '-w 5' (ver em baixo). </para>
</listitem>
</varlistentry>
<varlistentry>
<term
><option
>-w <replaceable
>n</replaceable
></option
></term>
<listitem>
<para
>Ao correr o <application
>artsd</application
> sobre uma ligação de rede a outra máquina, você poderá querer usar um tamanho maior dos tampões ('buffers') para evitar cortes. O aRts fornece às aplicações um tamanho mínimo sugerido. Sem esta opção, o tamanho por omissão baseia-se no valor 'tamanho do fragmento' * 'número de fragmentos'. Se usar esta opção você poderá aumentar o tamanho predefinido por um factor de <replaceable
>n</replaceable
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-l <replaceable
>nível</replaceable
></option
></term>
<listitem>
<para
>Indica o nível de informações - 3 (silencioso), 2 (avisos), 1 (informação), 0 (depuração).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-v</option
></term>
<listitem>
<para
>Mostra o número da versão.</para>
</listitem>
</varlistentry>

</variablelist>

<para
>Na maioria dos casos, bastará correr o &artsd;. </para>
</sect1>

<sect1 id="artswrapper">
<title
>&artswrapper;</title>

<para
>Para oferecer uma boa resposta em tempo-real, o &artsd; é normalmente executado como um processo em tempo-real (nas plataformas que suportem prioridades de tempo-real). Isto necessita de permissões do <systemitem class="username"
>root</systemitem
>, por isso, para minimizar as implicações de segurança, o &artsd; poderá ser iniciado com o pequeno programa de interface &artswrapper;, o qual simplesmente configura a prioridade de tempo-real (correndo como <systemitem class="username"
>root</systemitem
>) e executa depois o &artsd; como um utilizador que não o <systemitem class="username"
>root</systemitem
>. </para>

<para
>Se você tornar o 'artswrapper' 'SUID' <systemitem class="username"
>root</systemitem
>, ele irá provavelmente melhorar a qualidade da sua reprodução de áudio, reduzindo os cortes na música. Contudo, aumenta também o risco de que um erro no código ou algum utilizador malicioso faça estoirar ou prejudicar o seu sistema. Para além disso, nas máquinas multi-utilizador, se prioritizar o áudio de alta-fidelidade poderá provocar uma perda de 'performance' para os utilizadores que estão a tirar partido <quote
>produtivo</quote
> da máquina.</para>

</sect1>

<sect1 id="artsshell">
<title
>&artsshell;</title>

<para
>O comando &artsshell; pretende ser um utilitário para efectuar diversas funções relacionadas com o servidor de som. Pretende-se que o utilitário seja extendido com comandos novos no futuro (veja os comentários no código-fonte para ter algumas ideias). </para>

<para
>O comando aceita o seguinte formato: </para>

<!-- LW: FIX THIS -->

<cmdsynopsis
><command
>artsshell</command
> <group
> <arg
>suspend</arg
><arg
>status</arg
> <arg
>terminate</arg
> <arg
>autosuspend <replaceable
>segundos</replaceable
></arg
> <arg
>networkbuffers <replaceable
>n</replaceable
></arg
> <arg
>volume [<replaceable
>volume</replaceable
>]</arg
> <arg
>stereoeffect <replaceable
>opções</replaceable
></arg
> </group
> <group
> <option
>-h</option
> <option
>-q</option
> </group
> </cmdsynopsis>

<para
>artsshell [options] <replaceable
>comando</replaceable
> [<replaceable
>opções do comando</replaceable
>] </para>

<para
>São suportadas as seguintes opções: </para>

<variablelist>

<varlistentry>
<term
><option
>-q</option
></term>
<listitem>
<para
>Suprime todos os resultados.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-h</option
></term>
<listitem>
<para
>Mostra a utilização dos comandos.</para>
</listitem>
</varlistentry>

</variablelist>

<para
>São suportados os seguintes comandos:</para>

<variablelist>

<varlistentry>
<term
><option
>suspend</option
></term>
<listitem>
<para
>Suspende o servidor de som. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>status</option
></term>
<listitem>
<para
>Mostra a informação de estado do servidor de som.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>terminate</option
></term>
<listitem>
<para
>Termina o servidor de som. Isto poderá confundir e/ou estoirar as aplicações que o estejam a usar no momento. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>autosuspend</option
> <parameter
>segundos</parameter
></term>
<listitem>
<para
>Configura o tempo de suspensão automática para o número de segundos indicado. O servidor de som suspender-se-á se estiver inactivo durante esse período de tempo. Um valor igual a zero desactiva a suspensão automática. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>networkbuffers</option
> <parameter
>n</parameter
></term>
<listitem>
<para
>Define o tamanho dos tampões de rede para ser um facto de <parameter
>n</parameter
> vezes o tamanho predefinido. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>volume</option
> [<replaceable
>volume</replaceable
>]</term>
<listitem>
<para
>Altera o factor de escala para as saídas de áudio do servidor de som. O argumento <replaceable
>volume</replaceable
> é um valor de vírgula flutuante. Sem argumentos, é mostrado o volume actual. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>stereoeffect lista</option
></term>
<listitem>
<para
>Mostra todos os módulos de efeitos estéreo disponíveis.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>stereoeffect insert [top|bottom]</option
> <replaceable
>nome</replaceable
></term>
<listitem>
<para
>Introduz um efeito estéreo na pilha de efeitos. Devolve um identificador que poderá ser usado para o remover posteriormente. Poderá ser instalado no topo ou no fundo (o valor por omissão).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>stereoeffect remove</option
> <replaceable
>identificador</replaceable
></term>
<listitem>
<para
>Remove o efeito estéreo com o identificador <replaceable
>identificador</replaceable
> da pilha de efeitos.</para>
</listitem>
</varlistentry>

</variablelist>

</sect1>

<sect1 id="artsplay">
<title
><application
>artsplay</application
></title>

<para
>O comando <application
>artsplay</application
> é um utilitário simples para tocar um ficheiro de som. Ele aceita um único argumento que corresponde ao nome de um ficheiro de som que é enviado para o servidor de som de modo a ser tocado. O ficheiro de som poderá ser qualquer tipo de ficheiro de som comum como o <literal role="extension"
>wav</literal
> ou o <literal role="extension"
>au</literal
>. Este utilitário é bom para testar se o servidor de som está a funcionar. Se correr dois comandos em paralelo ou em sucessão rápida, você poderá demonstrar como os servidores de som misturam mais do que uma fonte.</para>

</sect1>

<sect1 id="artsdsp">
<title
><application
>artsdsp</application
></title>

<para
>O servidor de som só suporta as aplicações que tirem partido do &arts;. Muitas das aplicações legadas querem aceder ao dispositivo de som directamente. O comando &artsdsp; oferece uma solução intermédia que permite à maioria dessas aplicações correrem sem alterações. </para>

<para
>Quando uma aplicação é executada com o &artsdsp;, todos os acessos ao dispositivo de áudio <filename class="devicefile"
>/dev/dsp</filename
> são interceptadas e mapeadas em chamadas à <acronym
>API</acronym
> do &arts;. Embora a emulação do dispositivo não seja perfeita, a maioria das aplicações funciona desta forma, ainda que com alguma latência e degradação de performance. </para>

<para
>O comando &artsdsp; segue o formato: </para>

<!-- LW: FIX THIS -->
<para
>artsdsp [<replaceable
>opções</replaceable
>] <replaceable
>argumentos da aplicação</replaceable
> </para>

<para
>São reconhecidas as seguintes opções: </para>

<variablelist>

<varlistentry>
<term
><option
>-h</option
>, <option
>--help</option
></term>
<listitem>
<para
>Mostra uma breve ajuda.</para>
</listitem>
</varlistentry>
<varlistentry>
<term
><option
>-n</option
> <option
>--name</option
> = <replaceable
>nome</replaceable
></term>
<listitem>
<para
>Usa o <replaceable
>nome</replaceable
> para identificar o leitor no <command
>artsd</command
>.</para>

</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-m</option
> <option
>--mmap</option
></term>
<listitem>
<para
>Emula o mapeamento de memória (&eg; para o <application
>Quake</application
>).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-v</option
> <option
>--verbose</option
></term>
<listitem>
<para
>Mostra os parâmetros.</para>
</listitem>
</varlistentry>

</variablelist>

<para
>Uma invocação típica é a seguinte: </para>

<para>
<userinput
><command
>artsdsp</command
> <option
>-v</option
> <option
>-m</option
> <parameter
>realplay <replaceable
>musica.mp3</replaceable
></parameter
></userinput>
</para>

<para
>Algumas aplicações funcionam melhor com a opção <option
>--mmap</option
>. Nem todas as funcionalidades do dispositivo de som estão emuladas por completo, mas a maioria das aplicações deverá funcionar. Se encontrar alguma que não funcione, envie um relatório de erro detalhado para que os programadores o possam corrigir. Mais uma vez, lembre-se que isto é uma solução intermédia e uma espécie de 'truque sujo'; a melhor solução será adicionar o suporte nativo do &arts; às aplicações. Se a sua aplicação de som favorita não tem o suporte do &arts;, peça ao programador para o fornecer. </para>

</sect1>

<sect1 id="artscat">
<title
><application
>artscat</application
></title>

<para
>Este é um utilitário simples para enviar os dados em bruto para o servidor de som. Você precisa de indicar o formato dos dados (a taxa de amostragem, o tamanho da amostra e o número de canais). Este não é provavelmente um utilitário que use muito, mas poderá ser útil para fins de teste. A sintaxe do comando é a seguinte: </para>

<!-- LW: FIX THIS -->
 
<para
>artscat [ <replaceable
>opções</replaceable
> ] [ <replaceable
>nome do ficheiro</replaceable
> ] </para>

<para
>Se não for indicado nenhum ficheiro, irá ler do 'standard input'. São suportadas as seguintes opções: </para>

<variablelist>
<varlistentry>
<term
><option
>-r</option
> <parameter
>taxa de amostragem</parameter
></term>
<listitem>
<para
>Configura a taxa de amostragem a ser usada. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-b</option
> <parameter
>bits</parameter
></term>
<listitem>
<para
>Define o tamanho da amostra a usar (8 ou 16). </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-c</option
> <parameter
>canais</parameter
></term>
<listitem>
<para
>Define o número de canais (1 ou 2). </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-h</option
></term>
<listitem>
<para
>Mostra a utilização do comando e sai. </para>
</listitem>
</varlistentry>

</variablelist>
</sect1>

<sect1 id="artscontrol">
<title
>&artscontrol;</title>

<para
>Este é um utilitário gráfico para efectuar um dado número de tarefas relacionadas com o servidor de som. A janela por omissão mostra dois indicadores do nível do volume e uma barra para controlar o volume global. No menu <guimenu
>Ver</guimenu
>, você poderá seleccionar outras funções: </para>

<variablelist>

<varlistentry>
<term
><guimenuitem
>Osciloscópio FFT</guimenuitem
></term>
<listitem>
<para
>Abre uma janela que mostra um visualização do tipo de analisador de espectro em tempo-real. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guimenuitem
>Gestor de Áudio</guimenuitem
></term>
<listitem>
<para
>Mostra as fontes de áudio activas e permite-lhe ligá-las a qualquer um dos barramentos disponíveis. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guimenuitem
>Estado do aRts</guimenuitem
></term>
<listitem>
<para
>Mostra se o servidor de som está a correr e se o escalonamento é feito em tempo-real. Indica quando o servidor se suspende automaticamente e permite-lhe suspendê-lo imediatamente. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guimenuitem
>Gestor de MIDI</guimenuitem
></term>
<listitem>
<para
>Mostra as entradas e saídas activas de &MIDI; e permite-lhe criar ligações [TODO: Isto ainda funciona? São precisos mais detalhes]. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guimenuitem
>FreeVerb</guimenuitem
></term>
<listitem>
<para
>Liga um efeito de reverberação FreeVerb à pilha dos efeitos de saída do &arts; e permite-lhe controlar graficamente os parâmetros do efeito. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guimenuitem
>Mostrador de volume com Leds</guimenuitem
></term>
<listitem>
<para
>Muda os indicadores de volume da janela principal para usar um mostrador colorido com <acronym
>LED</acronym
>s em vez de usar barras de progresso. </para>
</listitem>
</varlistentry>

</variablelist>

</sect1>

<sect1 id="artsc-config">
<title
><application
>artsc-config</application
></title>

<para
>Este é um utilitário para ajudar os programadores a usar a <acronym
>API</acronym
> de C do &arts;. Ele mostra as opções apropriadas do compilador e do editor de ligações que são necessárias ao compilar e ao gerar um executável com o &arts;. Pretende-se que seja usado nas 'Makefile's para ajudar na portabilidade. O comando aceita três opções: </para>

<variablelist>
<varlistentry>
<term
><option
>--cflags</option
></term>
<listitem>
<para
>Mostra as opções do compilador que são necessárias ao compilar com a <acronym
>API</acronym
> de C do &arts;. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>--libs</option
></term>
<listitem>
<para
>Mostra as opções do editor de ligações que são necessárias ao gerar o executável que usa as bibliotecas da <acronym
>API</acronym
> de C do &arts;. </para>
</listitem>
</varlistentry>
<varlistentry>
<term
><acronym
>--version</acronym
></term>
<listitem>
<para
>Mostra a versão do comando <command
>artsc-config</command
>. </para>
</listitem>
</varlistentry>
</variablelist>

<para
>O resultado típico do comando é mostrado em baixo:</para>

<screen width="40"
><prompt
>%</prompt
> <userinput
><command
>artsc-config</command
> <option
>--cflags</option
></userinput>
<computeroutput
>-I/usr/local/kde3/include/artsc</computeroutput>
<prompt
>%</prompt
> <userinput
><command
>artsc-config</command
> <option
>--libs</option
></userinput>
<computeroutput
>-L/usr/local/kde3/lib -ldl -lartsc -DPIC -fPIC -lpthread</computeroutput>
<prompt
>%</prompt
> <userinput
><command
>artsc-config</command
> <option
>--version</option
></userinput>
<computeroutput
>0.9.5</computeroutput
>
</screen>

<para
>Você poderá usar este utilitário numa Makefile para uma regra do tipo: </para>

<programlisting
>artsc: artsc.c
        gcc `artsc-config --cflags` -o artsc artsc.c `artsc-config --libs`
</programlisting>

</sect1>

<sect1 id="mcopidl">
<title
>&mcopidl;</title>

<para
>O comando &mcopidl; é o compilador de ficheiros &IDL; para o &MCOP;, o 'Multimedia Communication Protocol' usado pelo &arts;. As interfaces no &arts; são definidas em &IDL;, uma 'Interface Definition Language' independente da linguagem. O utilitário &mcopidl; aceita um ficheiro &IDL; como entrada e gera ficheiros de inclusão e de código em C++ que implementam essa interface. O comando aceita a seguinte sintaxe: </para>

<!-- LW: FIX THIS -->

<para
>mcopidl [ <replaceable
>opções</replaceable
> ] <replaceable
>nome do ficheiro</replaceable
> </para>

<para
>As opções válidas são:</para>
<variablelist>
<varlistentry>
<term
><option
>-I</option
> <parameter
>directoria</parameter
></term>
<listitem>
<para
>Procura na <parameter
>directoria</parameter
> pelos ficheiros de inclusão. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-e</option
> <parameter
>nome</parameter
></term>
<listitem>
<para
>Exclui a estrutura, interface ou tipo enumerado <parameter
>nome</parameter
> da geração de código. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>-t</option
></term>
<listitem>
<para
>Cria também os ficheiros <literal role="extension"
>.mcoptype</literal
>/<literal role="extension"
>.mcopclass</literal
> que contêm a informação do tipo para o ficheiro &IDL;. </para>
</listitem>
</varlistentry>
</variablelist>

<para
>Para mais informações sobre o &MCOP; e o &IDL;, poderá ver a secção <link linkend="interfaces"
>Interfaces e &IDL;</link
>. </para>

</sect1>

</chapter>
