Constructor de acordes para guitarra
Enviado por clbustos el Vie, 03/02/2006 - 04:40.
Clasificado en:
Nota: Si quieres los acordes para tocar en la guitarra, ve a las notas de la guitarra en algo de música.
Como en mi sitio de música lo más pedido es como hacer los acordes en la guitarra, decidí que lo mejor era tener un sistema automizado para dibujar los dichosos gráficos. Jugando un poco con Ruby, llegué al siguiente programa
- #!/bin/env ruby
- require 'rvg/rvg'
- include Magick
- class Guitarchords
- attr_accessor :frets, :fingers, :capo_strings, :first_fret, :strings,:name
- def initialize
- @name=""
- @frets=3
- @fingers=[0,0,0,0,0,0]
- @capo_strings=0
- @first_fret=1
- @strings=[" "," "," "," "," "," "]
- end
- def to_s
- t=" "
- @strings.each {|s|
- t+=s+" "
- }
- t+="\n"
- t+=" ===========\n"
- if(@first_fret>1)
- t+=@first_fret.to_s.ljust(3)
- end
- if (@capo_strings>0)
- 1.upto(6) {|c|
- if(7-@capo_strings<=c)
- t+=(c<6)?"==":"="
- else
- t+="| "
- end
- }
- t+="\n -----------\n"
- end
- 1.upto(@frets) {|fret|
- t+=" " unless @first_fret>1 and @capo_strings==0 and fret==1
- @fingers.each {|finger|
- t+=(finger==fret)?"O":"|"
- t+=" "
- }
- t+="\n -----------\n"
- }
- t
- end
- end
- class GuitarchordDraw
- attr_accessor :fret_w,:fret_h,:base_x,:base_y,:f0w,:circle_r
- def initialize(gc)
- @gc=gc
- @fff=(@gc.capo_strings>1?1:0) # first fret finger
- @fret_w=40
- @fret_h=80
- @base_x=70
- @base_y=100
- @f0w=10 # fret 0 width
- @circle_r=15
- end
- def base_w
- @fret_w*5
- end
- def base_h
- @f0w+(@gc.frets+@fff)*@fret_h
- end
- def total_w
- @base_x*2+base_w
- end
- def total_y
- @base_y*2+base_h
- end
- def name_x
- total_w/2
- end
- def name_y
- @base_y/2-20
- end
- def draw(file)
- RVG::dpi = 72
- t_frets=@gc.frets+@fff
- rvg = RVG.new(60.mm, (20+20*t_frets).mm).viewbox(0,0,total_w,total_y) do |canvas|
- canvas.background_fill = 'white'
- canvas.g.translate(@base_x,@base_y) do |base|
- base.styles(:fill=>'white', :stroke=>'black', :stroke_width=>2)
- base.rect(base_w,base_h,0,0)
- 0.upto(t_frets) {|fret|
- base.line(0,@f0w+fret*@fret_h,base_w,@f0w+fret*@fret_h)
- }
- 1.upto(5) {|string|
- base.line(string*@fret_w,0,string*@fret_w,@f0w+t_frets*@fret_h)
- }
- end
- if(@gc.first_fret>1)
- canvas.g.translate(@base_x/2,@base_y+@f0w+@fret_h/2) do |ff|
- ff.styles(:font_family=>'courier',:text_anchor=>'middle', :font_size=>36)
- ff.text(0,0,@gc.first_fret.to_s)
- end
- end
- canvas.g.translate(name_x,name_y) do |name|
- name.styles(:font_family=>'serif',:text_anchor=>'middle', :font_size=>42, :font_weight=>'bold')
- name.text(0,0,@gc.name)
- end
- if (@gc.capo_strings>0)
- canvas.g.translate(@base_x,@base_y+@f0w) do |capo|
- capo.styles(:fill=>'black', :stroke=>'black', :stroke_width=>1)
- capo.rect((@gc.capo_strings-1)*@fret_w+10,10,
- (base_w)-5-(@gc.capo_strings-1)*@fret_w,@fret_h/2-10)
- end
- end
- canvas.g.translate(@base_x,@base_y-10) do |strings|
- c=0
- strings.styles(:font_family=>'courier',:text_anchor=>'middle', :font_size=>36)
- @gc.strings.each {|s|
- strings.text(c*@fret_w,0,s)
- c+=1
- }
- end
- canvas.g.translate(@base_x,@base_y+@fff*@fret_h) do |fingers|
- fingers.styles(:fill=>'black', :stroke=>'black', :stroke_width=>1)
- 0.upto(5) {|string|
- if(@gc.fingers[string]>0)
- fingers.circle(@circle_r, string*@fret_w, @gc.fingers[string]*@fret_h-(@fret_h/2)+@f0w)
- end
- }
- end
- end
- rvg.draw.write(file)
- end
- end
- g=Guitarchords.new
- g.frets=3
- g.name="D7/11(C.5)"
- g.first_fret=5
- g.capo_strings=6
- g.fingers=[0,0,2,0,3,0]
- g.strings=["o","O","o","o","o","o"]
- puts ""
- puts g.to_s
- gdd=GuitarchordDraw.new(g)
- gdd.draw("test.png")
Nada muy complicado y cumple perfectamente su función. La salida de consola es:
o O o o o o =========== 5 =========== ----------- | | | | | | ----------- | | O | | | ----------- | | | | O | -----------
Y el .png resultante:
Lo único que me falta ahora es crear un pequeño parser, que permitiría crear una base de datos de acordes como la siguiente:
# Nombre acorde:dedos en cuerda[:cuerdas a tocar[:número del primer traste[:número de dedos en cejilla]]] C:032010: O D:000232:XoOooo E:022100:O F:022100:O :1:6 G:320033:O A:002220: O B:002220: O :2:6
- 29739 lecturas

"¿...de tal manera de crear una suerte de...?" Un pelín forzado, ¿no? (perdón por el off-topic)
Jajajaja. Sí, tienes razón. Eso pasa cuando haces muchos informes psicológicos y te acostumbras a darle muchas vueltas a las cosas simples.
Lo corregiré
necesito aprender a tocar guitarra..pero no se hacer las notas.. alguien me enseña??
Visita http://musica.apsique.com/node/65 para ver los acordes de la guitarra.
necesito que me manden las notas para tocar guitarra ya que yo todavia no se he entrado a muchas paginas pero ninguna me sirve confio en ustedes bay
quiero que me dean todos los acordes de guitarra
necesitaria por varo que me den los graficos calros, no con los ___o___ i td eso, de todos los acordes para guitarra criolla, mayores, menores, bemoles, sostenidos.. etc. gracias
che mira yo soy fans de the doors de los rollig stones y me compre una guitarra pero no se como se toca y me gustaria aprender igual soy re drogin y re alclico como todo rockanrollero jajajjajaja!!!!
hola!necesito que me mandes los acordes sostenidos para guitarra criolla, bein claro,y con el numero de traste para ver en donde tengo que ir ubicando los dedos. Desde ya muchas gracias!!...
y como funciona o como lo bajo, la idea es genial, lo quiero tener para agregar las imagenes de los acordes a mi cancionero...!!!
gracias de antemano
Enviar un comentario nuevo