[OpenBSD]

[Índice da FAQ] [Seção 12 - Questões Específicas de Hardware e Plataforma] [Seção 14 - Configuração dos Discos]

13 - Multimídia


Conteúdo


13.1 - Como eu configuro meu dispositivo de áudio?

Os dispositivos no OpenBSD relacionados ao áudio são: /dev/audio, /dev/sound, /dev/audioctl e /dev/mixer. Para uma visão geral sobre a camada de driver de áudio, leia a página de manual audio(4).

Todos os drivers de áudio suportados já estão incluídos no kernel GENERIC, então não existe a necessidade de uma configuração extra ou a instalação de drivers. Para encontrar opções do seu dispositivo específico de som, você precisa descobrir que chip de som você possui. Os chips suportados podem ser encontrados na página sobre compatibilidade de hardware da sua plataforma. Quando você já tem o OpenBSD funcionando, procure o driver de som na saída do comando dmesg(8), e leia a página de manual referente para encontrar informações mais específicas, como opções e outros detalhes sobre o driver. Um exemplo de chip de áudio na saída do dmesg é:

auich0 at pci0 dev 31 function 5 "Intel 82801BA AC97" rev 0x04: irq 10, ICH2 AC97
ac97: codec id 0x41445360 (Analog Devices AD1885)
ac97: codec features headphone, Analog Devices Phat Stereo
audio0 at auich0

A base do OpenBSD possui duas ferramentas para a monitoração e configuração de dispositivos de áudio. O audioctl(1) é usado para os parâmetros de processamento de áudio, como a codificação, taxa de amostragem e número de canais; enquanto o mixerctl(1) é usado para a mixagem dos parâmetros, como a fonte do canal, nível de ganho e mute.

O seguinte comando usa o audioctl(1) para mostrar os parâmetros de processamento padrão de um dispositivo de áudio.

$ audioctl -f /dev/audio
...
Note que -f /dev/audio foi usado explicitamente. Abrir o /dev/audio faz com que o dispositivo de áudio volte aos parâmetros padrão, que é o que queremos ver.

O audioctl(1) é útil também para explorar as capacidades de um dispositivo de áudio. Por exemplo, para ver se um dispositivo suporta algumas taxas de amostragem comuns, você pode simplesmente tentar definir a taxa de reprodução:

$ audioctl play.rate=48000
play.rate: -> 48000
$ audioctl play.rate=44100
play.rate: -> 44100
$ audioctl play.rate=22050
audioctl: set failed: Invalid argument
$ audioctl play.rate=8000
audioctl: set failed: Invalid argument
$ 
Esse dispositivo suporta taxas de reprodução de 48000 e 44100 Hz, mas não suporta 22050 ou 8000. Note que se uma taxa de amostragem não é suportada, nem sempre existe uma mensagem de erro, mas a taxa de amostragem retornada não é aquela que foi desejada.
$ audioctl play.rate=48000
play.rate: -> 48000
$ audioctl play.rate=44100
play.rate: -> 48000
$ audioctl play.rate=22050
play.rate: -> 48000
$ audioctl play.rate=8000
play.rate: -> 48000
$ 
Esse dispositivo suporta somente reprodução de 48000 Hz.

Hardware de áudio normalmente é capaz de fazer, no mínimo, alguma mixagem. Executar o mixerctl(1) sem argumentos lista os controles de mixer do dispositivo e as configurações atuais.

$ mixerctl
...
Alguns dispositivos possuem poucos controles, outros possuem cem ou mais. Note que nem toda opção, de cada chip de áudio, chega ao lado de fora. Então podem existir, por exemplo, mais saídas listadas do que saídas disponíveis fisicamente em uma placa de áudio ou placa-mãe.

Existem alguns controles que são comuns para muitos dispositivos:

Os controles de um dispositivo de áudio podem ser nomeados diferentemente. Por exemplo, pode não existir um outputs.master, demonstrado acima, mas pode exitir um outputs.outputs que faz a mesma coisa. Normalmente, os controles possuem um nome com sentido, mas algumas vezes é preciso tentar diferentes configurações para ver qual efeito cada controle possui.

Alguns dispositivos usam o que é conhecido como EAPD, que faz o desligamento ("power down") do amplificador externo. No entanto, esse é apenas outro botão liga/desliga. Ele é provavelmente chamado de "power down" porque é frequentemente usado para economizar energia, o que significa que esse tipo de controle é mais encontrado em laptops. Algumas vezes é necessário definir controles com eapd ou extamp em seus nomes para on, para ter um sinal de saída.

Como um exemplo básico do uso do mixerctl para definir o volume do canal direito e esquerdo para 200, você pode usar

$ mixerctl outputs.master=200,200
outputs.master: 255,255 -> 207,207
Veja que o valor se tornou 207. A razão disso é que esse dispositivo de áudio tem um codec AC'97, que usa somente 5 bits para o controle do volume, gerando somente 32 valores possíveis. Outro hardware pode ter resolução diferente.

Para desmutar ("unmute") o canal mestre, você deve usar

$ mixerctl outputs.master.mute=off
outputs.master.mute: on -> off

Para fazer com que as mudanças tenham efeito em cada reinicialização, edite o arquivo /etc/mixerctl.conf; por exemplo:

$ cat /etc/mixerctl.conf
outputs.master=200,200
outputs.master.mute=off
outputs.headphones=160,160
outputs.headphones.mute=off

13.2 - Execução de diversos formatos de áudio

Áudio digitalizado

Formato de áudio sem perda (AU, PCM, WAV, FLAC, TTA)

Alguns dos formatos de áudio sem perda podem ser executados sem a necessidade de programas de terceiros, contanto que eles contenham as amostras digitais não-comprimidas nos blocos de bytes. Esses formatos incluem Sun audio (AU), arquivos PCM brutos (sem os cabeçalhos) e RIFF WAV.

O OpenBSD vem com o aucat(1), um programa para gravar e executar áudio não-comprimido. O exemplo seguinte executa um arquivo WAV.

