• Miércoles 20 de Noviembre de 2024, 10:26

Autor Tema:  Procedure #1. Beep.  (Leído 5141 veces)

_.B._

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Procedure #1. Beep.
« en: Miércoles 4 de Febrero de 2004, 19:50 »
0
Saludos!.
Solo queria compartir algunos de mis codigos, que pienso pueden ser de utilidad para varios.

Beep.

Código: Text
  1.     PROCEDURE Beep (T,D:WORD);
  2.       BEGIN
  3.         SOUND (T);
  4.         DELAY (D);
  5.         NOSOUND
  6.       END;
  7.  

Este es un procedure muy simple, que pueden utilizar por programa, o sumarlo a alguna unidad creada por ustedes.
Simplemente utiliza el Tone y el Delay para emitir un sonido.
Creo que ahorra lineas de codigo.
¡Olmo, dame peras!
www.BernardoLG.net

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Procedure #1. Beep.
« Respuesta #1 en: Miércoles 4 de Febrero de 2004, 23:31 »
0
Recomiendo  que cuando utilizes este procedimiento agreges unas lines como estas:
  const
     Do = 54 ;
     Mi  = 82.3 ;
     La = 44 ;

Estas son las frecuencias en Hz de las notas musicales mas graves.
Para obtener una octava mas alta se multiplica las constantes por 2,4,8 etc...

ej
  Mi*2 { mi de la segunda octava}
  La*4{ la de la tercera octava}
   

No tengo todas las constantes de las frecuencias de las notas musicales ahora pero
cuando las consigo las paso en esta discucion. :comp:

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Procedure #1. Beep.
« Respuesta #2 en: Jueves 5 de Febrero de 2004, 00:41 »
0
Aqui las tengo :

Do © = 65.4
Re (D) = 73.4
Mi (E) = 82.4  
Fa (F) = 87.3
Sol (G) = 97.9
La (A) = 55 (no es 44!)
Si (B) = 61.7

Aqui una breve explicacion con teoria musical de las frecuencias de las notas musicales

Las frecuencias escritas en la tablita son las mas graves .
Para obtener una  de una octava mas alta se multiplica la constante pr 2,4,8,16,32 etc..
Asi un La agudo seria 55 * 8 = 440 ( es el la con cual se afina la guitarra)
ejemplo
   
Beep (La,100); { Hace un la durante ( lo que dure el delay 100!)}
Beep(La*8,100) ; { Lo mismo pero mas agudo}
La funcion Beep(T,W:word)  es de .B. asi que el que use estas constantes tendra
que copiar la misma de esta discucion.
Si algiuen no entendio el tema de las notas aviseme a lo mejor no fui muy claro :D   ya que toco guitarra y este tema me resulta facil pero para alguien que no sabe... :whistling:  
En fin cualquier duda NO DUDEN EN AVISARME
Chau :hola:

_.B._

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Re: Procedure #1. Beep.
« Respuesta #3 en: Jueves 5 de Febrero de 2004, 17:38 »
0
Saludos!.
Yo utilizo la siguiente tabla para las notas musicales (cada nota y su frecuencia para 5 octavas diferentes):

C (Do)
  131
  262
  523
  1046
  2096

C# / Db
  139
  277
  554
  1108
  2217

D (Re)
  147
  294
  587
  1175
  2349

D# / Eb
  156
  311
  622
  1244
  2489

E (Mi)
  165
  330
  659
  1318
  2637

F (Fa)
  175
  349
  698
  1397
  2794

F# / Gb
  185
  370
  740
  1480
  2960

G (Sol)
  196
  392
  784
  1568
  3136

G# / Ab
  208
  415
  831
  1664
  3322

A (La)
  220
  440
  880
  1760
  3520

A# / Bb
  233
  466
  932
  1866
  3729

B (Si)
  248
  494
  988
  1973
  3951

El La de 440 Hz es el La utilizado para afinar algunos instrumentos.

Bernardo L. :whistling:
¡Olmo, dame peras!
www.BernardoLG.net

TempWin

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
    • http://jab.blogia.com
Re: Procedure #1. Beep.
« Respuesta #4 en: Jueves 5 de Febrero de 2004, 22:10 »
0
Buenas!
Éste es mi primer post en este foro (sí, soy nuevo, aunque espero que dentro de un tiempo eso cambie  :)  )

Muchas gracias a _.B._ y EugenioEnko por la tabla con las frecuencias de las notas musicales :rolleyes: . Está bien saberlas.
Ahora me pondré a hacer experimentos, jeje

Salu2!
http]

FSR

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Procedure #1. Beep.
« Respuesta #5 en: Sábado 29 de Mayo de 2004, 01:08 »
0
¿Has probado lo siguiente?

Código: Text
  1. Procedure Beep;
  2.     Begin
  3.         Write(#7);
  4.     End; {Beep}
  5.  

Saludos ;)

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Procedure #1. Beep.
« Respuesta #6 en: Domingo 30 de Mayo de 2004, 22:41 »
0
Bueno este es uno de mis código antiguos para turbo pascal 7.
Si quieren tocar cualquiera de las 84 notas de un piano ojo va de [0..83]:
Nota: para afinar, cambien el 64 a un valor mayor o menor, como vean conveniente.

Lo de 2 elevado a nota/12 es cuestión de fijarse en las matemáticas simples de la música. son 12 tonos : 7notas + 5semitonos.

Código: Text
  1.  
  2.  
  3. FUNCTION ELEVAR(BASE,EXPONENTE:REAL):REAL;{cambiar a double o single o el flotante que convenga}
  4. BEGIN
  5.    ELEVAR:=EXP(LN(BASE)*EXPONENTE)
  6. END;
  7.  
  8.  
  9. PROCEDURE MUSICA(nota:byte);
  10. {OJO que no tiene delay ni nosound}
  11. BEGIN
  12.   IF nota<84 THEN SOUND(ROUND(ELEVAR(2,nota/12)*64{Afinar}))
  13. END;
  14.  
  15.  
  16.