Arquivos históricos do BR-Linux.org apresenta:

Usando o LPD para gerenciar e ouvir MP3

O texto abaixo é uma tradução de um artigo original em Inglês de autoria do Patrick Wagstrom. O Leonardo S.R. (cefet_tuc@yahoo.com.br) obteve a permissão para traduzir o texto para o nosso idioma, e enviou para publicação aqui no Linux in Brazil.

Trata-se de um tutorial sobre como adaptar o gerenciador de impressão LPD para enfileirar e ouvir MP3. Por mais que a utilidade prática possa ser questionada, no mínimo trata-se de uma maneira interessante de conhecer melhor o funcionamento do LPD.

LPD para divertir e ouvir MP3
Arquivo original:http://patrick.wagstrom.net/weblog/archives/000128.html
Escrito por: Patrick Wagstrom
Traduzido por: Leonardo S.R.

Cenário

Muitos dos verdadeiros geeks Unix reconhecerão quão agradável é o LPD como um mecanismo de queueing(tarefas) distribuído para administrar todos os trabalhos enviados à impressora. Tem uma certa simplicidade, todavia há algum poder para ir além. É uma besta difícil de domesticar, mas uma vez compreendido, tudo começará a sair precisamente como você quer.

Mas, o que a maioria das pessoas não percebe é o que LPD também pode ser usado para outras coisas. Na realidade, pode ser visto como um mecanismo geral de queueing com algumas funcionalidades adicionais para impressoras. Assim examinemos um uso mais interessante do LPD, uma máquina para distribuir um fluxo de MP3s.

Motivação

O principal motivo que me levou a esta indagação, ocorreu enquanto estava vendo estas duas fotos (um, dois) do c2k3 openBSD hackathon. Vi, obviamente, que outra pessoa já havia feito isto. E estava confiante que também conseguiria.

Motivação inicial

A primeira parada em minha indagação era consultar o 'ser' que tudo sabe da Internet, o google. O qual me mostrou uma página maravilhosa em sueco sobre como fazer esta mesma tarefa. Infelizmente, meu sueco é péssimo, mas felizmente os scripts foram escritos em bash, e o outro era apenas um arquivo de printcap.

Criando uma Entrada de printcap

A primeira coisa que você precisa fazer é criar uma entrada em seu arquivo de printcap para sua impressora de mp3. Na maioria dos sistemas este arquivo é o /etc/printcap, em meu redhat 7.3 (nenhuma placa de som no firewall openBSD) é /etc/printcap.local. Você poderá colocar o seguinte código nele:

mp3 :\ 
     :lp=/dev/null :\ 
     :sd=/var/spool/lpd/audio :\ 
     :if=/usr/local/bin/audiofilter :\ 
     :af=/var/log/audio-acct :\ 
     :lf=/var/log/audio-errs :\ 
     :sh 
Agora nós o examinaremos linha por linha. Eu ignorarei a "\" no término de quase todas linha, ela apenas informa o lpd para continuar recebendo pois há mais coisas por vir. A última linha não precisa da "\" obviamente. Filtro de Entrada de Áudio

A chave para o sistema inteiro é que todo o processo é feito pelo filtro de entrada. Em algumas plataformas pode ocorrer um erro avisando que a impressão parou enquanto uma musica está tocando, mas isso não é grande coisa. Não há nenhuma saída do filtro de entrada, e assim nada tem que ser feito depois. Você poderá colocar o código em algum lugar como /usr/local/bin/audiofilter:
#!/bin/bash
#
# This script was originally made by Teddy Hogeborn.
# Small alterations was made by:
#   Peter Lundqvist
#   Patrick Wagstrom
#
# This is a "printer filter" for playing audio files
# Este é o "filtro de impressão" para tocar arquivos de musica

for arg in "$@"; do
  case "$arg" in
    -d*) dir="${arg#-d}" ;;
    -e*) basefile="${arg#-e}" ;;
    -f*.*) ext="${arg##*.}" ;;
  esac
done

#NT: Mude as 3 linhas abaixo caso queira usar outros reprodutores.
mp3player="mpg123 -q -o oss";
modplayer="mikmod --quiet --playmode 0 --noloops --norc"
oggplayer="ogg123 --device=oss --quiet"

file="${dir}/${basefile}"
type="$(file "${file}"| sed -e 's/^[^:]*: *//')"

case "$type" in
  MP3*)
    $mp3player -
    ;;
  Ogg*Vorbis*)
    $oggplayer -
    ;;
  RIFF*\ WAVE\ audio*)
    /usr/bin/play --type=wav --silent /dev/stdin
    ;;
  *Extended\ Module\ sound\ data*|*Protracker\ module\ sound\ data*)
    $modplayer $file
    ;;
  data|*audio*)
    if ogginfo "$file" 2>/dev/null | grep --quiet -e '^header_integrity=pass' >/dev/null; then
      $oggplayer -
    elif mp3info -x "$file" 2>/dev/null| grep --quiet -e '^File:' > /dev/null; then
      $mp3player -

    else
      play --type=auto --silent "$file" || play --type="$ext" --silent "$file"
    fi
    ;;
  *) echo "$type" >&2 ;;
esac 
Uma explicação básica do que o sistema faz. O inicio do código analisa gramaticalmente os argumentos que são passados ao filtro de impressão da impressora. Os armazena então em um par de variáveis. Tem algumas declarações sobre onde você pode encontrar seu reprodutor mp3, ogg, e mod. Você está percebendo, que este sistema é extensível com pequena dificuldade.

Depois o formato do arquivo é obtido executando o programa 'file' nele. Esta pequena bela ferramenta, negligenciada pela maioria das pessoas, examinará o arquivo, e normalmente proverá com satisfatória qualidade que tipo de arquivo ele é. É ótimo para identificar arquivos com extensões incorretas.

Finalmente, o tipo do arquivo é passado para um 'case' e então o reprodutor apropriado é chamado. Em todos os casos, o fluxo de entrada é abastecido pela entrada padrão. As aplicações deveriam ser silenciosas, o lpd normalmente assume que se há qualquer saída do filtro é que algo deu errado.

Você pode precisar modificar este script. A razão principal é que algumas versões do 'file' não retornam a mesma informação do mesmo jeito. Alguns informam "MPEG 2 layer 3 audio" para um arquivo de MP3, enquanto o meu informa "MP3, 128 kBits, 44.1 kHz, Stereo" ou algo parecido. Assim, você pode precisar modificar os valores do 'case' para que o sistema funcione corretamente.

Acessando a Placa de Som

Até este ponto nós não fizemos nada que pudesse ser considerado um grande risco de segurança. Este ponto é secundário, mas você precisa permitir que sua impressora acesse sua placa som só assim a musica será tocada. Isto é feito dando permissão para escrever no /dev/audio e no /dev/dsp. Se você está com receio de fazer um simples chmod a+rw /dev/audio /dev/dsp, pois isso permite a todos fazerem o que quiserem com sua placa de som. Será melhor que você coloque todos que deverão ter esta permissão em um grupo, e ponha a conta lp neste grupo também. Por exemplo, criando um grupo chamado snduser com todas as contas que têm acesso à placa de som, e também a conta lp. Faça um chgrp snduser /dev/audio /dev/dsp e chmod g+rw /dev/audio /dev/dsp, isto deve dar um po uco mais de segurança para você.

Quando você estiver criando arquivos, você precisará criar esses dois arquivos de contabilidade que eu mencionei na entrada do /etc/printcap. Você pode fazer isto executando os comandos a seguir:

touch /var/log/audio-acct 
touch /var/log/audio-errs 
chown lp /var/log/audio-acct 
chown lp /var/log/audio-errs 
Desfrutando A Música

O passo final é desfrutar a música. Considerando que você fez tudo certo, agora pode executar lpr -Pmp3 [seu arquivo de música] e logo depois deve começar a sair musica das suas caixas de som.

Um das coisas realmente agradáveis disto é que você pode usar lpq para ver que canções estão na fila e lprm remover uma canção da fila. Aqui está exemplo (sim, eu possuo os álbuns):

[/u2/mp3]
[patrick@dreams] lpr -Pmp3 Wally\ Pleasant\ -\ Alternateen.mp3
[/u2/mp3]
[patrick@dreams] lpr -Pmp3 Wally\ Pleasant\ -\ Bigger\ Than\ Elvis\ -\ Wally\ World.mp3
[/u2/mp3]
[patrick@dreams] lpr -Pmp3 Wally\ Pleasant\ -\ In\ Love\ with\ a\ Geek.mp3
[/u2/mp3]
[patrick@dreams] lpr -Pmp3 Wally\ Pleasant\ -\ It\'s\ a\ Beautiful\ Day.mp3
[/u2/mp3]
[patrick@dreams] lpq -Pmp3
Printer: mp3@dreams
 Queue: 4 printable jobs
 Server: pid 7043 active
 Unspooler: pid 7044 active
 Status: waiting for subserver to exit at 16:22:55.342
 Rank   Owner/ID                  Class Job Files                 Size Time