$ aucat -i filename.wav
aucat(1) com a opção -i suporta tanto arquivos sem cabeçalho quanto áudio WAV. aucat também executa arquivos de áudio Sun, onde os dados de áudio são codificados como 8 kHz monaural mulaw, que é a codificação mais comum para esse tipo de arquivo de áudio.

Também é possível executar dados de áudio não-comprimidos enviando-os diretamente para o dispositivo de áudio. Para fazer isso, você deve saber seus parâmetros principais: tipo de codificação, número de canais, taxa de amostragem, bits por amostra. Se você não sabe isso, você pode achá-los com o utilitário file(1):

$ file music.au
music.au:  Sun/NeXT audio data: 16-bit linear PCM, stereo, 44100 Hz
$ file music.wav
music.wav: Microsoft RIFF, WAVE audio data, 16 bit, stereo 44100 Hz
As únicas coisas restantes para saber sobre esses arquivos de exemplo é se eles usam ordenação de byte "little endian" e quantização linear assinada. Você pode descobrir isso através da leitura do cabeçalho com o hexdump(1). Se você está usando um arquivo sem cabeçalho (bruto), não existe uma maneira de saber antecipadamente os parâmetros. Configure os seguintes parâmetros usando o audioctl(1).
play.encoding=slinear_le
play.rate=44100
play.channels=2
play.precision=16
Próximo passo, passe o arquivo de áudio para o dispositivo de som:
$ cat music.au > /dev/sound
Se você aplicou corretamente as configurações, você deve estar ouvindo o que esperava.

Nota: Sempre use /dev/sound, e não /dev/audio, se você quer que as configurações aplicadas com o audioctl permaneçam no lugar.

Existem outros utilitários que você pode usar, como o audio/waveplay, em forma de pacote e no portes. Naturalmente, programas populares como o XMMS também são capazes de reproduzir esses arquivos, e também outros formatos de áudio.

Tirando os comentados acima, existem formatos de áudio que usam compressão de dados sem perda. Exemplos: "Free Lossless Audio Codec" (FLAC) e TTA. A implementação FLAC foi portada para o OpenBSD e pode ser encontrada em audio/flac, em forma de pacote e portes.

Formatos de áudio usando compressão com perda (Ogg Vorbis, MP3, WMA, AAC)

Métodos de compressão com perdas são frequentemente usados para áudio e outros arquivos de mídia. A ideia é que uma quantidade de dados é removida durante a compressão, mas de um modo que o resultado, comprimido, é ainda utilizável e tem uma boa qualidade para ser reproduzido. A vantagem é que essas técnicas proporcionam taxas altas de compressão, resultando em requerimentos reduzidos de espaço em disco e banda de rede.

Um bom exemplo é o formato livre, aberto e sem patentes, Ogg Vorbis. Para reproduzir arquivos Ogg Vorbis, você pode usar o utilitário ogg123, que é encontrado no pacote audio/vorbis-tools. Por exemplo:

$ ogg123 music.ogg

Audio Device:   Sun audio driver output

Playing: music.ogg
Ogg Vorbis stream: 2 channel, 44100 Hz
Time: 00:02.95 [02:21.45] of 02:24.40  (133.1 kbps)  Output Buffer  87.5%
Naturalmente, existem plugins Ogg Vorbis para muitos outros programas de áudio.

Um outro exemplo é a popular codificação "MPEG-1 Audio Layer 3" (MP3), que tem, no entanto, problemas de licenciamento e patente. Muitas ferramentas podem reproduzir arquivos MP3, basta procurar na seção audio do sistema de pacotes e portes, e escolher uma que você gosta.

E quanto ao formato proprietário "Windows Media Audio" (WMA)? Arquivos desse tipo podem ser reproduzidos usando o x11/mplayer, que usa o sistema FFmpeg.

Um bom ponto de partida para aprender mais sobre os diferentes formatos de áudio é este artigo da Wikipédia: Formatos de arquivos de áudio.

Som sintetizado

MIDI

O protocolo de Interface Digital para Instrumentos Musicais (MIDI - "Musical Instrument Digital Interface") é controlado pelos dispositivos MIDI. Se você não possui um sintetizador MIDI, mas deseja reproduzir um arquivo MIDI padrão (SMF), você pode usar um programa para renderizar os dados MIDI, gerando arquivos de áudio. Por padrão, o porte audio/timidity renderiza arquivos MIDI e os reproduz no dispositivo de áudio:
$ timidity file.mid

MOD

Um módulo de trilha sonora ("Soundtracker") é um formato binário que mistura amostras de áudio com ordens sequenciadas, tornando possível a reprodução de partes longas de música digital, com uma qualidade aceitável.

O modo mais fácil de reproduzir arquivos MOD, no OpenBSD, é provavelmente usando o programa XMMS, disponível através dos pacotes e portes. Você deve instalar o subpacote -mikmod do XMMS para fazer ele usar a biblioteca de som MikMod, que suporta os formatos MOD, S3M, IT e o módulo XM.

Você também encontra vários "trackers" na seção audio da coleção de pacotes e portes; por exemplo, tracker, soundtracker. Com esses trackers, você pode reproduzir os arquivos como também gerar seus próprios módulos. Note, no entanto, que nem todos os formatos de tracker são suportados pelas ferramentas na árvore de portes. Você é sempre bem-vindo para submeter um porte do seu programa de tracker predileto.

13.3 - Como escutar CDs de áudio no OpenBSD?

É possível reproduzir CDs de áudio tanto com o drive de CD reproduzindo o disco e enviando o áudio analógico para a placa de som, ou lendo os dados de áudio e enviando as amostras digitais para a placa de som através do barramento PCI.

Para escutar um CD de áudio usando a saída analógica do seu drive de CD-ROM, você pode:

Um utilitário de linha de comando, chamado cdio(1), foi incluído na base do sistema. Executado sem parâmetros, ele entra em modo interativo. Se você quer reproduzir imediatamente o CD, use o comando

$ cdio play

Isso reproduz a partir do primeiro drive de CD-ROM, cd0, por padrão. Note que o usuário executando o cdio deve ter permissões para ler o dispositivo de CD-ROM (por exemplo, /dev/rcd0c). Como esse dispositivo pode ser lido somente pelo root ou pelo grupo operator, por padrão, um modo mais conveniente para a utilização é adicionar o usuário no grupo operator através do ajuste da linha do grupo no /etc/group. Alternativamente, você pode modificar as permissões do dispositivo conforme necessário.

Note que você talvez precise ter que desmutar a entrada de CD no mixer. Igual às saídas, o nome atual dessa entrada pode variar entre os sistemas, mas você usará um comando como este:

$ mixerctl inputs.cd.mute=off
Também é possível que não exista uma conexão analógica entre seu drive de CD e o dispositivo de áudio. Nesse caso você pode usar o comando cdplay do cdio para enviar os dados do CD de áudio para a placa de som através do barramento PCI.
$ cdio cdplay

Se você prefere uma bela interface gráfica, existem vários reprodutores de CD, baseados no X11, na coleção de pacotes e portes. Procure na seção audio.

13.4 - Posso usar o OpenBSD para gravar amostras de áudio?

Sim. A maioria dos dispositivos suporta gravação. O aucat(1) vem com o OpenBSD e pode ser usado para gravação.
$ aucat -o file.wav
O comando acima inicia a gravação de um arquivo no formato WAV. Pressione [CTRL]-C para terminar a gravação. O arquivo conterá amostras estéreo assinadas de 16 bits, amostradas em 44.1 kHz. Outros formatos de amostragem, taxas de amostragem e número de canais, podem ser gravados. Veja o manual para mais detalhes.

Use o aucat para reproduzir o arquivo:

$ aucat -i file.wav

Se a gravação aparentemente funcionar, mas a reprodução da gravação foi silenciosa ou não foi a esperada, o mixer provavelmente precisa de algumas configurações. Tenha certeza que você selecionou o dispositivo correto para gravar e que a fonte está desmutada. Você pode definir os parâmetros necessários usando o mixerctl(1). Por exemplo:

inputs.mic.mute=off
inputs.mic.preamp=on
inputs.mic.source=mic0
record.source=mic
record.volume=255,255
record.volume.mute=off
record.mic=255
record.mic.mute=off
Essas são as configurações para a gravação a partir de um microfone. A pré-amplificação precisa estar ativada, caso contrário o som gravado pode ser um belo silêncio em alguns sistemas. No entanto, a pré-amplificação pode ser um pouco alta em outros sistemas.

13.5 - Como eu configuro um servidor de áudio?

Eu preciso de um servidor de áudio?

O utilitário aucat(1) pode ser utilizado como um servidor de áudio, o qual atua como uma camada entre o driver audio(4) e os aplicativos de áudio. Ele tem como objetivos: Se os aplicativos que você utiliza são compatíveis com o seu hardware e você não planeja executar múltiplos aplicativos concorrentemente, então você não precisa de um servidor de áudio.

Como eu configuro o aucat(1)?

Não existe arquivo de configuração e, na maioria dos casos, nenhuma modificação é necessária. Digitar:
$ aucat -l
inicia o servidor no dispositivo de áudio padrão (aquele que a ligação simbólica /dev/audio aponta), executando a 44.1kHz e utilizando dois canais (estéreo). Isso significa que aplicativos que utilizam áudio estéreo a 44.1kHz funcionam perfeitamente, ou seja, sem disparar o código de conversão. Se o dispositivo não suporta esses parâmetros, o aucat(1) seleciona automaticamente um outro conjunto de parâmetros.

Se você possui os privilégios necessários, você pode aumentar a prioridade para diminuir a probabilidade de "underruns" ou "overruns" de buffer. Por exemplo:

$ sudo renice -n -20 `pgrep -x aucat`
Note que o aucat(1) inicia no modo "full-duplex" por padrão, o que requer que o seu dispositivo suporte o modo "full-duplex". Se ele não suporta, você tem que iniciar o aucat(1) no modo apenas para reprodução ("play-only") ou apenas para gravação ("record-only"). Por exemplo:
$ aucat -l -m play

Como eu inicio o aucat(1) na inicialização do sistema?

Se você é o único usuário local da máquina, você pode iniciar o aucat(1) na inicialização do sistema a partir do rc.local(8). Por exemplo:
nice -n -20 su -m meu_nome_de_início_de_sessão -c "aucat" -l
O processo aucat(1) não pode ser compartilhado entre múltiplos usuários.

De qual latência eu preciso?

A latência é o tempo entre quando o programa toma a decisão de reproduzir uma amostra e quando o usuário escuta a amostra. Uma vez que os dados de áudio sempre são armazenados em buffer, esse atraso é proporcional ao tamanho do buffer de áudio. Os seguintes valores são recomendados: Quanto menor for o tamanho dos buffers (para alcançar a baixa latência), maior a probabilidade de ocorrer overrun/underrun. Overruns/underruns de buffer deixam o som ``gaguejado''.

No modo servidor o aucat(1) impõe uma latência mínima em todos os aplicativos de áudio, e a latência padrão é cerca de 250ms. Se você planeja utilizar aplicativos que requerem uma latência mais baixa, utilize a opção ``-b'' para selecionar a latência desejada (expressada como número de quadros). Por exemplo, a 44100 amostras por segundo, 50ms de latência corresponde a:

44100 amostras/segundo x 0,050 segundos = 2205 amostras
então execute o aucat(1) da seguinte maneira:
$ aucat -b 2205 -l

A baixa latência melhora a sincronização de áudio e vídeo?

A sincronização do áudio com o vídeo não requer baixa latência. Os problemas de sincronização frequentemente são causados pelo próprio software (implementação ruim, falhas, ...). Forçar o aplicativo a usar buffers mais pequenos (iniciando o aucat(1) no modo de baixa latência) pode esconder o problema real em alguns casos e passar a sensação de que o software funciona melhor, mas, obviamente, a coisa certa a se fazer é começar a pesquisar pela falha correspondente.

13.6 - O que posso fazer se eu tenho problemas com o áudio?

Se você não escuta nada quando reproduz algum áudio, é possível que exista um controle do mixer em uma regulagem baixa ou está simplesmente mutado. Veja a seção 13.1 - Como eu configuro meu dispositivo de áudio para configurar o mixer. Por favor, desmute todas as entradas e saídas antes de relatar um problema.

