Sonido
En numerosos instrumentos musicales de viento, el sonido no es producido por una vibración mecánica de alguna de sus partes, sino directamente por las oscilaciones de una columna de aire. A continuación mostramos distintas columnas de aire: Cerrada-Cerrada (como el Boreófono), Cerrada-Abierta (como la Zampoña), y Abierta-Abierta (como un tubo abierto cualquiera). El valor de en la columna izquierda corresponde al modo normal de vibración generado en la columna.
n | Cavidad Cerrada-Cerrada | Cavidad Cerrada-Abierta | Cavidad Abierta-Abierta |
---|---|---|---|
1 | |||
2 | |||
3 |
Código (python)
Code (python)
#* OSCILLATIONS OF AN AIR COLUMN *#
#* *#
#* This program shows how the air oscillates inside *#
#* cavities (opened and closed) when it is blown, such that *#
#* the air vibrates with a natural frequency to the system. *#
#****************************************************************#
# AUTHOR: FELIPE GONZALEZ CATALDO, November 2015.
from numpy.random import rand
from numpy import pi,sin,cos
N=2500 # Number of particles
L=10 # Length (horizontal)
t=0.0 # time
dt=0.05 # Time step
w=5.0 # Angular frequency
tmax=2*pi/w # One period T=2*pi/w
Nframes = int(tmax/dt)+1
#Cavity="C-C" # closed-closed
#Cavity="C-O" # closed-open
Cavity="O-O" # open-open
n=3 # Normal mode number n
k = n*pi/L
fase = 0.0
if Cavity=="C-O":
k=(2*n-1)*pi/(2*L)
elif Cavity=="O-O":
fase = 0.5*pi
x0=L*rand(N)
y0=rand(N)
x = list(x0)
y = list(y0)
def PrintGnuplot(frame):
print "set xtics format ' '"
print "set ytics format ' '"
# print "set terminal png" # size 600,400"
print "set output '"+str("%02d" % frame)+".png'"
print "plot [-1:11][-0.5:1.5] '-' pt 6 lc -1 ps 2 title '', '-' w l lc 10 lw 5 title '', '-' w l lc 10 lw 5 title '', '-' w l lc 10 lw 5 title '', '-' w l lc 10 lw 5 title '' "
# The points
for i in xrange(N):
print x[i],y[i]
print "e"
# Line below
print 0,0
print L,0
print "e"
# Line at the top
print 0,1
print L,1
print "e"
# Left Vertical Line
print 0,0
if Cavity=="O-O": print 0,0
else: print 0,1
print "e"
# Right Vertical Line
print L,0
if Cavity=="O-O" or Cavity=="C-O": print L,0
else: print L,1
print "e"
def NewPos(x,y,t):
for i in xrange(N):
x[i] = x0[i] + (0.1*L/n)*sin(k*x0[i]+fase)*sin(w*t)
for frame in xrange(Nframes):
PrintGnuplot(frame)
NewPos(x,y,t)
t = t+dt
Ejecutando el programa
Para ejecutar el programa, guarde el código anterior como "Columnas-de-aire.py", y ejecute
Esto generará la animación. Si desea guardar cada uno de los frame en un archivo png, quite el comentario de la linea
Para juntar las fotos png en una sola imagen animada gif, ver este link