6 nov. 2018

Programa - Notas musicales

 Hay que instalar la librería: Win32::Sound de la siguiente manera:
  • Abre un terminal del PC con cmd.
  • introduce directamente: gem install win32-sound

Programa: Reproduce un sonido del altavoz interno del PC por notas musicales con la duración que le introduzcamos. (El resultado es bastante pobre)

# coding: IBM850
require 'win32/sound' 
include Win32
@uno=[65.406, 69.296, 73.416, 77.782, 82.407, 87.307, 92.499, 97.999, 103.826, 110, 116.541, 123.471]
@dos=[130.813, 138.591, 146.832, 155.563, 164.814, 174.614, 184.997, 195.998, 207.652, 220, 233.082, 246.942]
@tres=[261.626, 277.183, 293.665, 311.127, 329.628, 349.228, 369.994, 391.995, 415.305, 440, 466.164, 493.883]
@cuatro=[523.251, 554.365, 587.33, 622.254, 659.255, 698.456, 739.989, 783.991, 830.609, 880, 932.328, 987.767]
@cinco=[1046.502, 1108.731, 1174.659, 1244.508, 1318.51, 1396.913, 1479.978, 1567.982, 1661.219, 1760, 1864.655, 1975.533]
@seis=[2093.005, 2217.461, 2349.318, 2489.016, 2637.02, 2793.826, 2959.955, 3135.963, 3322.438, 3520, 3729.31, 3951.066]
@siete=[4186.009, 4434.922, 4698.636, 4978.032, 5274.041, 5587.652, 5919.911, 6271.927, 6644.875, 7040, 7458.62, 7902.133]
@ocho=[8372.018, 8869.844, 9397.273, 9956.063, 10548.082, 11175.303, 11839.822, 12543.854, 13289.75, 14080, 14917.24, 15804.266]
@todaslasnotas=[@uno, @dos, @tres, @cuatro, @cinco, @seis, @siete, @ocho]
#puts "Todas las notas son estas"
#print @todaslasnotas
 
@sostenidos=[1,3,6,8,10]
@notas=[0,2,4,5,7,9,11]
DO=@notas[0]
RE=@notas[1]
MI=@notas[2]
FA=@notas[3]
SOL=@notas[4]
LA=@notas[5]
SI=@notas[6]
 
puts "Que nota quieres que suene"
puts "Pueden ser: Do, Re, Mi Fa, Sol, La, Si"
puts "o los sostenidos: Do sostenido, Re sostenido, Fa sostenido, Sol sostenido y La sostenido"
STDOUT.flush
@resp=gets.chomp.upcase
puts "Escribe la octava: Puede ser desde la 1 a la 8"
STDOUT.flush
@oct=gets.chomp.to_i
puts "Escribe la duración de la nota en segundos"
STDOUT.flush
dura=gets.chomp.to_i
@dura=dura*1000
puts "Quieres que suene la nota #{@resp} de la octava #{@oct}"
 
if @resp == "DO SOSTENIDO" then @resp = @sostenidos[0].to_i end
if @resp == "RE SOSTENIDO" then @resp = @sostenidos[1].to_i end
if @resp == "FA SOSTENIDO" then @resp = @sostenidos[2].to_i end
if @resp == "SOL SOSTENIDO" then @resp = @sostenidos[3].to_i end
if @resp == "LA SOSTENIDO" then @resp = @sostenidos[4].to_i end
 
if @resp == "DO" then @resp = @notas[0].to_i end
if @resp == "RE" then @resp = @notas[1].to_i end
if @resp == "MI" then @resp = @notas[2].to_i end
if @resp == "FA" then @resp = @notas[3].to_i end
if @resp == "SOL" then @resp = @notas[4].to_i end
if @resp == "LA" then @resp = @notas[5].to_i end
 
puts "Ahora @resp es #{@resp}"
 
puts "de la octava #{@oct}, La nota #{@resp} tiene una frecuencia de:"
puts
if @oct == 1 then @resultado=@uno[@oct-1[@resp.to_i]] end
if @oct == 2 then @resultado=@dos[@oct-1[@resp.to_i]] end
if @oct == 2 then @resultado=@dos[@oct-1[@resp.to_i]] end
if @oct == 3 then @resultado=@tres[@oct-1[@resp.to_i]] end
if @oct == 4 then @resultado=@cuatro[@oct-1[@resp.to_i]] end
if @oct == 5 then @resultado=@cinco[@oct-1[@resp.to_i]] end
if @oct == 6 then @resultado=@seis[@oct-1[@resp.to_i]] end
if @oct == 7 then @resultado=@siete[@oct-1[@resp.to_i]] end
if @oct == 8 then @resultado=@ocho[@oct-1[@resp.to_i]] end
puts
 
puts @resultado
#puts @todaslasnotas[@oct-1[@resp.to_i]]
resultado1=@resultado.to_i
puts resultado1
Sound.beep(resultado1, @dura)
#puts Sound.devices
 
 La documentación de esta librería está en este sitio: win32-soundAquí también