Se o som está distorcido, pode ser que sua placa de som suporte somente um conjunto único ou limitado de taxas de amostragem ou codificações. Veja a seção 13.1 - Como eu configuro meu dispositivo de áudio para exemplos sobre a determinação de quais parâmetros o seu dispositivo de áudio suporta.

Se o seu dispositivo suporta somente codificações unusuais, ou somente uma ou poucas taxas de amostragem, e os aplicativos que você utiliza não realizam as conversões de formato necessárias, considere o uso do aucat(1) como um servidor de áudio. Veja a seção 13.5 - Como eu configuro um servidor de áudio?

Se você ainda está enfrentando problemas, estas são algumas coisas para considerar:

Se você acredita que seu dispositivo deve estar funcionando, mas por qualquer que seja a razão não está, então é hora de um pouco de depuração. Os seguintes passos podem determinar se os dados estão sendo processados pelo DAC.

$ cat > /dev/audio < /dev/zero &
[1] 9926
$ audioctl play.{seek,samples,errors}
play.seek=48000
play.samples=3312000
play.errors=0
$ audioctl play.{seek,samples,errors}
play.seek=57600
play.samples=7065600
play.errors=0
$ audioctl play.{seek,samples,errors}
play.seek=48000
play.samples=9379200
play.errors=0
$ kill %1
$ fg %1
cat > /dev/audio < /dev/zero
Terminated
Aqui nós vemos que os dados processados aumentaram o contador play.samples a cada vez que nós verificamos, então os dados estão fluindo. Nós também vemos, através do play.seek, que o dispositivo está mantendo dados suficientes no buffer, assim o dispositivo não causou um "underrun" em nenhuma amostra (observando play.errors). Isso é bom.

Note que mesmo se temos alto-falantes plugados quando executamos o teste acima, você não deve ter ouvido nada. O teste envia zeros para o dispositivo, que é silêncio para todas as codificações padrão suportadas atualmente.

Já que nós sabemos que o dispositivo pode processar dados, é uma boa ideia verificar novamente as configurações do mixer. Tenha certeza de que todas as saídas e entradas estão desmutadas e em um nível razoável.

Se nesse ponto você ainda está tendo problemas, é provavelmente a hora de enviar um relato do problema. Junto com a informação normal de relato de problema, como um dmesg completo e a descrição do problema, inclua também a saída padrão do mixerctl -v e a saída do teste de processamento DAC acima.

13.7 - Como eu uso meus instrumentos MIDI?

O protocolo de Interface Digital para Instrumentos Musicais (MIDI) fornece um meio padronizado e eficiente de representar a informação de desempenho musical como dados eletrônicos. Um arquivo MIDI contém somente as instruções necessárias para o sintetizador reproduzir os sons, em vez dos sons. Mais informações: Tutorial sobre MIDI e Síntese de Música.

Para reproduzir dados MIDI, um sintetizador conectado à porta MIDI da máquina é necessário. Similarmente, para gravar dados MIDI um instrumento MIDI é necessário (por exemplo, um teclado MIDI). Certas placas de som contêm sintetizadores MIDI embutidos, que são conectados como portas MIDI. Instrumentos MIDI avançados podem conter múltiplas subpartes (sintetizadores, controle de superfícies, etc.), e elas aparecem como múltiplas portas MIDI no OpenBSD.

Quando você já tem o OpenBSD funcionando, procure as portas MIDI na saída do comando dmesg(8). Um exemplo de portas MIDI em uma saída do dmesg é:

midi0 at pcppi0: <PC speaker>
umidi0 at uhub2 port 2 configuration 1 interface 0 "Roland Roland XV-2020" rev 1.10/1.00 addr 2
midi1 at umidi0: <USB MIDI I/F>
umidi1 at uhub1 port 2 configuration 1 interface 1 "Evolution Electronics Ltd. USB Keystation 61es" rev 1.00/1.25 addr 3
midi2 at umidi1: <USB MIDI I/F>
Ele mostra três portas MIDI, correspondendo a: Para testar seu teclado MIDI, você pode usar o utilitário hexdump(1) para mostrar os dados MIDI que você está tocando nele:
$ hexdump -e '1/1 "%02x\n"' </dev/rmidi2 
90
3c
71
...
A saída do teclado pode ser conectada à entrada do sintetizador, da seguinte maneira:
$ cat -u /dev/rmidi1 >/dev/rmidi2
Agora você pode escutar no sintetizador aquilo que você está tocando no teclado MIDI. Informação adicional daquilo que você toca é capturada de /dev/rmidi1 e enviada para /dev/rmidi2 em tempo real. Leia a página de manual midi(4) para mais informações.

O utilitário principal para reproduzir arquivos MIDI padrão é o midiplay(1). Reproduzir um arquivo MIDI padrão, nesse exemplo usando o sintetizador, é tão fácil quanto:

$ midiplay -d 1 file.mid
Note que nós especificamos o número de dispositivo MIDI 1 (ou seja, /dev/rmidi1) como um parâmetro porque o dispositivo de número 0 é usado por padrão.

Para gravar arquivos MIDI você pode usar o utilitário smfrec do porte audio/midish, por exemplo:

$ smfrec -d /dev/rmidi1 -i /dev/rmidi2 file.mid
grava o que é tocado no teclado (/dev/rmidi2) enquanto envia em tempo real para o sintetizador (/dev/rmidi1), dessa forma você pode escutar o que você está tocando. Operações mais complicadas como edição, roteamento, mixagem e transformação de dados MIDI, podem ser feitas usando o utilitário rmidish do porte audio/midish.

13.8 - Me fala sobre codificação Ogg Vorbis e MP3?

Esses formatos já foram mencionados em Execução de diversos formatos de áudio. Nesta seção, fornecemos uma breve introdução a respeito da codificação de tais arquivos. Se você está interessado em aprender como esses codecs de compressão de áudio funcionam, mais informações podem ser encontradas nos artigos da Wikipédia sobre Vorbis e MP3.

Ogg Vorbis

