module Motif
Public Instance Methods
convertirABC(melodie, setChiffres=['c','d','e','f','g','a','b','c'])
click to toggle source
# File lib/rubySC/melodie/motif.rb, line 29 def convertirABC melodie, setChiffres=['c','d','e','f','g','a','b','c'] toutDansOctave melodie return melodie.map { |e| e= setChiffres[e] } end
detectPattern(melodie, filtreLongueur=3)
click to toggle source
# File lib/rubySC/melodie/motif.rb, line 3 def detectPattern melodie, filtreLongueur=3 mel=(convertirABC melodie).join siz = mel.length tmp = [] (0..siz-1).each do |n| (n..siz-1).each do |i| tmp << mel[n..i] end end tmp.to_set result=Hash.new tmp.each_with_index { |e, i| result[tmp[i]]=(mel.scan /#{tmp[i]}/).size } return result.select { |k,v| k.size>=filtreLongueur and v > 1} end
squeletteMotivique(melodie)
click to toggle source
# File lib/rubySC/melodie/motif.rb, line 37 def squeletteMotivique melodie mel=(convertirABC melodie).join patterns=detectPattern melodie, 1 #on met en exergue les plus longs patterns qui se répètent patterns=patterns.keys.group_by(&:size).reverse_each { |k,v| v.each {|i| mel.gsub!(/#{i}/, (k.to_s)*i.size) } } mel.gsub!(/[^\d]/, '0') return mel.chars.map(&:to_i) end
toutDansOctave(grille, modulo=7)
click to toggle source
transforme une melodie reduite autour de quelques valeurs neg et pos en une melodie uniquement positive RQ : on ne transforme pas 7 en “0” !!
# File lib/rubySC/melodie/motif.rb, line 59 def toutDansOctave grille, modulo=7 return grille.map { |e| if e > modulo and e > 0 e-(modulo * (e/modulo)) elsif e < 0 and e > modulo (modulo * (e/modulo))-e else e.abs end } end