active patrick@dreams+42            A    42 Wally Pleasant - A 2727348 16:22:38
2      patrick@dreams+50            A    50 Wally Pleasant - B 2679246 16:22:42
3      patrick@dreams+52            A    52 Wally Pleasant - I 3266864 16:22:49
4      patrick@dreams+54            A    54 Wally Pleasant - I 3469897 16:22:55
Não está funcionando!

Ao contrário do que você pode estar pensando, o primeiro passo se não estiver funcionando não é me enviar um e-mail sobre a configuração do seu sistema. Eu provavelmente não serei muita útil. O primeiro passo é entrar no diretório da fila de impressão, neste caso /var/spool/lpd/audio e ver o que existe nele. O arquivo que você vai querer ver é o status.pr. Este indica o estado de sua impressora. Se houve qualquer saída do script, será salvo nele. Dê uma olhada e use para uma depuração.

Questões/Idéias de Melhora

Se você tem alguma pergunta sobre este artigo e acha que é algo que deveria ser melhor explicado, me avise. Se você tiver alguma idéia para uma melhora, eu também gostaria de ouvi-la. Eu estou sempre procurando novos 'hacks' interessantes para tentar e experimentar.

Traduzido por Leonardo S.R. (cefet_tuc@yahoo.com.br)

Postado por brain em junho 11, 2003 10:03 AM

Comentários para "Usando o LPD para gerenciar e ouvir MP3"

» Postado por: Thiago em junho 27, 2003 10:13 PM, 200.221.108:

 

» Postado por: c7g em julho 14, 2003 07:06 PM, 200.222.97.:

 

» Postado por: sou analfabeto mas preciso de informações em outubro 28, 2003 03:32 PM, 200.103.245:

 

» Postado por: Luiz Felipe em dezembro 10, 2003 04:35 PM, 200.138.63.:

 

» Postado por: Leonardo S.R. em abril 24, 2004 07:13 PM, 200.242.199:

 

» Postado por: Fernando Medina em maio 9, 2004 09:09 AM, 200.151.109:

 

» Postado por: Zithromax Online em setembro 23, 2004 01:51 PM, 65.75.139.9:

 

» Postado por: Amoxicillin em outubro 4, 2004 01:18 PM, 67.19.91.50:

 

» Postado por: Cialis em outubro 8, 2004 09:31 PM, 65.75.139.9:

 

» Postado por: Levaquin em outubro 12, 2004 09:43 PM, 65.75.139.9:

 

» Postado por: Seasonale em outubro 14, 2004 04:34 PM, 65.75.139.9:

 

» Postado por: Hélio em outubro 15, 2004 12:44 PM, 200.168.110:

 

» Postado por: Elidel online em novembro 2, 2004 09:16 PM, 208.53.138.:

 

» Postado por: Jimmie em novembro 3, 2004 07:42 PM, 69.193.101.:

 

Antes de comentar...

- Preserve a qualidade desta discussão
- Leia os Termos de Uso.
- Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum.
- Mantenha o foco nos argumentos e no assunto
- Não faça ataques pessoais.
- Pense 5 vezes antes de entrar em discussões inúteis, como "qual é a melhor distribuição/ambiente gráfico/linguagem de programação/etc.", mesmo se alguém já tiver provocado - um erro não justifica o outro
- Não seja um e-mala ;-)


O Arquivo Histórico do BR-Linux.org mantém no ar (sem alteração, exceto quanto à formatação) notícias, artigos e outros textos publicados originalmente no site na segunda metade da década de 1990 e na primeira década do século XXI, que contam parte considerável a história do Linux e do Open Source no Brasil. Exceto quando indicado em contrário, a autoria dos textos é de Augusto Campos, e os termos de uso podem ser consultados na capa do BR-Linux.org. Considerando seu caráter histórico, é provável que boa parte dos links estejam quebrados, e que as informações deste texto estejam desatualizadas.