Codificar o formato de áudio raw, WAV ou AIFF, para Ogg Vorbis, pode ser feito com o utilitário oggenc, que faz parte do pacote audio/vorbis-tools, disponível através do sistema de pacotes e portes do OpenBSD.

Digamos que você possui vários arquivos WAV prontos para serem codificados, que você, por exemplo, extraiu do seu álbum favorito a partir do CD. Para codificar todos esses arquivos, usando uma taxa de bits de aproximadamente 192 kbps, você pode usar um comando igual a este:

$ oggenc *.wav -b 192
Uma vez terminado, isso lhe dá um conjunto de arquivos .ogg no seu diretório atual. Mais exemplos, incluindo opções de codificação, podem ser encontrados na página de manual do oggenc.

MPEG-1 Audio Layer 3 (MP3)

Se por alguma razão você quer usar o formato MP3, você pode usar o "Lame ain't an MP3 encoder" (LAME), uma ferramenta educacional utilizada para aprender sobre a codificação MP3. Lame é incluído na árvore de portes do OpenBSD. Note que devido à patentes do MP3, você não encontra esse pacote no conjunto oficial de CDs.

A seguir, um exemplo simples da codificação de um arquivo WAV com uma taxa de bits de 192 kbps:

$ lame -b 192 track01.wav track01.mp3
Para todas as opções e detalhes, consulte a página de manual que vem junto com o lame.

13.9 - Como eu posso assistir DVDs de vídeo no OpenBSD?

O OpenBSD suporta mídia de DVD através do sistema de arquivos ISO 9660, que também é usado em CD-ROMs, e, desde o OpenBSD 3.8, também através do novo sistema de arquivos Universal Disk Format (UDF), que é encontrado em alguns DVDs. No entanto, quase todos os discos de DVD-Video e DVD-ROM usam o formato ponte UDF, que é uma combinação dos sistemas de arquivos DVD MicroUDF (subsistema do UDF 1.02) e ISO 9660. Esse formato é utilizado para propósitos de compatibilidade com formatos antigos.

Como a maioria dos computadores com drives de DVD-ROM usam decodificação por software, é recomendado ter no mínimo um Pentium II de 350-MHz, ou uma CPU equivalente, para assistir vídeos com uma boa qualidade.

Alguns reprodutores populares de mídia, que suportam a leitura de DVD, foram portados para o OpenBSD. Exemplos são: ogle, mplayer, xine e kaffeine. Leia as instruções de instalação que vêm junto com esses pacotes, porque essas ferramentas podem necessitar de uma configuração posterior. Com esses utilitários, é possível assistir o DVD através do acesso direto ao dispositivo bruto. Naturalmente, é também possível montar um DVD usando o mount_cd9660(8), e reproduzir os arquivos dele ou qualquer outro sistema de arquivos montado.

Notas:

13.10 - Como gravar CDs e DVDs?

13.10.1 - Introdução e configuração básica

Você primeiro deve ter certeza que seu gravador de CD/DVD foi reconhecido e configurado pelo kernel. A maioria dos dispositivos SCSI são suportados. Dispositivos IDE/ATAPI e USB são suportados através da emulação SCSI. Você encontrará rapidamente seu dispositivo na saída do dmesg(8). Apenas procure as linhas começando com "cd", por exemplo
cd0 at scsibus0 targ 0 lun 0: <TOSHIBA, CD-ROM XM-5702B, 2826> SCSI0 5/cdrom removable
cd1 at scsibus1 targ 4 lun 0: <PLEXTOR, CD-R PX-R412C, 1.04> SCSI2 5/cdrom removable

Mas o cdrecord -scanbus não funciona!

Sim. O OpenBSD utiliza um espaço de nomeamento de dispositivo diferente daquele do sistema operacional para o qual o utilitário cdrecord foi escrito. Todos os dispositivos configurados devem estar na saída do dmesg, como mencionado acima. A informação que você precisa está ali.

Error: mount_cd9660: /dev/cd2c on /mnt/cdrom: No such file or directory

Por padrão, o instalador do OpenBSD cria somente dois nós de dispositivos de cd, cd0 e cd1. Para usar o seu dispositivo cd2, você precisa criar o nó de dispositivo para ele. O modo recomendado para fazer isso é usando o script MAKEDEV(8) (selecione sua plataforma específica):
# cd /dev
# ./MAKEDEV cd2
Nos próximos passos, acessaremos o gravador de CD/DVD através do dispositivo de caractere bruto, e não o dispositivo de bloco.

Verificação da operação de gravação do CD/DVD

É recomendado verificar se o seu gravador de CD/DVD está funcionando corretamente. Neste exemplo, usarei este gravador de DVD USB 2.0:
cd2 at scsibus2 targ 1 lun 0: <LITE-ON, DVDRW LDW-851S, GS0C> SCSI0 5/cdrom removable
Tente usá-lo montando um CD/DVD nele. Se desejado, você também pode verificar a taxa de transferência que você está tendo quando copia arquivos para o seu disco rígido. O comando time(1) é um bom assistente nessa parte.

Se alguma coisa está ocorrendo de forma errada e você está recebendo erros durante essa fase, é melhor resolver o problema e não começar a gravar o CD/DVD ainda.

Eu quero gravar um CD! Podemos começar?

Antes de começar, é uma boa ideia manter em mente algumas palavras de aviso:

13.10.2 - Gravação de CDs

Criação de CD-ROMs de dados

Primeiramente, você precisa criar um sistema de arquivos ISO 9660 para colocar no CD-ROM. Para fazer isso, você pode usar o utilitário mkhybrid(8) do sistema base, ou o utilitário mkisofs, que vem com o pacote cdrtools e que faz um trabalho melhor com grandes árvores de arquivos. No exemplo a seguir, usaremos o mkhybrid, embora o uso do mkisofs seja parecido.

Para um exemplo de uso, digamos que eu queira guardar o código fonte do kernel do OpenBSD em uma imagem ISO 9660:

$ mkhybrid -R -o sys.iso /usr/src/sys

