Reproduzir um WAV através de / dev / console

0

Existe uma maneira de reproduzir um WAV através de /dev/console ? (sem ser root)

Da mesma forma que o comando shell

/dev/urandom > /dev/console

produz um som aleatório

cat music.wav > /dev/console

não funciona.

Eu posso usar /dev/dsp , mas o som não vem do alto-falante interno do PC.

    
por anonymous 03.04.2011 / 17:37

2 respostas

2

TL; DR

Não, não é possível. Use aplay ou mplayer .

Por que não?

Existem dois problemas com a sua ideia. A primeira é que gravar /dev/console resulta em caracteres escritos aparecendo no console do sistema, que é comumente usado para mostrar notificações de erro para o usuário (acredito), e não para reproduzir sons. Se de alguma forma você tiver um som escrito, eu acho que é devido à chance de 1/256 de cada personagem, o que deve fazer um bip curto.

O segundo problema é que .wav não é um fluxo de áudio bruto e não ambíguo, mesmo que seja menos complexo e (geralmente) não compactado como muitos outros formatos. Na verdade (iirc), nunca pode haver algo como um fluxo de áudio bruto e não ambíguo. Você sempre (no mínimo) precisará de um cabeçalho especificando a resolução e a taxa da amostra para fazer qualquer coisa útil com os dados. Eu ficaria muito surpreso se fosse decidido que uma das responsabilidades do kernel do Linux era decodificar vários formatos de áudio. Normalmente é uma coisa melhor feita por um programa no espaço do usuário.

Digressão:

A linha Windows 9x (pelo menos parte dela) fez a decodificação da imagem no kernel para ícones. Isso acabou por ser uma ideia menos do que estelar e causou muitos ecrãs a azul.

Solução proposta

Se você quiser tocar o seu wav a partir da linha de comando, há uma série de programas que irão decodificar o arquivo para você e comunicá-lo ao kernel, geralmente usando a interface do ALSA. Eu sugiro aplay, que está disponível na maioria dos sistemas e é bastante simplista, ou o mplayer, que também é amplamente distribuído, mas com uma complexidade muito maior. Se o seu sistema suporta som, é provável que pelo menos um deles esteja instalado.

    
por 28.03.2012 / 00:10
0

deve ser possível, mas se você concordar com a qualidade produzida, é outra história.

Em primeiro lugar, um wav é modulado por código de pulso (pcm), o alto-falante do PC é praticamente uma história on-or-off, então existem 2 opções ... analisar a freqüência que o wav deseja arquivar (será difícil se existem várias freqüências ao mesmo tempo), então faça o alto-falante reproduzir essa freqüência, ou viva com o fato de que ele só pode estar ligado ou desligado e apenas ligá-lo ou desligá-lo se os dados no wav atingirem uma determinada freqüência. limite predefinido de volume / pcm.

também o wav teria um amostrador muito maior do que o hardware do alto-falante provavelmente pode suportar (não tenho certeza disso, mas não ser capaz de definir outras amplitudes além de "tanta tensão quanto a coisa pode suportar" ou "zero" com nada no meio é o maior problema aqui.

agora ... as coisas que você quer pesquisar no método 1 são ioctl (x, KIOCSOUND, 1193180 / desired-freq-in-hz); com 0 obviamente sendo desligado. KDMKTONE ioctl em um fd em / dev / console parece supostamente produzir timbres especificados por um período especificado em jiffies.

mas se você quiser fazê-lo corretamente eu pegaria a folha de dados do chip que o alto-falante está conectado e apenas endereça a coisa diretamente sem nem se preocupar com / dev / console ou qualquer coisa do linux ... então você pode, de fato, apenas ligar a tensão ou desligá-la. que daria um som modulado pcm ... apenas sem qualquer variação de amplitude entre 'alto' e 'nada'.

provavelmente todos os métodos soam como lixo de qualquer maneira ... mas analisar a frequência primeiro e depois reproduzir uma frequência não funcionará para música que geralmente contém múltiplas freqüências ao mesmo tempo.

o ioctl inteiro KIOCSOUND / KDMKTONE parece depender das configurações clocktick no kernel, assim como o estar presente de um / dev / console e um descritor de arquivo para aquele que está sendo aberto também. eles não parecem 'apenas endereçar o pino de i / o do chip ao qual o beeper do pc está conectado'.

temporizador de interrupção programável (PIT) intel 8259 porta i / o $ 0042 r / w contador PIT 2, cassete & alto-falante (XT, AT, PS / 2)

basicamente, a abordagem usual seria programá-lo com uma frequência desejada e, em seguida, produziria bips, mas o que você quer é apenas 'ligado' ou 'desligado', então basicamente 0hz ou muito baixo hz, então reprogramar o PIT quando os dados do wav vão de '1' a 0 para desligá-lo novamente ... e assim por diante. lidar com a taxa de amostragem do arquivo wav é de software como qualquer outra coisa. (pegue a média ou simplesmente pule amostras se for muito alto - é analógico de qualquer maneira, e você só pode produzir saída digital;)

    
por 23.12.2015 / 20:53