Saída de som escrevendo para / dev / dsp

5

Eu sei que é possível escrever dados arbitrários em /dev/dsp e um ruído surgirá dos alto-falantes. Mas qualquer que seja o dado que eu passe para este arquivo, o barulho é o mesmo. Gostaria de saber se é possível gerar algum som significativo apenas escrevendo para /dev/dsp ?

    
por Tichomir Mitkov 01.08.2011 / 20:27

3 respostas

4

Deve ser possível, embora eu não tenha encontrado nenhum programa para gerar um arquivo nesse tipo de formato bruto.

Se você está apenas interessado em saber como funciona e o que deve ser escrito, faça com que o dispositivo tenha saída de som, você pode olhar para o código fonte do sox . Este programa pode ser usado para transcodificar um dado arquivo de entrada e reproduzi-lo enviando para /dev/dsp . (Execute o programa com a opção -t oss ).

Se você está apenas procurando o mais simples para reproduzir um som do console, provavelmente seria melhor usar ALSA em vez de OSS. Use aplay que faz parte do alsa-utils. Você provavelmente só terá instalado por padrão.

    
por 02.08.2011 / 14:45
1

O guia avançado de scripts do bash . Exemplo 29.2:

#!/bin/b[as][1]h
# music.sh

# Music without external files

# Author: Antonio Macchi
# Used in ABS Guide with permission.


#  /dev/dsp default = 8000 frames per second, 8 bits per frame (1 byte),
#+ 1 channel (mono)

duration=2000       # If 8000 bytes = 1 second, then 2000 = 1/4 second.
volume=$'\xc0'      # Max volume = \xff (or \x00).
mute=$'\x80'        # No volume = \x80 (the middle).

function mknote ()  # $1=Note Hz in bytes (e.g. A = 440Hz ::
{                   #+ 8000 fps / 440 = 16 :: A = 16 bytes per second)
  for t in 'seq 0 $duration'
  do
    test $(( $t % $1 )) = 0 && echo -n $volume || echo -n $mute
  done
}

e='mknote 49'
g='mknote 41'
a='mknote 36'
b='mknote 32'
c='mknote 30'
cis='mknote 29'
d='mknote 27'
e2='mknote 24'
n='mknote 32767'
# European notation.

echo -n "$g$e2$d$c$d$c$a$g$n$g$e$n$g$e2$d$c$c$b$c$cis$n$cis$d \
$n$g$e2$d$c$d$c$a$g$n$g$e$n$g$a$d$c$b$a$b$c" > /dev/dsp
# dsp = Digital Signal Processor

exit      # A "bonny" example of an elegant shell script!

Os cálculos comentaram ...

    
por 29.07.2014 / 09:17
0

Se você usa o ALSA, pode usar uma reprodução como:

cat foobar.wav | aplay

A saída é semelhante a:

Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
    
por 26.03.2017 / 20:15

Tags