Using ALTQ_RMC.000;1 for  /usr/src/sys/altq/altq_rmclass_debug.h (altq_rmclass.h)
...
Using IEEE8021.00H;1 for  /usr/src/sys/net80211/ieee80211_amrr.c (ieee80211.c)
 10.89% done, estimate finish Sat Nov  3 08:01:23 2007
 21.78% done, estimate finish Sat Nov  3 08:01:28 2007
...
 87.12% done, estimate finish Sat Nov  3 08:01:31 2007
 98.01% done, estimate finish Sat Nov  3 08:01:32 2007
Total translation table size: 0
Total rockridge attributes bytes: 896209
Total directory bytes: 2586624
Path table size(bytes): 11886
Max brk space used 0
45919 extents written (89 Mb)

A opção -R diz ao mkhybrid para criar extensões "Rock Ridge" na imagem ISO 9660. O "Rock Ridge Interchange Protocol" foi criado para suportar as semânticas do sistema de arquivos POSIX em sistemas de arquivos ISO 9660, como nomes longos de arquivo, propriedade, permissões, ligações de arquivo, ligações simbólicas, nós de dispositivos, hierarquias profundas de arquivos (mais de 8 níveis de subdiretórios), etc.

Se você quer que os nomes longos de arquivos no seu CD-ROM sejam legíveis no sistema Windows ou DOS, você deve adicionar o sinalizador -J, para também incluir as extensões Joliet na imagem ISO 9660.

Após criar o sistema de arquivos, você pode verificá-lo montando a imagem ISO 9660. Se tudo está correto, você agora está pronto para gravar o CD-R(W). A maneira mais fácil de se fazer isso é usando o utilitário cdio(1).

Se você está usando mídias regraváveis, como um CD-RW, você precisa apagar a mídia antes de gravá-la.

# cdio -f cd1c blank
Você agora está pronto para gravar a imagem criada no exemplo acima em um CD-R(W) virgem. Você pode usar um comando similar a este:
# cdio -f cd1c tao sys.iso
Com as opções especificadas acima, estamos dizendo ao cdio para usar o segundo dispositivo de CD-ROM como o gravador de CD.

Para verificar se o CD-ROM foi gravado corretamente, você pode montá-lo e verificar se todas as coisas estão lá. Para montar o sistema de arquivos, você deve usar o dispositivo de bloco para o drive CD-ROM, que neste caso ainda é o gravador de CD:

# mount /dev/cd1c /mnt/cdrom

Criação de CDs de áudio

Para gravar CDs de áudio, você pode usar o cdio(1) com a opção tao -a.

Como um exemplo, vou fazer uma cópia de segurança de um dos meus CDs de música. Isso envolve dois passos:

  1. Extrair as faixas de áudio do CD original. Por exemplo:
    # cdio -f cd1c cdrip
    
    Esse comando extrai uma série de arquivos WAV do seu drive de CD-ROM para o seu disco.
  2. Gravar as faixas de áudio em um CD virgem. Por exemplo:
    # cdio -f cd1c tao -a *.wav
    

13.10.3 - Gravação de DVDs

Existem algumas coisas importantes sobre DVD que você deve saber antes de tentar gravar seus próprios DVDs.

Notas importantes:

Diferentes formatos de DVD

Existem vários formatos diferentes de DVD. Os mais usados são os formatos DVD-R, DVD-RW, DVD+R e DVD+RW (R significa que pode ser gravado somente uma vez, RW significa que ele pode ser regravado alguns milhares de vezes). Eles são padrões muito competitivos.

Um formato de dvd diferente é o DVD-RAM, que foi desenvolvido como um drive de dados e tem funções avançadas de gravação de pacotes, permitindo que ele seja usado como uma espécie de disco rígido óptico. DVD-RAM não é recomendado para uso com vídeos, já que os vídeos são gravados nos discos em um formato que não é compatível com reprodutores normais de DVD.

Uma coisa importante é você usar mídias que funcionam no seu gravador de DVD. Se você espera uma compatibilidade com outros reprodutores de DVD, leia esta seção da FAQ DVD.

Velocidade de gravação do DVD

Pode ser útil apontar que as indicações de velocidade do DVD são diferentes das especificações de velocidade do CD-ROM. A tabela a seguir nos dá uma visão geral:

Velocidade de leitura/gravação DVD Taxa de transferência (MB/s) Velocidade equivalente de leitura/gravação CD-R(W)
1x 1.32 9x
2x 2.64 18x
4x 5.28 36x
8x 10.57 72x

Como você pode ver na tabela, as taxas de transferência são relativamente altas, e você deve verificar se seu barramento (SCSI, (E)IDE/ATAPI, USB) está com um bom desempenho para suportá-las. Em especial, as antigas interfaces USB 1.0 e 1.1 funcionam em taxas baixas de transferências, com taxas máximas de 1.5 Mbit/s e 12 Mbit/s, respectivamente. Isso significa que o USB 1.0 tem uma saída de 178.8 kByte/s e o USB 1.1 tem uma saída máxima de 1.43 MB/s. O USB 2.0 é muito rápido: 480 Mbit/s ou 57.2 MB/s. Geralmente, as velocidades dos barramentos SCSI e (E)IDE/ATAPI são boas.

Gravação do DVD

Basicamente, o processo é muito parecido com a gravação de CD-R(W)s. O software usado, no entanto, é diferente. No momento, a melhor opção é o growisofs do pacote sysutils/dvd+rw-tools. Esse utilitário grava uma imagem ISO 9660 em uma mídia de DVD. Todos os formatos graváveis de DVD são suportados pelo dvd+rw-tools.

Caso você queira procurar mais informações sobre a mídia que está no seu gravador de DVD (por exemplo, se você perdeu o texto de informação da embalagem da mídia ou é apenas desorganizado como eu), você pode usar o utilitário dvd+rw-mediainfo. Existem duas opções para gravar o DVD:

Eu criei uma imagem ISO 9660 pré-masterizada dos módulos CVS do OpenBSD (src, xenocara, ports e www), encontrados no diretório /cvs do meu disco. Eu usei o seguinte comando, que se parece com aquele que eu usei para criar a imagem de CD-ROM.

$ mkhybrid -r -o cvs.iso /cvs
Se desejado, verifique o sistema de arquivos ISO 9660 montando a imagem. Para gravar essa imagem (cerca de 2 GB) em um disco vazio, use:
# growisofs -dvd-compat -Z /dev/rcd2c=cvs.iso
Executing 'builtin_dd if=cvs.iso of=/dev/rcd2c obs=32k seek=0'
/dev/rcd2c: pre-formatting blank DVD+RW...
/dev/rcd2c: "Current Write Speed" is 4.1x1385KBps.
  23822336/1545832448 ( 1.5%) @3.9x, remaining 5:19
  42172416/1545832448 ( 2.7%) @3.9x, remaining 5:20
  60522496/1545832448 ( 3.9%) @3.9x, remaining 4:54
...
1504706560/1545832448 (97.3%) @3.9x, remaining 0:07
1523318784/1545832448 (98.5%) @3.9x, remaining 0:04
1541898240/1545832448 (99.7%) @3.9x, remaining 0:00
/dev/rcd2c: flushing cache
/dev/rcd2c: writing lead-out
/dev/rcd2c: reloading tray
A opção -Z diz ao growisofs para gravar uma seção inicial no dispositivo, que nesse caso é meu gravador de DVD, encontrado em cd2. A opção -dvd-compat fecha o disco, isso significa que nenhuma outra seção pode ser anexada nele. Isso deve fornecer uma melhor compatibilidade com reprodutores de DVD de vídeo e algumas unidades antigas de DVD-ROM.

Note como o growisofs indica a velocidade de gravação, nesse caso a velocidade 3.9x, que é o que pode ser esperado da combinação de mídia e gravador, como indicado pelo dvd+rw-mediainfo.

Se você tem pouco espaço em disco e não pode armazenar uma imagem ISO 9660 para o DVD, você pode gravar os dados diretamente no DVD. Vamos simplesmente fazer uma simulação da criação do sistema de arquivos.

# growisofs -dry-run -Z /dev/rcd2c -R /cvs
Se funcionar, remova a opção -dry-run e comece a gravar o DVD.
# growisofs -Z /dev/rcd2c -R /cvs

É também possível anexar dados em um DVD existente, usando a opção -M, que mescla uma nova seção em uma existente:

# growisofs -M /dev/rcd2c -R /mydata
Para mais informações sobre o growisofs, leia a página de manual.

Quando você terminar a gravação do DVD, monte-o e veja se tudo que você espera está realmente lá.

Por que não estou conseguindo a velocidade de gravação que eu esperava?

Em vez da saída de gravação acima, você pode ver algo como:
   4784128/1545832448 ( 0.3%) @0.7x, remaining 26:50
   7929856/1545832448 ( 0.5%) @0.7x, remaining 29:05
  14123008/1545832448 ( 0.9%) @0.7x, remaining 27:06
...
que é muito lento. Isso significa que você não está, de alguma forma, conseguindo a saída necessária no barramento que seu gravador de DVD está usando. No exemplo acima, o gravador de DVD USB foi conectado em uma máquina em que o driver ehci(4), usado pelos controladores USB 2.0, não inicializou corretamente. Como sempre, você é bem-vindo para fornecer correções e resultados de testes. O gravador de DVD volta a utilizar a lenta interface USB 1.1, que causa a saída reduzida. O USB 1.1 é limitado à velocidade de 12 Mbit/s, que corresponde à 1.43 MB/s ou 1.08x em termos de velocidade do DVD. O gravador de DVD cai para um ritmo mais baixo que o máximo, para reduzir o risco de "buffer underruns".

13.11 - Quero meus arquivos multimídia no formato FOO.

Conversão entre diferentes formatos de áudio

Digamos que queremos processar a gravação de áudio da FAQ 13 - Gravação de áudio. Essa gravação foi armazenada no formato bruto. Será útil convertê-lo, porque o formato bruto não inclui cabeçalhos, e os parâmetros de gravação precisam ser especificados em todos os usos do arquivo.

Uma ferramenta de conversão de som é o audio/sox, disponível através dos pacotes e portes. O sox suporta os formatos AIFF, AU, MP3, Ogg Vorbis, RIFF WAV e bruto ("raw"), como também alguns outros formatos de áudio mais exóticos. A seguir, um exemplo para converter a gravação para o formato RIFF WAV.

$ sox -U -c 1 -r 8000 -b myvoice.raw myvoice.wav
Note que os parâmetros especificados correspondem aos parâmetros de gravação especificados antes da gravação. Esse foi somente um exemplo. Outras bibliotecas relacionadas a áudio podem ser usadas para a conversão de áudio.

Nota: A conversão entre diferentes formatos de compressão com perdas não é recomendada. Por exemplo, os codecs MP3 e Vorbis removem diferentes partes das ondas sonoras do áudio original. Então, ao converter um arquivo MP3 para Ogg Vorbis, o resultado final, provavelmente, soará de forma ruim em relação ao MP3 original.

Conversão entre diferentes formatos de vídeo

É importante fazer uma distinção clara entre No OpenBSD, o suporte a contêineres MPEG e AVI está mais maduro no momento.

Dois utilitários populares são o multimedia/transcode e o mencoder (parte de x11/mplayer). Eles usam ou podem usar a biblioteca libavcodec, parte do porte graphics/ffmpeg, que gera uma saída de boa qualidade. Você pode, naturalmente, usar o ffmpeg diretamente. Também deve ser possível usar o codificador XviD, encontrado em multimedia/xvidcore.

A documentação que vem com esses pacotes, na forma de páginas de manual ou documentos HTML em /usr/local/share/doc, contém muitos exemplos, então a leitura desses documentos é ALTAMENTE recomendada.

13.12 - É possível reproduzir fluxo contínuo de dados ("streaming") no OpenBSD?

Sim, é possível. Muitos fluxos de áudio e vídeo funcionam bem, em um número limitado de plataformas. Alguns deles não funcionam.

Esta seção não é planejada para ser completa, nem uma resposta excessivamente detalhada para executar todos os formatos de fluxo contínuo de dados em todas as arquiteturas de hardware. Para começar, você talvez queira aprender mais sobre mídia de fluxo contínuo de dados. Um ponto de partida um pouco antigo, mas ainda bom, é este capítulo sobre mídia de fluxo contínuo de dados do livro intitulado "Designing Web Audio", da editora O'Reilly.

