Sortir le son en écrivant dans / dev / dsp

Je sais qu'il est possible d'écrire des données arbitraires dans /dev/dsp et qu'un bruit proviendra des haut-parleurs. Mais peu importe datatables que je passe à ce file, le bruit est le même. Je me request s'il est possible de générer un son significatif en écrivant à /dev/dsp ?

Il doit être possible, même si je n'ai pas rencontré de programme pour générer un file dans ce type de format brut.

Si vous êtes intéressé par la façon dont cela fonctionne et ce qui doit être écrit, faites le périphérique pour avoir une sortie audio, vous pouvez regarder dans le code source de sox . Ce programme peut être utilisé pour transcoder un file d'input donné et le lire en sortie dans /dev/dsp . (Exécutez le programme avec l'option -t oss ).

Si vous searchz simplement le son le plus simple de la console, vous préférerez probablement utiliser ALSA au lieu d'OSS. Utilisez aplay qui fait partie de l'alsa-utils. Vous l'aurez probablement installé par défaut.

Le guide de script bash avancé . Exemple 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 (eg 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! 

Les calculs ont-ils commenté …

Si vous utilisez ALSA, vous pouvez utiliser aplay comme:

 cat foobar.wav | aplay 

La sortie ressemble à:

 Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo