|Portada|Blog|Space|
[Índice] > Un script musical
Un interesante ejercicio para aprender awk, un script capaz de generar
algunas notas aleatorias.
Para simplificar usé la función seno que tiene el gnu awk aunque no es
estándar. En caso de que no esté presente se puede cambiar sin(angle) por:
angle*(1 - angle*angle*(1 - angle*angle*(0.05 - angle*angle/840))/6)
Y aquí viene el script, cambien el último pipe por >/dev/dsp en el caso
que tengan OSS:
awk '
BEGIN { M_PI = 3.14159265 }
function modulate(freq,
angle){
angle = modulate_angle[freq] + 2 * M_PI / DSPRATE * freq
modulate_angle[freq] = (angle>M_PI) ? angle-2*M_PI : angle
return sin(angle)
}
function vol(f){
vol_step++
if(rand()>0.9999){
vol_datas[f]=1
return 1
} else {
if(vol_datas[f]==0) return 0;
vol_datas[f]-=0.0005
if(vol_datas[f]<0)
vol_datas[f]=0
return vol_datas[f]
}
}
function putnote(){
v=0;
for(f=400; f<=1400; f+=200){
v+=vol(f)*modulate(f)
}
if(v>1) v=1
if(v<-1) v=-1
printf("%c", 80+int(80*v))
}
BEGIN {
DSPRATE = 8000
while(1) putnote()
}
' | sox -r 8000 -c 1 -t raw -u -1 - -t alsa default:0
---------
Los documentos en este sitio se encuentran licenciados bajo la GFDL.
Ver comentarios: [Hay i comentarios]
Para agregar un comentario: agregue a la URL: ?do=show_comment_form (explicación)