A primeira coisa para entender é que existem vários protocolos diferentes de fluxo contínuo de dados. O protocolo de fluxo contínuo de dados define como os fluxos serão enviados pela rede. Eles foram desenvolvidos para permitir uma transmissão eficiente de áudio/vídeo em tempo real através da Internet. Na maioria das vezes, o protocolo de fluxo contínuo de dados é um protocolo a nível de aplicação (Camada 7), que pode usar os protocolos de transporte UDP ou TCP. O procolo de transporte UDP ("User Datagram Protocol", ou Protocolo de Datagrama do Usuário) é muito útil para esse tipo de aplicação, já que ele não faz nenhuma retransmissão de pacotes ou outro tipo de verificação. Vários protocolos, porém proprietários, foram desenvolvidos; por exemplo, o MMS ("Microsoft Media Services", ou Serviços de Mídia da Microsoft) e o RTSP ("Real Time Streaming Protocol", ou Protocolo de Transmissão de Fluxos em Tempo Real). Como nós veremos, o protocolo HTTP (que usa TCP) é usado algumas vezes, apesar dele não permitir servir fluxos em uma velocidade regular como UDP, RTSP e MMS.

Existe um formato de fluxo contínuo de dados, que é como os dados de áudio/vídeo foram organizados e como podem ser reproduzidos. Os formatos de fluxo contínuo de dados mais usados são: MP3, Real Audio (RA, RM) e Windows Media (ASF). Todas estas são tecnologias proprietárias. Ocasionalmente, você também encontrará fluxos no formato aberto Ogg Vorbis.

Como um exemplo, explicarei em alguns passos como eu fiz para escutar a Radio 1, uma das estações nacionais de rádio da Bélgica. Plugins para navegadores não estão disponíveis no OpenBSD, o que significa que a história não se resume em um "clicar e escutar".

Streams do tipo Windows Media (ASF) funcionam na maioria das vezes, apesar do fato de que eles podem conter dados em formatos suportados apenas através do porte graphics/win32-codecs, que funciona apenas na plataforma i386 ('pkg_info win32-codecs' retorna a lista dos codecs suportados). Alguns fluxos Real Audio podem funcionar na plataforma i386, usando o mplayer junto com os portes graphics/win32-codecs e emulators/fedora/base (veja esta thread na lista de discussão do portes).

13.13 - Posso usar um plugin Java no meu navegador? (somente i386 & amd64)

O plugin Java é parte do Kit de Ferramentas de Desenvolvimento Java (JDK - "Java Development Toolkit"). Por razões de licença, o OpenBSD não pode distribuir os pacotes binários do JDK. Isso significa que você terá que compilar a partir do portes. Mais informações sobre a compilação do JDK podem ser encontradas em FAQ 8 - Linguagens de Programação. Após terminar a compilação do JDK, você pode instalar o pacote JDK completo ou apenas o Ambiente de Execução Java ("Java Runtime Environment" - JRE), que está em um subpacote e contém o plugin para o navegador.

No final da instalação, são mostradas instruções sobre o uso do plugin Java no navegador Firefox e no Seamonkey. Crie a ligação simbólica como explicado, e então você deve ver o plugin Java ao digitar "about:plugins" na barra de endereço.

Para o navegador Konqueror do KDE, o binário java precisa estar em seu PATH, ou seu caminho absoluto pode ser configurado no menu Settings -> Configure Konqueror -> Java & JavaScript. Por padrão, o binário java está localizado em /usr/local/jre-versão/bin/ ou /usr/local/jdk-versão/bin/, dependendo do lugar que você instalou o JRE ou o JDK.

Nota: o plugin Java foi testado somente nos navegadores Firefox, Seamonkey e Konqueror. Se ele funciona bem para você em outro navegador, comunique-nos.

13.14 - Posso usar um plugin Flash no meu navegador? (somente i386)

O plugin Flash é distribuído pela Adobe somente no formato binário. A Adobe não fornece um plugin nativo para o OpenBSD, mas existe um plugin para Linux, que você pode usar com a emulação do Linux. Esse plugin está disponível somente para a plataforma i386.

Antes de continuar, é uma boa ideia ler sobre a emulação do Linux na página de manual compat_linux(8), e também em FAQ 9 - Como executar binários do Linux no OpenBSD.

Se você entendeu os documentos e ainda não instalou os arquivos necessários, apenas adicione o pacote fedora. Assumindo que sua variável de ambiente PKG_PATH está definida (veja a FAQ 15),

# pkg_add -i fedora_base
Isso define automaticamente kern.emul.linux=1, mas não permanentemente. Se você precisa que a emulação do Linux seja permanente, você precisa especificar isso no arquivo /etc/sysctl.conf, como explicado em FAQ 9 - Como exeuctar binários do Linux no OpenBSD.

Uma outra coisa que você deve saber, é que as bibliotecas compartilhadas e os módulos do Linux não podem ser usados com os executáveis do OpenBSD, então você também precisa de um navegador para Linux.

Um candidato é o navegador Opera, disponível na árvore de portes. O OpenBSD não distribui pacotes dele, já que a licença do Opera não é clara a respeito da sua redistribuição. No entanto, a instalação não demora muito, já que ele é distribuído no formato binário pela Opera Software. Depois disso, você pode instalar facilmente o plugin Flash a partir da árvore de portes.

# cd /usr/ports/www/opera
# make install
# cd /usr/ports/www/opera-flashplugin
# make install

Nota: Executar somente os últimos passos deve ser o suficiente: o sistema de portes instala automaticamente as dependências. Para uma maior clareza, entretanto, na explicação nós dividimos o processo em alguns passos.

Se você seguiu o guia, o plugin Flash deve estar listado quando você digita "about:plugins" na barra de endereço.

[Índice da FAQ] [Seção 12 - Questões Específicas de Hardware e Plataforma] [Seção 14 - Configuração dos Discos]


[voltar] www@openbsd.org
$OpenBSD: faq13.html,v 1.8 2010/07/17 17:38:10 ajacoutot Exp $