smml 0.1.11.5 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/lib/smml/msm.rb +192 -96
 - data/lib/smml/version.rb +1 -1
 - data/tutorial_smml.md +83 -21
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 06bb5368c7eb0544ede87c56f49c7808730e974d
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 35e8347b78ef6bc939822f70df30c3c6f9980fc8
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: a266b303a40de9ce2a99da0cfaeb25ee24f03d09c3426050b09e14455d879ea8568924a3c42242d7c72808ee5495aabf37caa7af2a4c9d3934383d6582d11054
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 00c2c5d0aaa44000728c44222c1f070a054957af00699898b2c9d11816f349acf3a879b7572fa8daaec012e8afa8b6d0bddb012ec55b6514b88172d4cc512090
         
     | 
    
        data/lib/smml/msm.rb
    CHANGED
    
    | 
         @@ -89,7 +89,7 @@ syntax: ...( will be changed time after time) 
     | 
|
| 
       89 
89 
     | 
    
         
             
                (syswait:) =when using '(gm:on)' etc., this command is needed for all other tracks to adjust wait-time.
         
     | 
| 
       90 
90 
     | 
    
         
             
                ||| = track separater
         
     | 
| 
       91 
91 
     | 
    
         
             
                /// = page separater
         
     | 
| 
       92 
     | 
    
         
            -
                      series of page  
     | 
| 
      
 92 
     | 
    
         
            +
                      series of page separaters insert unique '(mark:all track mark)' to allready running tracks automaticaly.
         
     | 
| 
       93 
93 
     | 
    
         
             
                (mark:posname) =position name for adjustment of tracks after long rest etc.
         
     | 
| 
       94 
94 
     | 
    
         
             
                .DC .DS .toCODA .CODA .FINE =coda mark etc.
         
     | 
| 
       95 
95 
     | 
    
         
             
                .SKIP =skip mark on over second time
         
     | 
| 
         @@ -97,14 +97,14 @@ syntax: ...( will be changed time after time) 
     | 
|
| 
       97 
97 
     | 
    
         
             
                _snare! =percussion sound ( search word like 'snare' (can use tone number) from percussion list if exist )
         
     | 
| 
       98 
98 
     | 
    
         
             
                    similarly, _s!=snare, k:bassKick, o:openHighHat, c:closedHighHat, cc:CrachCymbal, h:highTom, l:lowTom as default.
         
     | 
| 
       99 
99 
     | 
    
         
             
                    map text personaly you set must start with tone number.
         
     | 
| 
       100 
     | 
    
         
            -
                (loadf:filename.mid,2) =load filename.mid, track 2. Track must be this only and  
     | 
| 
      
 100 
     | 
    
         
            +
                (loadf:filename.mid,2) =load filename.mid, track 2. Track must be this only and separated by '|||'.
         
     | 
| 
       101 
101 
     | 
    
         
             
                W:=abc        =macro definition. One Charactor macro can be used. use prefix '$' for refering.
         
     | 
| 
       102 
102 
     | 
    
         
             
                macro W:=abc  =macro definition.
         
     | 
| 
       103 
103 
     | 
    
         
             
                fn(x):=ab$x    =macro with args. in this case, '$fn(10)' is substituded by 'ab10'. similarly,
         
     | 
| 
       104 
104 
     | 
    
         
             
                              '$fn(:10,20,30)' = 'ab10ab20ab30'.
         
     | 
| 
       105 
105 
     | 
    
         
             
                              '$fn(4:10,20,30)' = 'ab10(wait:4)ab20(wait:4)ab30'.
         
     | 
| 
       106 
     | 
    
         
            -
                compile order is : page,track  
     | 
| 
       107 
     | 
    
         
            -
                ; = 
     | 
| 
      
 106 
     | 
    
         
            +
                compile order is : page,track separate => macro set and replace => repeat check => sound data make
         
     | 
| 
      
 107 
     | 
    
         
            +
                ; =separater. same to a new line
         
     | 
| 
       108 
108 
     | 
    
         
             
                blank =ignored
         
     | 
| 
       109 
109 
     | 
    
         
             
                ;; comment =ignored after ';;' of each line
         
     | 
| 
       110 
110 
     | 
    
         
             
                ;;;;;;     =start mark of multi-line comment. end mark is same or longer mark of ';;'. these must start from the top of line.
         
     | 
| 
         @@ -151,7 +151,7 @@ end 
     | 
|
| 
       151 
151 
     | 
    
         
             
            # num and fixed mark word, for swing rythm
         
     | 
| 
       152 
152 
     | 
    
         
             
            class MyLength < Numeric
         
     | 
| 
       153 
153 
     | 
    
         
             
              def initialize *a
         
     | 
| 
       154 
     | 
    
         
            -
                p [:in,a,a.size] if $DEBUG
         
     | 
| 
      
 154 
     | 
    
         
            +
                p [:in,a,a.size] if $DEBUG && $debuglevel>4
         
     | 
| 
       155 
155 
     | 
    
         
             
                a=a[0] if a.size==1
         
     | 
| 
       156 
156 
     | 
    
         
             
                r=[]
         
     | 
| 
       157 
157 
     | 
    
         
             
                case a
         
     | 
| 
         @@ -168,7 +168,7 @@ class MyLength < Numeric 
     | 
|
| 
       168 
168 
     | 
    
         
             
                end
         
     | 
| 
       169 
169 
     | 
    
         
             
                @s=Float(r[0])
         
     | 
| 
       170 
170 
     | 
    
         
             
                @j=([r[1]]-[nil]).flatten||[]
         
     | 
| 
       171 
     | 
    
         
            -
                p [:i,@s,@j,r,a]  if $DEBUG
         
     | 
| 
      
 171 
     | 
    
         
            +
                p [:i,@s,@j,r,a]  if $DEBUG && $debuglevel>4
         
     | 
| 
       172 
172 
     | 
    
         
             
              end
         
     | 
| 
       173 
173 
     | 
    
         
             
              def s
         
     | 
| 
       174 
174 
     | 
    
         
             
                @s
         
     | 
| 
         @@ -289,10 +289,10 @@ module MmlReg 
     | 
|
| 
       289 
289 
     | 
    
         
             
                self.r(key,sort,pre)
         
     | 
| 
       290 
290 
     | 
    
         
             
              end
         
     | 
| 
       291 
291 
     | 
    
         
             
              def self.trackr
         
     | 
| 
       292 
     | 
    
         
            -
                self.r([:hexraw,:sharp,:chord,:word,:sound,:tieNote,:register,:modifier,:velocity,:tempo,:num,:octave,:note2,:note,:mod,:note?,:sound?])
         
     | 
| 
      
 292 
     | 
    
         
            +
                self.r([:hexraw,:sharp,:chord,:sword,:word,:sound,:tieNote,:register,:modifier,:velocity,:tempo,:num,:octave,:note2,:note,:mod,:note?,:sound?])
         
     | 
| 
       293 
293 
     | 
    
         
             
              end
         
     | 
| 
       294 
294 
     | 
    
         
             
              def self.multipletr
         
     | 
| 
       295 
     | 
    
         
            -
                self.r([:note2,:word,:note,:sound,:tieNote,:register,:chord,:numswing,:num,:sharp,:octave,:mod])
         
     | 
| 
      
 295 
     | 
    
         
            +
                self.r([:note2,:sword,:word,:note,:sound,:tieNote,:register,:chord,:numswing,:num,:sharp,:octave,:mod])
         
     | 
| 
       296 
296 
     | 
    
         
             
              end
         
     | 
| 
       297 
297 
     | 
    
         
             
              def self.macroDefr
         
     | 
| 
       298 
298 
     | 
    
         
             
                self::MacroDef
         
     | 
| 
         @@ -319,6 +319,7 @@ module MmlReg 
     | 
|
| 
       319 
319 
     | 
    
         
             
                :repStart,
         
     | 
| 
       320 
320 
     | 
    
         
             
                :repEnd,
         
     | 
| 
       321 
321 
     | 
    
         
             
                :note2,
         
     | 
| 
      
 322 
     | 
    
         
            +
                :sword,
         
     | 
| 
       322 
323 
     | 
    
         
             
                :word,
         
     | 
| 
       323 
324 
     | 
    
         
             
                :modifier,
         
     | 
| 
       324 
325 
     | 
    
         
             
                :sharp,
         
     | 
| 
         @@ -355,15 +356,16 @@ module MmlReg 
     | 
|
| 
       355 
356 
     | 
    
         
             
              @@h[:repmark]="\\.FINE|\\.DS|\\.DC|\\.\\$|\\.toCODA|\\.CODA|\\.SKIP"
         
     | 
| 
       356 
357 
     | 
    
         
             
              @@h[:comment]="\\( *comment[^\(\)]*\\)"
         
     | 
| 
       357 
358 
     | 
    
         
             
              @@h[:note2]="\\( *tne *:[^\(\)]*\\)|\\( *[[:alpha:]\\-\\+]+,[^,]*\\)"
         
     | 
| 
      
 359 
     | 
    
         
            +
              @@h[:sword]="\\([^\(\):,]*:[^\(\),]+\\([^\(\)]+\\)\\)"
         
     | 
| 
       358 
360 
     | 
    
         
             
              @@h[:word]="\\([^\(\):,]*:[^\(\)]*\\)"
         
     | 
| 
       359 
361 
     | 
    
         
             
              @@h[:wordStart]="\\([^\(\):]*:"
         
     | 
| 
       360 
362 
     | 
    
         
             
              @@h[:sharp]="\\([+-]*[[:digit:]\\.]*\\)"
         
     | 
| 
       361 
363 
     | 
    
         
             
              @@h[:word?]="\\([^\(\)]*\\)"
         
     | 
| 
       362 
     | 
    
         
            -
              @@h[:chord]="\\{[^\{\}]+,[^\{\},]+\\}|:[[:alpha:]][[:alnum:]]*,"
         
     | 
| 
      
 364 
     | 
    
         
            +
              @@h[:chord]="\\{[^\{\}]+,[^\{\},]+\\}|:[[:alpha:]][[:alnum:]]*\\([-+,:[:digit:]]+\\),|:[[:alpha:]][[:alnum:]]*,"
         
     | 
| 
       363 
365 
     | 
    
         
             
              @@h[:velocity]="v[[:digit:]]+"
         
     | 
| 
       364 
366 
     | 
    
         
             
              @@h[:note]="[abcdefgACDFGr]|\\{[[:digit:]]+\\}"
         
     | 
| 
       365 
367 
     | 
    
         
             
              @@h[:note?]="[BE]"
         
     | 
| 
       366 
     | 
    
         
            -
              @@h[:dummyNote]="o"
         
     | 
| 
      
 368 
     | 
    
         
            +
              @@h[:dummyNote]="o|m|O|M"
         
     | 
| 
       367 
369 
     | 
    
         
             
              @@h[:randNote]="\\?"
         
     | 
| 
       368 
370 
     | 
    
         
             
              @@h[:sound]="_[^!]+!|="
         
     | 
| 
       369 
371 
     | 
    
         
             
              @@h[:tieNote]="~|w"
         
     | 
| 
         @@ -407,6 +409,7 @@ module MmlReg 
     | 
|
| 
       407 
409 
     | 
    
         
             
                       self.r([:macrodefAStart,:macrodefStart,:macrodefA,:macrodef])
         
     | 
| 
       408 
410 
     | 
    
         
             
              RepStrArray=["[","]",".CODA",".DS",".DC",".FINE",".toCODA",".$",".SKIP"]
         
     | 
| 
       409 
411 
     | 
    
         
             
              ArgIsOne=%w[ bendCent mark p gm gs xg loadf text ]
         
     | 
| 
      
 412 
     | 
    
         
            +
              ArgIsName=%w[ p dumpVar ]
         
     | 
| 
       410 
413 
     | 
    
         
             
              def self.event m,rest=[]
         
     | 
| 
       411 
414 
     | 
    
         
             
                ((@@keys-rest).map{|k|m=~/\A#{@@h[k]}\z/ ? k : nil}-[nil])[0]
         
     | 
| 
       412 
415 
     | 
    
         
             
              end
         
     | 
| 
         @@ -521,6 +524,77 @@ def mergeValues a,b 
     | 
|
| 
       521 
524 
     | 
    
         
             
              }
         
     | 
| 
       522 
525 
     | 
    
         
             
              r
         
     | 
| 
       523 
526 
     | 
    
         
             
            end
         
     | 
| 
      
 527 
     | 
    
         
            +
            class Chord
         
     | 
| 
      
 528 
     | 
    
         
            +
              def self.notes type,subtype
         
     | 
| 
      
 529 
     | 
    
         
            +
                ten=[0]
         
     | 
| 
      
 530 
     | 
    
         
            +
                case type
         
     | 
| 
      
 531 
     | 
    
         
            +
                when "power"
         
     | 
| 
      
 532 
     | 
    
         
            +
                  ten+=[7]
         
     | 
| 
      
 533 
     | 
    
         
            +
                when "7"
         
     | 
| 
      
 534 
     | 
    
         
            +
                  ten+=[4,7,10]
         
     | 
| 
      
 535 
     | 
    
         
            +
                when "m7"
         
     | 
| 
      
 536 
     | 
    
         
            +
                  ten+=[3,7,10]
         
     | 
| 
      
 537 
     | 
    
         
            +
                when "maj7"
         
     | 
| 
      
 538 
     | 
    
         
            +
                  ten+=[4,7,11]
         
     | 
| 
      
 539 
     | 
    
         
            +
                when "mmaj7"
         
     | 
| 
      
 540 
     | 
    
         
            +
                  ten+=[3,7,11]
         
     | 
| 
      
 541 
     | 
    
         
            +
                when "maj" # no need
         
     | 
| 
      
 542 
     | 
    
         
            +
                  ten+=[4,7]
         
     | 
| 
      
 543 
     | 
    
         
            +
                when "m"
         
     | 
| 
      
 544 
     | 
    
         
            +
                  ten+=[3,7]
         
     | 
| 
      
 545 
     | 
    
         
            +
                when "6"
         
     | 
| 
      
 546 
     | 
    
         
            +
                  ten+=[4,7,9]
         
     | 
| 
      
 547 
     | 
    
         
            +
                when "m6"
         
     | 
| 
      
 548 
     | 
    
         
            +
                  ten+=[3,7,9]
         
     | 
| 
      
 549 
     | 
    
         
            +
                when "sus4"
         
     | 
| 
      
 550 
     | 
    
         
            +
                  ten+=[5,7]
         
     | 
| 
      
 551 
     | 
    
         
            +
                when "aug", "+"
         
     | 
| 
      
 552 
     | 
    
         
            +
                  ten+=[4,8]
         
     | 
| 
      
 553 
     | 
    
         
            +
                when "dim"
         
     | 
| 
      
 554 
     | 
    
         
            +
                  ten+=[3,6]
         
     | 
| 
      
 555 
     | 
    
         
            +
                when "dim7"
         
     | 
| 
      
 556 
     | 
    
         
            +
                  ten+=[3,6,9]
         
     | 
| 
      
 557 
     | 
    
         
            +
                when ""
         
     | 
| 
      
 558 
     | 
    
         
            +
                  ten+=[4,7]
         
     | 
| 
      
 559 
     | 
    
         
            +
                else
         
     | 
| 
      
 560 
     | 
    
         
            +
                  STDERR.puts "unknown chord type? #{type}"
         
     | 
| 
      
 561 
     | 
    
         
            +
                end
         
     | 
| 
      
 562 
     | 
    
         
            +
                if subtype
         
     | 
| 
      
 563 
     | 
    
         
            +
                  tention=subtype.split(',')
         
     | 
| 
      
 564 
     | 
    
         
            +
                  tention.each{|i|
         
     | 
| 
      
 565 
     | 
    
         
            +
                    case i
         
     | 
| 
      
 566 
     | 
    
         
            +
                    when "+5"
         
     | 
| 
      
 567 
     | 
    
         
            +
                      ten=ten-[7]+[8]
         
     | 
| 
      
 568 
     | 
    
         
            +
                    when "-5"
         
     | 
| 
      
 569 
     | 
    
         
            +
                      ten=ten-[7]+[6]
         
     | 
| 
      
 570 
     | 
    
         
            +
                    when "9"||"add9"
         
     | 
| 
      
 571 
     | 
    
         
            +
                      ten=ten+[14]
         
     | 
| 
      
 572 
     | 
    
         
            +
                    when "+9"
         
     | 
| 
      
 573 
     | 
    
         
            +
                      ten=ten+[15]
         
     | 
| 
      
 574 
     | 
    
         
            +
                    when "-9"
         
     | 
| 
      
 575 
     | 
    
         
            +
                      ten=ten+[13]
         
     | 
| 
      
 576 
     | 
    
         
            +
                    when "+11"
         
     | 
| 
      
 577 
     | 
    
         
            +
                      ten=ten+[6]
         
     | 
| 
      
 578 
     | 
    
         
            +
                    when "13"
         
     | 
| 
      
 579 
     | 
    
         
            +
                      ten=ten+[9]
         
     | 
| 
      
 580 
     | 
    
         
            +
                    when "-13"
         
     | 
| 
      
 581 
     | 
    
         
            +
                      ten=ten+[8]
         
     | 
| 
      
 582 
     | 
    
         
            +
                    when /^:/
         
     | 
| 
      
 583 
     | 
    
         
            +
                      t=$'.to_i
         
     | 
| 
      
 584 
     | 
    
         
            +
                      ten=ten+[t]
         
     | 
| 
      
 585 
     | 
    
         
            +
                    else
         
     | 
| 
      
 586 
     | 
    
         
            +
                      STDERR.puts "unknown chord sub type? #{subtype}"
         
     | 
| 
      
 587 
     | 
    
         
            +
                    end
         
     | 
| 
      
 588 
     | 
    
         
            +
                  }
         
     | 
| 
      
 589 
     | 
    
         
            +
                end
         
     | 
| 
      
 590 
     | 
    
         
            +
                ten=ten.sort
         
     | 
| 
      
 591 
     | 
    
         
            +
                ten
         
     | 
| 
      
 592 
     | 
    
         
            +
              end
         
     | 
| 
      
 593 
     | 
    
         
            +
              def self.type c
         
     | 
| 
      
 594 
     | 
    
         
            +
                c=~/([^(]*)(\((.*)\))?/
         
     | 
| 
      
 595 
     | 
    
         
            +
                self.notes($1,$3)
         
     | 
| 
      
 596 
     | 
    
         
            +
              end
         
     | 
| 
      
 597 
     | 
    
         
            +
            end
         
     | 
| 
       524 
598 
     | 
    
         
             
            class Notes < Hash
         
     | 
| 
       525 
599 
     | 
    
         
             
              @@rythmChannel=9
         
     | 
| 
       526 
600 
     | 
    
         
             
              @@notes={
         
     | 
| 
         @@ -547,6 +621,15 @@ class Notes < Hash 
     | 
|
| 
       547 
621 
     | 
    
         
             
              def initialize
         
     | 
| 
       548 
622 
     | 
    
         
             
                @@notes.each{|k,v|self[k]=v}
         
     | 
| 
       549 
623 
     | 
    
         
             
              end
         
     | 
| 
      
 624 
     | 
    
         
            +
              def self.n2note num
         
     | 
| 
      
 625 
     | 
    
         
            +
                @@invert[num%@@octave]
         
     | 
| 
      
 626 
     | 
    
         
            +
              end
         
     | 
| 
      
 627 
     | 
    
         
            +
              def self.n2octave num
         
     | 
| 
      
 628 
     | 
    
         
            +
                num/@@octave-1
         
     | 
| 
      
 629 
     | 
    
         
            +
              end
         
     | 
| 
      
 630 
     | 
    
         
            +
              def self.nDisplay n
         
     | 
| 
      
 631 
     | 
    
         
            +
                "#{n}[#{self.n2octave(n)}#{self.n2note(n)}]"
         
     | 
| 
      
 632 
     | 
    
         
            +
              end
         
     | 
| 
       550 
633 
     | 
    
         
             
              def self.get last,dist=0
         
     | 
| 
       551 
634 
     | 
    
         
             
                last=~/(\-*)(\+*)([[:alpha:]])/
         
     | 
| 
       552 
635 
     | 
    
         
             
                oct=$1.size*(-1)+$2.size
         
     | 
| 
         @@ -580,6 +663,9 @@ class ScaleNotes < Array 
     | 
|
| 
       580 
663 
     | 
    
         
             
                  @@mode[s[i+1]]=tmp
         
     | 
| 
       581 
664 
     | 
    
         
             
                }
         
     | 
| 
       582 
665 
     | 
    
         
             
              end
         
     | 
| 
      
 666 
     | 
    
         
            +
              def move s
         
     | 
| 
      
 667 
     | 
    
         
            +
                initialize(self.map{|i|Notes.get(i,s)})
         
     | 
| 
      
 668 
     | 
    
         
            +
              end
         
     | 
| 
       583 
669 
     | 
    
         
             
              def keys
         
     | 
| 
       584 
670 
     | 
    
         
             
                @@mode.keys
         
     | 
| 
       585 
671 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1318,6 +1404,8 @@ module MidiHex 
     | 
|
| 
       1318 
1404 
     | 
    
         
             
              # track initialize
         
     | 
| 
       1319 
1405 
     | 
    
         
             
              def self.trackPrepare tc=0
         
     | 
| 
       1320 
1406 
     | 
    
         
             
                self.getDefault
         
     | 
| 
      
 1407 
     | 
    
         
            +
                @dummyNoteOrg=["o","O"]
         
     | 
| 
      
 1408 
     | 
    
         
            +
                @multidummySize=3
         
     | 
| 
       1321 
1409 
     | 
    
         
             
                @basekeybend=0
         
     | 
| 
       1322 
1410 
     | 
    
         
             
                @theremin=false
         
     | 
| 
       1323 
1411 
     | 
    
         
             
                @strokespeed=0
         
     | 
| 
         @@ -1381,7 +1469,7 @@ module MidiHex 
     | 
|
| 
       1381 
1469 
     | 
    
         
             
                @waitingtime=0
         
     | 
| 
       1382 
1470 
     | 
    
         
             
                @nowtime+=start
         
     | 
| 
       1383 
1471 
     | 
    
         
             
                r=[Event.new(:on)]
         
     | 
| 
       1384 
     | 
    
         
            -
                r<<Event.new(:e,start," 9#{ch} #{key} #{vel} # #{start} later, sound on only , note #{@key} velocity #{velocity}\n")
         
     | 
| 
      
 1472 
     | 
    
         
            +
                r<<Event.new(:e,start," 9#{ch} #{key} #{vel} # #{start} later, sound on only , note #{Notes.nDisplay(@key)} velocity #{velocity}\n")
         
     | 
| 
       1385 
1473 
     | 
    
         
             
                r
         
     | 
| 
       1386 
1474 
     | 
    
         
             
              end
         
     | 
| 
       1387 
1475 
     | 
    
         
             
              def self.soundOff key=@basekey,ch=@ch,sharp=0
         
     | 
| 
         @@ -1420,6 +1508,7 @@ module MidiHex 
     | 
|
| 
       1420 
1508 
     | 
    
         
             
                len+=len*self.getswing(swing)
         
     | 
| 
       1421 
1509 
     | 
    
         
             
                bendStart=@bendNow
         
     | 
| 
       1422 
1510 
     | 
    
         
             
                ch=[ch,0x0f].min
         
     | 
| 
      
 1511 
     | 
    
         
            +
                key=self.rndNote if @dummyNoteOrg.member?(key)
         
     | 
| 
       1423 
1512 
     | 
    
         
             
                key+=sharp
         
     | 
| 
       1424 
1513 
     | 
    
         
             
                @key=[[key,0x7f].min,0].max
         
     | 
| 
       1425 
1514 
     | 
    
         
             
                return self.thereminNote(len,key,velocity,ch) if @theremin
         
     | 
| 
         @@ -1440,7 +1529,7 @@ module MidiHex 
     | 
|
| 
       1440 
1529 
     | 
    
         
             
                @lenForGate=false
         
     | 
| 
       1441 
1530 
     | 
    
         
             
                @nowtime+=start
         
     | 
| 
       1442 
1531 
     | 
    
         
             
                r=[]
         
     | 
| 
       1443 
     | 
    
         
            -
                r<<Event.new(:e,start," 9#{ch} #{key} #{vel} # #{start} later, sound on note #{@key} velocity #{velocity}\n")
         
     | 
| 
      
 1532 
     | 
    
         
            +
                r<<Event.new(:e,start," 9#{ch} #{key} #{vel} # #{start} later, sound on note #{Notes.nDisplay(@key)} velocity #{velocity}\n")
         
     | 
| 
       1444 
1533 
     | 
    
         
             
                b=@preAfter.shift
         
     | 
| 
       1445 
1534 
     | 
    
         
             
                bends=expre=false
         
     | 
| 
       1446 
1535 
     | 
    
         
             
                if b
         
     | 
| 
         @@ -1471,13 +1560,29 @@ module MidiHex 
     | 
|
| 
       1471 
1560 
     | 
    
         
             
                end
         
     | 
| 
       1472 
1561 
     | 
    
         
             
                r
         
     | 
| 
       1473 
1562 
     | 
    
         
             
              end
         
     | 
| 
      
 1563 
     | 
    
         
            +
              def self.resetRand
         
     | 
| 
      
 1564 
     | 
    
         
            +
                @lastRandNote=false
         
     | 
| 
      
 1565 
     | 
    
         
            +
              end
         
     | 
| 
      
 1566 
     | 
    
         
            +
              def self.rndNote useScale=true
         
     | 
| 
      
 1567 
     | 
    
         
            +
                key=rand(0x7f)
         
     | 
| 
      
 1568 
     | 
    
         
            +
                key=self.note2key(@scalenotes.sample) if @scalenotes.size>0 && useScale
         
     | 
| 
      
 1569 
     | 
    
         
            +
                if @downRandDummy && @lastRandNote
         
     | 
| 
      
 1570 
     | 
    
         
            +
                  key-=12 while key>@lastRandNote && key>12
         
     | 
| 
      
 1571 
     | 
    
         
            +
                elsif ! @downRandDummy && @lastRandNote
         
     | 
| 
      
 1572 
     | 
    
         
            +
                  key+=12 while key<@lastRandNote && key<127-12
         
     | 
| 
      
 1573 
     | 
    
         
            +
                end
         
     | 
| 
      
 1574 
     | 
    
         
            +
                @lastRandNote=key
         
     | 
| 
      
 1575 
     | 
    
         
            +
                key
         
     | 
| 
      
 1576 
     | 
    
         
            +
              end
         
     | 
| 
       1474 
1577 
     | 
    
         
             
              def self.dummyNote key,len,accent=false,sharp=0,swing=false
         
     | 
| 
       1475 
1578 
     | 
    
         
             
                len+=len*self.getswing(swing)
         
     | 
| 
       1476 
     | 
    
         
            -
                vel=@ 
     | 
| 
      
 1579 
     | 
    
         
            +
                vel=@velocity
         
     | 
| 
       1477 
1580 
     | 
    
         
             
                vel+=@accentPlus
         
     | 
| 
      
 1581 
     | 
    
         
            +
                @downRandDummy=false
         
     | 
| 
       1478 
1582 
     | 
    
         
             
                if key=="?"
         
     | 
| 
       1479 
     | 
    
         
            -
                  key= 
     | 
| 
       1480 
     | 
    
         
            -
             
     | 
| 
      
 1583 
     | 
    
         
            +
                  key=rndNote
         
     | 
| 
      
 1584 
     | 
    
         
            +
                elsif key=="O"
         
     | 
| 
      
 1585 
     | 
    
         
            +
                  @downRandDummy=true
         
     | 
| 
       1481 
1586 
     | 
    
         
             
                end
         
     | 
| 
       1482 
1587 
     | 
    
         
             
                key=@preNote.shift if @preNote.size>0
         
     | 
| 
       1483 
1588 
     | 
    
         
             
                len=@preLength.shift if @preLength.size>0
         
     | 
| 
         @@ -1559,10 +1664,6 @@ module MidiHex 
     | 
|
| 
       1559 
1664 
     | 
    
         
             
              end
         
     | 
| 
       1560 
1665 
     | 
    
         
             
              def self.chordName c,l=false,accent=false,sharp=0,swing=false
         
     | 
| 
       1561 
1666 
     | 
    
         
             
                l+=l*self.getswing(swing)
         
     | 
| 
       1562 
     | 
    
         
            -
                c=~/(.)([^(]*)(\((.*)\))?/
         
     | 
| 
       1563 
     | 
    
         
            -
                root=$1
         
     | 
| 
       1564 
     | 
    
         
            -
                type=$2
         
     | 
| 
       1565 
     | 
    
         
            -
                subtype=$4
         
     | 
| 
       1566 
1667 
     | 
    
         
             
                same=false
         
     | 
| 
       1567 
1668 
     | 
    
         
             
                same=(@lastchordName==c) if @lastchordName
         
     | 
| 
       1568 
1669 
     | 
    
         
             
                if same
         
     | 
| 
         @@ -1573,64 +1674,12 @@ module MidiHex 
     | 
|
| 
       1573 
1674 
     | 
    
         
             
                  end
         
     | 
| 
       1574 
1675 
     | 
    
         
             
                else
         
     | 
| 
       1575 
1676 
     | 
    
         
             
                  @lastchordName=c
         
     | 
| 
      
 1677 
     | 
    
         
            +
                  c=~/(.)([^(]*)(\((.*)\))?/
         
     | 
| 
      
 1678 
     | 
    
         
            +
                  root=$1
         
     | 
| 
      
 1679 
     | 
    
         
            +
                  type=$2
         
     | 
| 
      
 1680 
     | 
    
         
            +
                  subtype=$4
         
     | 
| 
       1576 
1681 
     | 
    
         
             
                  base=self.note2key(root)+sharp
         
     | 
| 
       1577 
     | 
    
         
            -
                  ten= 
     | 
| 
       1578 
     | 
    
         
            -
                  case type
         
     | 
| 
       1579 
     | 
    
         
            -
                  when "power"
         
     | 
| 
       1580 
     | 
    
         
            -
                    ten+=[7]
         
     | 
| 
       1581 
     | 
    
         
            -
                  when "7"
         
     | 
| 
       1582 
     | 
    
         
            -
                    ten+=[4,7,10]
         
     | 
| 
       1583 
     | 
    
         
            -
                  when "m7"
         
     | 
| 
       1584 
     | 
    
         
            -
                    ten+=[3,7,10]
         
     | 
| 
       1585 
     | 
    
         
            -
                  when "maj7"
         
     | 
| 
       1586 
     | 
    
         
            -
                    ten+=[4,7,11]
         
     | 
| 
       1587 
     | 
    
         
            -
                  when "mmaj7"
         
     | 
| 
       1588 
     | 
    
         
            -
                    ten+=[3,7,11]
         
     | 
| 
       1589 
     | 
    
         
            -
                  when "maj" # no need
         
     | 
| 
       1590 
     | 
    
         
            -
                    ten+=[4,7]
         
     | 
| 
       1591 
     | 
    
         
            -
                  when "m"
         
     | 
| 
       1592 
     | 
    
         
            -
                    ten+=[3,7]
         
     | 
| 
       1593 
     | 
    
         
            -
                  when "6"
         
     | 
| 
       1594 
     | 
    
         
            -
                    ten+=[4,7,9]
         
     | 
| 
       1595 
     | 
    
         
            -
                  when "m6"
         
     | 
| 
       1596 
     | 
    
         
            -
                    ten+=[3,7,9]
         
     | 
| 
       1597 
     | 
    
         
            -
                  when "sus4"
         
     | 
| 
       1598 
     | 
    
         
            -
                    ten+=[5,7]
         
     | 
| 
       1599 
     | 
    
         
            -
                  when "aug" || "+"
         
     | 
| 
       1600 
     | 
    
         
            -
                    ten+=[4,8]
         
     | 
| 
       1601 
     | 
    
         
            -
                  when "dim"
         
     | 
| 
       1602 
     | 
    
         
            -
                    ten+=[3,6]
         
     | 
| 
       1603 
     | 
    
         
            -
                  when "dim7"
         
     | 
| 
       1604 
     | 
    
         
            -
                    ten+=[3,6,9]
         
     | 
| 
       1605 
     | 
    
         
            -
                  when ""
         
     | 
| 
       1606 
     | 
    
         
            -
                    ten+=[4,7]
         
     | 
| 
       1607 
     | 
    
         
            -
                  else
         
     | 
| 
       1608 
     | 
    
         
            -
                    STDERR.puts "unknown chord type? #{type}"
         
     | 
| 
       1609 
     | 
    
         
            -
                  end
         
     | 
| 
       1610 
     | 
    
         
            -
                  if subtype
         
     | 
| 
       1611 
     | 
    
         
            -
                    tention=subtype.split(',')
         
     | 
| 
       1612 
     | 
    
         
            -
                    tention.each{|i|
         
     | 
| 
       1613 
     | 
    
         
            -
                      case i
         
     | 
| 
       1614 
     | 
    
         
            -
                      when "+5"
         
     | 
| 
       1615 
     | 
    
         
            -
                        ten=ten-[7]+[8]
         
     | 
| 
       1616 
     | 
    
         
            -
                      when "-5"
         
     | 
| 
       1617 
     | 
    
         
            -
                        ten=ten-[7]+[6]
         
     | 
| 
       1618 
     | 
    
         
            -
                      when "9"||"add9"
         
     | 
| 
       1619 
     | 
    
         
            -
                        ten=ten+[14]
         
     | 
| 
       1620 
     | 
    
         
            -
                      when "+9"
         
     | 
| 
       1621 
     | 
    
         
            -
                        ten=ten+[15]
         
     | 
| 
       1622 
     | 
    
         
            -
                      when "-9"
         
     | 
| 
       1623 
     | 
    
         
            -
                        ten=ten+[13]
         
     | 
| 
       1624 
     | 
    
         
            -
                      when "+11"
         
     | 
| 
       1625 
     | 
    
         
            -
                        ten=ten+[6]
         
     | 
| 
       1626 
     | 
    
         
            -
                      when "13"
         
     | 
| 
       1627 
     | 
    
         
            -
                        ten=ten+[9]
         
     | 
| 
       1628 
     | 
    
         
            -
                      when "-13"
         
     | 
| 
       1629 
     | 
    
         
            -
                        ten=ten+[8]
         
     | 
| 
       1630 
     | 
    
         
            -
                      end
         
     | 
| 
       1631 
     | 
    
         
            -
                    }
         
     | 
| 
       1632 
     | 
    
         
            -
                  end
         
     | 
| 
       1633 
     | 
    
         
            -
                  ten=ten.sort
         
     | 
| 
      
 1682 
     | 
    
         
            +
                  ten=Chord.notes(type,subtype)
         
     | 
| 
       1634 
1683 
     | 
    
         
             
                  p "#{root} #{ten*','}" if $DEBUG
         
     | 
| 
       1635 
1684 
     | 
    
         
             
                  chord=ten.sort.map{|i|base+i}
         
     | 
| 
       1636 
1685 
     | 
    
         
             
                  chord=self.invert(@lastchord,chord)
         
     | 
| 
         @@ -1664,17 +1713,30 @@ module MidiHex 
     | 
|
| 
       1664 
1713 
     | 
    
         
             
              def self.chord c,l=false,accent=false,sharp=0,swing=false
         
     | 
| 
       1665 
1714 
     | 
    
         
             
                l+=l*self.getswing(swing)
         
     | 
| 
       1666 
1715 
     | 
    
         
             
                r=[]
         
     | 
| 
      
 1716 
     | 
    
         
            +
                c=c.map{|i|i =~/^\?/ ? ["?"]*@multidummySize : i }.flatten
         
     | 
| 
       1667 
1717 
     | 
    
         
             
                sspeed=@strokespeed
         
     | 
| 
       1668 
1718 
     | 
    
         
             
                c=c.reverse if @strokeUpDown<0
         
     | 
| 
       1669 
1719 
     | 
    
         
             
                span=c.size
         
     | 
| 
       1670 
1720 
     | 
    
         
             
                sspeed=l/span/@strokefaster if span*sspeed>l/@strokefaster
         
     | 
| 
       1671 
     | 
    
         
            -
                 
     | 
| 
      
 1721 
     | 
    
         
            +
                tmp=[]
         
     | 
| 
      
 1722 
     | 
    
         
            +
                ns=c.map{|i|
         
     | 
| 
      
 1723 
     | 
    
         
            +
                  case i
         
     | 
| 
      
 1724 
     | 
    
         
            +
                  when "?"
         
     | 
| 
      
 1725 
     | 
    
         
            +
                    i=self.rndNote
         
     | 
| 
      
 1726 
     | 
    
         
            +
                    i+=12 if tmp.member?(i)
         
     | 
| 
      
 1727 
     | 
    
         
            +
                    tmp<<i
         
     | 
| 
      
 1728 
     | 
    
         
            +
                    i
         
     | 
| 
      
 1729 
     | 
    
         
            +
                  else
         
     | 
| 
      
 1730 
     | 
    
         
            +
                    i
         
     | 
| 
      
 1731 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1732 
     | 
    
         
            +
                }
         
     | 
| 
      
 1733 
     | 
    
         
            +
                ns.each{|i|
         
     | 
| 
       1672 
1734 
     | 
    
         
             
                  r+=self.soundOn(i,@velocity,@ch,sharp)
         
     | 
| 
       1673 
1735 
     | 
    
         
             
                  @waitingtime+=sspeed
         
     | 
| 
       1674 
1736 
     | 
    
         
             
                }
         
     | 
| 
       1675 
1737 
     | 
    
         
             
                l-=sspeed*(span-1)
         
     | 
| 
       1676 
1738 
     | 
    
         
             
                @waitingtime,rest=self.byGate(l)
         
     | 
| 
       1677 
     | 
    
         
            -
                 
     | 
| 
      
 1739 
     | 
    
         
            +
                ns.each{|i|
         
     | 
| 
       1678 
1740 
     | 
    
         
             
                  r+=self.soundOff(i,@ch,sharp)
         
     | 
| 
       1679 
1741 
     | 
    
         
             
                }
         
     | 
| 
       1680 
1742 
     | 
    
         
             
                self.strokeUpDownReset
         
     | 
| 
         @@ -2017,13 +2079,28 @@ module MidiHex 
     | 
|
| 
       2017 
2079 
     | 
    
         
             
              end
         
     | 
| 
       2018 
2080 
     | 
    
         
             
              # todo: use scale name
         
     | 
| 
       2019 
2081 
     | 
    
         
             
              def self.scale s
         
     | 
| 
       2020 
     | 
    
         
            -
                @scalenotes.reset
         
     | 
| 
       2021 
2082 
     | 
    
         
             
                s=s.split(",")
         
     | 
| 
       2022 
2083 
     | 
    
         
             
                first=s.first
         
     | 
| 
       2023 
2084 
     | 
    
         
             
                mode=s[1]
         
     | 
| 
       2024 
     | 
    
         
            -
                if  
     | 
| 
      
 2085 
     | 
    
         
            +
                if s.size==1
         
     | 
| 
      
 2086 
     | 
    
         
            +
                  case first
         
     | 
| 
      
 2087 
     | 
    
         
            +
                  when /^[-+]/
         
     | 
| 
      
 2088 
     | 
    
         
            +
                    shift=first.to_i
         
     | 
| 
      
 2089 
     | 
    
         
            +
                    @scalenotes=@scalenotes.move(shift)
         
     | 
| 
      
 2090 
     | 
    
         
            +
                  when /^:?(.)(.*)/
         
     | 
| 
      
 2091 
     | 
    
         
            +
                    @scalenotes.reset
         
     | 
| 
      
 2092 
     | 
    
         
            +
                    base=$1
         
     | 
| 
      
 2093 
     | 
    
         
            +
                    ten=Chord.type($2)
         
     | 
| 
      
 2094 
     | 
    
         
            +
                    ten.each{|i|
         
     | 
| 
      
 2095 
     | 
    
         
            +
                      note=Notes.get(base,i) # if i=~/^[-+]+[[:digit:]]+$/
         
     | 
| 
      
 2096 
     | 
    
         
            +
                      @scalenotes<<note
         
     | 
| 
      
 2097 
     | 
    
         
            +
                    }
         
     | 
| 
      
 2098 
     | 
    
         
            +
                  end
         
     | 
| 
      
 2099 
     | 
    
         
            +
                elsif @scalenotes.keys.member?(:"#{mode}")
         
     | 
| 
      
 2100 
     | 
    
         
            +
                  @scalenotes.reset
         
     | 
| 
       2025 
2101 
     | 
    
         
             
                  @scalenotes.setmode(first,:"#{mode}")
         
     | 
| 
       2026 
2102 
     | 
    
         
             
                else
         
     | 
| 
      
 2103 
     | 
    
         
            +
                  @scalenotes.reset
         
     | 
| 
       2027 
2104 
     | 
    
         
             
                  s.each{|i|
         
     | 
| 
       2028 
2105 
     | 
    
         
             
                    note=i
         
     | 
| 
       2029 
2106 
     | 
    
         
             
                    note=Notes.get(first,i) if i=~/^[-+]+[[:digit:]]+$/
         
     | 
| 
         @@ -2143,9 +2220,10 @@ module MidiHex 
     | 
|
| 
       2143 
2220 
     | 
    
         
             
                when "+"
         
     | 
| 
       2144 
2221 
     | 
    
         
             
                  @strokeUpDown=1
         
     | 
| 
       2145 
2222 
     | 
    
         
             
                else
         
     | 
| 
       2146 
     | 
    
         
            -
                  s=s.to_i
         
     | 
| 
      
 2223 
     | 
    
         
            +
                  s=(s=~/\./ ? s.to_f : s.to_i)
         
     | 
| 
       2147 
2224 
     | 
    
         
             
                  @strokeUpDown= s<0 ? -1 : 1
         
     | 
| 
       2148 
2225 
     | 
    
         
             
                  @strokespeed=s.abs
         
     | 
| 
      
 2226 
     | 
    
         
            +
                  @strokespeed=(s.abs*@tbase).to_i if s.class==Float
         
     | 
| 
       2149 
2227 
     | 
    
         
             
                end
         
     | 
| 
       2150 
2228 
     | 
    
         
             
              end
         
     | 
| 
       2151 
2229 
     | 
    
         
             
              def self.setTheremin flag
         
     | 
| 
         @@ -2264,8 +2342,16 @@ module MidiHex 
     | 
|
| 
       2264 
2342 
     | 
    
         
             
                  STDERR.puts "register: no data"
         
     | 
| 
       2265 
2343 
     | 
    
         
             
                end
         
     | 
| 
       2266 
2344 
     | 
    
         
             
              end
         
     | 
| 
       2267 
     | 
    
         
            -
              def self.setSwing k,v
         
     | 
| 
       2268 
     | 
    
         
            -
                 
     | 
| 
      
 2345 
     | 
    
         
            +
              def self.setSwing k,v,hs=@swingHash
         
     | 
| 
      
 2346 
     | 
    
         
            +
                v=v.to_f
         
     | 
| 
      
 2347 
     | 
    
         
            +
                k=~/of/
         
     | 
| 
      
 2348 
     | 
    
         
            +
                if $&
         
     | 
| 
      
 2349 
     | 
    
         
            +
                  k,all=$`.to_i,$'.to_i
         
     | 
| 
      
 2350 
     | 
    
         
            +
                  hs[k]=v
         
     | 
| 
      
 2351 
     | 
    
         
            +
                  hs[all-k]=all-v
         
     | 
| 
      
 2352 
     | 
    
         
            +
                else
         
     | 
| 
      
 2353 
     | 
    
         
            +
                  hs[k.to_i]=v
         
     | 
| 
      
 2354 
     | 
    
         
            +
                end
         
     | 
| 
       2269 
2355 
     | 
    
         
             
              end
         
     | 
| 
       2270 
2356 
     | 
    
         
             
              def self.setRegister k,v
         
     | 
| 
       2271 
2357 
     | 
    
         
             
                @registerHash[k.to_i]=v
         
     | 
| 
         @@ -2276,14 +2362,18 @@ module MidiHex 
     | 
|
| 
       2276 
2362 
     | 
    
         
             
                @basekeyCenter=@basekey
         
     | 
| 
       2277 
2363 
     | 
    
         
             
              end
         
     | 
| 
       2278 
2364 
     | 
    
         
             
              def self.dumpVar v
         
     | 
| 
       2279 
     | 
    
         
            -
                 
     | 
| 
       2280 
     | 
    
         
            -
                 
     | 
| 
       2281 
     | 
    
         
            -
             
     | 
| 
       2282 
     | 
    
         
            -
             
     | 
| 
       2283 
     | 
    
         
            -
                   
     | 
| 
       2284 
     | 
    
         
            -
             
     | 
| 
       2285 
     | 
    
         
            -
                   
     | 
| 
       2286 
     | 
    
         
            -
             
     | 
| 
      
 2365 
     | 
    
         
            +
                vars=self.instance_variables.map{|i|i.to_s[1..-1]}.sort
         
     | 
| 
      
 2366 
     | 
    
         
            +
                s=v.split(',')
         
     | 
| 
      
 2367 
     | 
    
         
            +
                s.each{|v|
         
     | 
| 
      
 2368 
     | 
    
         
            +
                  v=~/\A[[:alnum:]]+\z/
         
     | 
| 
      
 2369 
     | 
    
         
            +
                  if $& && vars.member?(v)
         
     | 
| 
      
 2370 
     | 
    
         
            +
                    puts "@#{v} #{eval("@#{v}")}"
         
     | 
| 
      
 2371 
     | 
    
         
            +
                  elsif v=="?"
         
     | 
| 
      
 2372 
     | 
    
         
            +
                    puts vars*", "
         
     | 
| 
      
 2373 
     | 
    
         
            +
                  else
         
     | 
| 
      
 2374 
     | 
    
         
            +
                    puts "bad name '#{v}'"
         
     | 
| 
      
 2375 
     | 
    
         
            +
                  end
         
     | 
| 
      
 2376 
     | 
    
         
            +
                }
         
     | 
| 
       2287 
2377 
     | 
    
         
             
              end
         
     | 
| 
       2288 
2378 
     | 
    
         
             
              def self.key2bend k
         
     | 
| 
       2289 
2379 
     | 
    
         
             
                v=k.class==Float ? @bendCent*(k-k.to_i) : 0
         
     | 
| 
         @@ -2406,7 +2496,7 @@ module MidiHex 
     | 
|
| 
       2406 
2496 
     | 
    
         
             
                  case i
         
     | 
| 
       2407 
2497 
     | 
    
         
             
                  when /^\(setSwing:(.*)\)/
         
     | 
| 
       2408 
2498 
     | 
    
         
             
                    k,v=$1.split(',')
         
     | 
| 
       2409 
     | 
    
         
            -
                     
     | 
| 
      
 2499 
     | 
    
         
            +
                    self.setSwing(k,v,swingHash)
         
     | 
| 
       2410 
2500 
     | 
    
         
             
                    res<<[:modifier,i]
         
     | 
| 
       2411 
2501 
     | 
    
         
             
                  when /^(\*)?([[:digit:].]+)(_([[:digit:]]+)j,)?/
         
     | 
| 
       2412 
2502 
     | 
    
         
             
                    tick=$1? $2.to_f : $2.to_f*tbase
         
     | 
| 
         @@ -2720,8 +2810,8 @@ module MidiHex 
     | 
|
| 
       2720 
2810 
     | 
    
         
             
                    @h<<[:soundOn,i]
         
     | 
| 
       2721 
2811 
     | 
    
         
             
                  when /^\(off:(.*)\)/
         
     | 
| 
       2722 
2812 
     | 
    
         
             
                    @h<<[:soundOff,$1]
         
     | 
| 
       2723 
     | 
    
         
            -
                  when /^\( 
     | 
| 
       2724 
     | 
    
         
            -
                    @h<<[:call,:scale,$ 
     | 
| 
      
 2813 
     | 
    
         
            +
                  when /^\(s(cale)?:(.*)\)/
         
     | 
| 
      
 2814 
     | 
    
         
            +
                    @h<<[:call,:scale,$2]
         
     | 
| 
       2725 
2815 
     | 
    
         
             
                  when /^\(gtune:(.*)\)/
         
     | 
| 
       2726 
2816 
     | 
    
         
             
                    @h<<[:call,:gtuning,$1]
         
     | 
| 
       2727 
2817 
     | 
    
         
             
                  when /^\(chordcenter:(.*)\)/
         
     | 
| 
         @@ -2793,11 +2883,17 @@ module MidiHex 
     | 
|
| 
       2793 
2883 
     | 
    
         
             
                    end
         
     | 
| 
       2794 
2884 
     | 
    
         
             
                  when "r"
         
     | 
| 
       2795 
2885 
     | 
    
         
             
                    wait<<[:rest,i]
         
     | 
| 
       2796 
     | 
    
         
            -
                  when "o"
         
     | 
| 
      
 2886 
     | 
    
         
            +
                  when "o","O"
         
     | 
| 
       2797 
2887 
     | 
    
         
             
                    wait<<[:dummyNote,i]
         
     | 
| 
       2798 
2888 
     | 
    
         
             
                  when " "
         
     | 
| 
       2799 
2889 
     | 
    
         
             
                  when "?"
         
     | 
| 
       2800 
2890 
     | 
    
         
             
                    wait<<[:dummyNote,"?"]
         
     | 
| 
      
 2891 
     | 
    
         
            +
                  when "m"
         
     | 
| 
      
 2892 
     | 
    
         
            +
                    @h<<[:call,:resetRand]
         
     | 
| 
      
 2893 
     | 
    
         
            +
                    wait<<[:chord,["??"]]
         
     | 
| 
      
 2894 
     | 
    
         
            +
                  when "M"
         
     | 
| 
      
 2895 
     | 
    
         
            +
                    @h<<[:call,:resetRand]
         
     | 
| 
      
 2896 
     | 
    
         
            +
                    wait<<[:chord,["?O"]]
         
     | 
| 
       2801 
2897 
     | 
    
         
             
                  else
         
     | 
| 
       2802 
2898 
     | 
    
         
             
                    if @notes.keys.member?(i)
         
     | 
| 
       2803 
2899 
     | 
    
         
             
                      wait<<[:sound,i]
         
     | 
| 
         @@ -3047,7 +3143,7 @@ def funcApply m,name,x 
     | 
|
| 
       3047 
3143 
     | 
    
         
             
                r<<fbody
         
     | 
| 
       3048 
3144 
     | 
    
         
             
              }
         
     | 
| 
       3049 
3145 
     | 
    
         
             
              sep=""
         
     | 
| 
       3050 
     | 
    
         
            -
              sep="(wait:#{interval})" if interval
         
     | 
| 
      
 3146 
     | 
    
         
            +
              sep="(wait:#{interval})" if interval && interval.size>0
         
     | 
| 
       3051 
3147 
     | 
    
         
             
              r*sep
         
     | 
| 
       3052 
3148 
     | 
    
         
             
            end
         
     | 
| 
       3053 
3149 
     | 
    
         
             
            def macroDef data
         
     | 
    
        data/lib/smml/version.rb
    CHANGED
    
    
    
        data/tutorial_smml.md
    CHANGED
    
    | 
         @@ -173,7 +173,7 @@ cdim7 
     | 
|
| 
       173 
173 
     | 
    
         
             
            cpower
         
     | 
| 
       174 
174 
     | 
    
         
             
            ```
         
     | 
| 
       175 
175 
     | 
    
         | 
| 
       176 
     | 
    
         
            -
            followed by
         
     | 
| 
      
 176 
     | 
    
         
            +
            followed by tentions comma separated.
         
     | 
| 
       177 
177 
     | 
    
         | 
| 
       178 
178 
     | 
    
         
             
            ```
         
     | 
| 
       179 
179 
     | 
    
         
             
            (+5)
         
     | 
| 
         @@ -186,6 +186,38 @@ followed by 
     | 
|
| 
       186 
186 
     | 
    
         
             
            (-13)
         
     | 
| 
       187 
187 
     | 
    
         
             
            ```
         
     | 
| 
       188 
188 
     | 
    
         | 
| 
      
 189 
     | 
    
         
            +
            direct tention order by pre ':' with a half note distance number from chord base note.
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
            ```
         
     | 
| 
      
 192 
     | 
    
         
            +
             (:1,:2,:3,+5)
         
     | 
| 
      
 193 
     | 
    
         
            +
            ```
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
            in chord name, generally numbers don't mean chromatic distance. don't confuse.
         
     | 
| 
      
 196 
     | 
    
         
            +
            easy way of counting distance number in chord is to count only white key ignoring black on a piano.
         
     | 
| 
      
 197 
     | 
    
         
            +
            +5 means a sharp of 5th. if there is perfect 5th in the chord, 5th note will be deleted by '(+5)' because they don't appear together generally.
         
     | 
| 
      
 198 
     | 
    
         
            +
            when you want to use abnormal tentions like conbination of these, direct order can be used like 'c7(:8)' on your own risk.
         
     | 
| 
      
 199 
     | 
    
         
            +
            :8 expresses a note sharp of 5th by a half note expression. count all of the white and black key between c and g sharp on a piano.
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
            for example,
         
     | 
| 
      
 203 
     | 
    
         
            +
            list of chromatic scale expression is here, (when base note is 'c')
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
            ```
         
     | 
| 
      
 206 
     | 
    
         
            +
             :0  c
         
     | 
| 
      
 207 
     | 
    
         
            +
             :1  C
         
     | 
| 
      
 208 
     | 
    
         
            +
             :2  d
         
     | 
| 
      
 209 
     | 
    
         
            +
             :3  D
         
     | 
| 
      
 210 
     | 
    
         
            +
             :4  e
         
     | 
| 
      
 211 
     | 
    
         
            +
             :5  f
         
     | 
| 
      
 212 
     | 
    
         
            +
             :6  F
         
     | 
| 
      
 213 
     | 
    
         
            +
             :7  g
         
     | 
| 
      
 214 
     | 
    
         
            +
             :8  G
         
     | 
| 
      
 215 
     | 
    
         
            +
             :9  a
         
     | 
| 
      
 216 
     | 
    
         
            +
             :10 A
         
     | 
| 
      
 217 
     | 
    
         
            +
             :11 b
         
     | 
| 
      
 218 
     | 
    
         
            +
             :12 c (next octave)
         
     | 
| 
      
 219 
     | 
    
         
            +
            ```
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
       189 
221 
     | 
    
         | 
| 
       190 
222 
     | 
    
         
             
            ## tempo
         
     | 
| 
       191 
223 
     | 
    
         
             
            ;; most commands except note type ones, are inside parenthesis. set the tempo 120 bpm.
         
     | 
| 
         @@ -303,7 +335,7 @@ So '(p:guitar,2)' selects an instrument line '5 two' as the 2nd result of search 
     | 
|
| 
       303 
335 
     | 
    
         | 
| 
       304 
336 
     | 
    
         
             
            ## track
         
     | 
| 
       305 
337 
     | 
    
         
             
            ;; in SMF, MIDI channel is 1 - 16, and drum is in 10 channel. but currently, these are automaticaly set.
         
     | 
| 
       306 
     | 
    
         
            -
            ;; you don't need to think about it. simply  
     | 
| 
      
 338 
     | 
    
         
            +
            ;; you don't need to think about it. simply separate tracks with a command '|||'.
         
     | 
| 
       307 
339 
     | 
    
         | 
| 
       308 
340 
     | 
    
         
             
            ```
         
     | 
| 
       309 
341 
     | 
    
         
             
            (p:piano) c d e f ||| (p:organ) e f g a ||| (p:guitar) g a b c
         
     | 
| 
         @@ -319,7 +351,7 @@ So '(p:guitar,2)' selects an instrument line '5 two' as the 2nd result of search 
     | 
|
| 
       319 
351 
     | 
    
         | 
| 
       320 
352 
     | 
    
         | 
| 
       321 
353 
     | 
    
         
             
            currenly track names are not used as default, and tracks continue with apprearing order. so if there are no data in some tracks in mid parts of pages,
         
     | 
| 
       322 
     | 
    
         
            -
            use blank tracks by track  
     | 
| 
      
 354 
     | 
    
         
            +
            use blank tracks by track separaters.
         
     | 
| 
       323 
355 
     | 
    
         | 
| 
       324 
356 
     | 
    
         
             
            ```
         
     | 
| 
       325 
357 
     | 
    
         
             
                c     ;; track 1
         
     | 
| 
         @@ -344,7 +376,7 @@ first two tracks are 'organ' sound by the same track names declared. 
     | 
|
| 
       344 
376 
     | 
    
         | 
| 
       345 
377 
     | 
    
         | 
| 
       346 
378 
     | 
    
         
             
            ## page
         
     | 
| 
       347 
     | 
    
         
            -
            ;; then  
     | 
| 
      
 379 
     | 
    
         
            +
            ;; then separate pages by three or longer one line '/'.
         
     | 
| 
       348 
380 
     | 
    
         
             
            ;; but this command do not adjust time potisions. it simply resets track number increment.
         
     | 
| 
       349 
381 
     | 
    
         | 
| 
       350 
382 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -361,7 +393,7 @@ first two tracks are 'organ' sound by the same track names declared. 
     | 
|
| 
       361 
393 
     | 
    
         
             
            cdef c2d2e2f2 c3def ||| efga e2f2g2a2 e3fga ||| gabc g2a2b2c2 g3abc
         
     | 
| 
       362 
394 
     | 
    
         
             
            ```
         
     | 
| 
       363 
395 
     | 
    
         | 
| 
       364 
     | 
    
         
            -
            ;; if you want to adjust tracks, use a blank page by two lines of page  
     | 
| 
      
 396 
     | 
    
         
            +
            ;; if you want to adjust tracks, use a blank page by two lines of page separaters. the last three 'c' will be played adjusted instead each preceding note lengths are different.
         
     | 
| 
       365 
397 
     | 
    
         | 
| 
       366 
398 
     | 
    
         
             
            ```
         
     | 
| 
       367 
399 
     | 
    
         
             
            cd ||| e ||| abcde 
         
     | 
| 
         @@ -398,7 +430,7 @@ these are played like  this. 
     | 
|
| 
       398 
430 
     | 
    
         
             
            ```
         
     | 
| 
       399 
431 
     | 
    
         | 
| 
       400 
432 
     | 
    
         
             
            ;; same mark names 'm' in repeated section or one track will be automaticaly substituded by 'm m@2 m@3'. to adjust, use it in other tracks.
         
     | 
| 
       401 
     | 
    
         
            -
            or use a comma as a  
     | 
| 
      
 433 
     | 
    
         
            +
            or use a comma as a separater of a name and a counter; '(mark:hoge@3)' = '(mark:hoge,3)'.
         
     | 
| 
       402 
434 
     | 
    
         | 
| 
       403 
435 
     | 
    
         
             
            ```
         
     | 
| 
       404 
436 
     | 
    
         
             
              a b c (mark:m) a b c (mark:m@2) a b c (mark:m@3)
         
     | 
| 
         @@ -410,9 +442,10 @@ search MIDI format and set valid hex data. 
     | 
|
| 
       410 
442 
     | 
    
         | 
| 
       411 
443 
     | 
    
         
             
            ```
         
     | 
| 
       412 
444 
     | 
    
         
             
              &(00 00 00)
         
     | 
| 
      
 445 
     | 
    
         
            +
              &(00,00,00)
         
     | 
| 
       413 
446 
     | 
    
         
             
            ```
         
     | 
| 
       414 
447 
     | 
    
         | 
| 
       415 
     | 
    
         
            -
            hex data must be ``` 00 01 02 ... FD FE FF ```. one byte is by two hex letters.  
     | 
| 
      
 448 
     | 
    
         
            +
            hex data must be ``` 00 01 02 ... FD FE FF ```. one byte is by two hex letters. separaters are a blank or comma.
         
     | 
| 
       416 
449 
     | 
    
         
             
            ;; currently hex only can be used. oct/decimal may be able to use someday.
         
     | 
| 
       417 
450 
     | 
    
         
             
            all in SMF track data, unique formated prefix delta tick time data is needed. so if want, you can use '$delta(240)' for 240 ticks.
         
     | 
| 
       418 
451 
     | 
    
         
             
            the tick means a minimum time span in SMF , one beat equals to 480 ticks as default. in this case, delta time is set to half beat.
         
     | 
| 
         @@ -477,7 +510,7 @@ EFF:=( 
     | 
|
| 
       477 
510 
     | 
    
         
             
            ```
         
     | 
| 
       478 
511 
     | 
    
         | 
| 
       479 
512 
     | 
    
         
             
            after parenthesis, don't set any letters without blanks.
         
     | 
| 
       480 
     | 
    
         
            -
            but now, this is for easy way of writing only, and may not be so useful. to use this multi line values, each line must be  
     | 
| 
      
 513 
     | 
    
         
            +
            but now, this is for easy way of writing only, and may not be so useful. to use this multi line values, each line must be separated.
         
     | 
| 
       481 
514 
     | 
    
         | 
| 
       482 
515 
     | 
    
         
             
            ```
         
     | 
| 
       483 
516 
     | 
    
         
             
            $EFF[1] $EFF[2] $EFF[3] $EFF[4]
         
     | 
| 
         @@ -531,7 +564,7 @@ use parts split note hight, length, velocity, gate time, pre modifier; sound ele 
     | 
|
| 
       531 
564 
     | 
    
         
             
            ```
         
     | 
| 
       532 
565 
     | 
    
         | 
| 
       533 
566 
     | 
    
         
             
            the first value of each part will used for the first note 'a'. and so on.
         
     | 
| 
       534 
     | 
    
         
            -
            inside parts, position is  
     | 
| 
      
 567 
     | 
    
         
            +
            inside parts, position is separated by ',' or use dummy value 'o'.
         
     | 
| 
       535 
568 
     | 
    
         
             
            '(V:,,,60,,)' is '(V:ooo 60 oo)'. last dummy values can be omitted. in this case, 4th note 'd' velocity is set to 60.
         
     | 
| 
       536 
569 
     | 
    
         
             
            if 6th note don't exist, pre modifier element values are simply ignored.
         
     | 
| 
       537 
570 
     | 
    
         | 
| 
         @@ -573,10 +606,13 @@ etc. 
     | 
|
| 
       573 
606 
     | 
    
         
             
            if a scale has been defined as below, random notes will be selected from its scale notes.
         
     | 
| 
       574 
607 
     | 
    
         | 
| 
       575 
608 
     | 
    
         
             
            ```
         
     | 
| 
       576 
     | 
    
         
            -
             (scale:a,b,c,d,e)
         
     | 
| 
       577 
     | 
    
         
            -
             (scale:a,+2,+3,+5,+7,+9,+11)
         
     | 
| 
      
 609 
     | 
    
         
            +
             (scale:a,b,c,d,e)             ;; series of note names
         
     | 
| 
      
 610 
     | 
    
         
            +
             (scale:a,+2,+3,+5,+7,+9,+11)  ;; first note and plus values to add to first note
         
     | 
| 
      
 611 
     | 
    
         
            +
             (scale:+5)                    ;; shift all values from preceding scale. after above scale, this will be '(scale:d, ...)'.
         
     | 
| 
      
 612 
     | 
    
         
            +
             (scale: :g7, )                ;; by chord name
         
     | 
| 
       578 
613 
     | 
    
         
             
            ```
         
     | 
| 
       579 
614 
     | 
    
         | 
| 
      
 615 
     | 
    
         
            +
            shift value etc. is by a half tone.
         
     | 
| 
       580 
616 
     | 
    
         
             
            still incompleted to use.
         
     | 
| 
       581 
617 
     | 
    
         | 
| 
       582 
618 
     | 
    
         | 
| 
         @@ -626,7 +662,7 @@ or like this. 
     | 
|
| 
       626 
662 
     | 
    
         
             
            ```
         
     | 
| 
       627 
663 
     | 
    
         | 
| 
       628 
664 
     | 
    
         
             
            ## compile order
         
     | 
| 
       629 
     | 
    
         
            -
            now compiling order is : page,track  
     | 
| 
      
 665 
     | 
    
         
            +
            now compiling order is : page,track separate => macro set and replace => repeat check => sound data make.
         
     | 
| 
       630 
666 
     | 
    
         
             
            if there are bugs, error can appear by macro definitions appear in the last step 'sound data make' for example.
         
     | 
| 
       631 
667 
     | 
    
         | 
| 
       632 
668 
     | 
    
         
             
            ## D.S. al fine
         
     | 
| 
         @@ -654,8 +690,8 @@ dal segno jump mark. 
     | 
|
| 
       654 
690 
     | 
    
         | 
| 
       655 
691 
     | 
    
         
             
            if there is no followed number, 'abc' is repeated 2 times.
         
     | 
| 
       656 
692 
     | 
    
         | 
| 
       657 
     | 
    
         
            -
            ##  
     | 
| 
       658 
     | 
    
         
            -
            ;; ';' can be used for one line data as line  
     | 
| 
      
 693 
     | 
    
         
            +
            ## separater
         
     | 
| 
      
 694 
     | 
    
         
            +
            ;; ';' can be used for one line data as line separater.
         
     | 
| 
       659 
695 
     | 
    
         | 
| 
       660 
696 
     | 
    
         
             
            ```
         
     | 
| 
       661 
697 
     | 
    
         
             
              $ smml -d "abc;def|||mc:=ggg;ccc$mc ddd" -o out.mid
         
     | 
| 
         @@ -756,7 +792,7 @@ set these modifiers before note commands. 
     | 
|
| 
       756 
792 
     | 
    
         
             
             (loadf:filename.mid,2)
         
     | 
| 
       757 
793 
     | 
    
         
             
            ```
         
     | 
| 
       758 
794 
     | 
    
         | 
| 
       759 
     | 
    
         
            -
            load the second track data of filename.mid. when using it, the track must be itself only.  
     | 
| 
      
 795 
     | 
    
         
            +
            load the second track data of filename.mid. when using it, the track must be itself only. separate by '|||'.
         
     | 
| 
       760 
796 
     | 
    
         
             
            this command do not check about track data strictly. be careful.
         
     | 
| 
       761 
797 
     | 
    
         | 
| 
       762 
798 
     | 
    
         | 
| 
         @@ -769,7 +805,7 @@ this command do not check about track data strictly. be careful. 
     | 
|
| 
       769 
805 
     | 
    
         
             
            now, note type commands are :
         
     | 
| 
       770 
806 
     | 
    
         | 
| 
       771 
807 
     | 
    
         
             
            ```
         
     | 
| 
       772 
     | 
    
         
            -
                  c         ;; single note
         
     | 
| 
      
 808 
     | 
    
         
            +
                  c         ;; single note 'c'
         
     | 
| 
       773 
809 
     | 
    
         
             
                  C         ;; c sharp
         
     | 
| 
       774 
810 
     | 
    
         
             
                  (-)d      ;; single note with flat/sharp/natural modifiers
         
     | 
| 
       775 
811 
     | 
    
         
             
                  {64}      ;; single note by absolute note number
         
     | 
| 
         @@ -778,11 +814,14 @@ now, note type commands are : 
     | 
|
| 
       778 
814 
     | 
    
         
             
                  {47,:0}   ;; multi note. second note is by 12 series half tone notation
         
     | 
| 
       779 
815 
     | 
    
         
             
                  :cmaj7,   ;; chord name
         
     | 
| 
       780 
816 
     | 
    
         
             
                  =         ;; copy of the latest note type command
         
     | 
| 
      
 817 
     | 
    
         
            +
                  ?         ;; random note
         
     | 
| 
      
 818 
     | 
    
         
            +
                  o         ;; dummy note ; use a random note if there is no substitution command
         
     | 
| 
      
 819 
     | 
    
         
            +
                  m         ;; multi dummy note ; similiar to  '{?,?,?}'
         
     | 
| 
       781 
820 
     | 
    
         
             
            ```
         
     | 
| 
       782 
821 
     | 
    
         | 
| 
       783 
822 
     | 
    
         
             
              and other commands are with parentheses.
         
     | 
| 
       784 
823 
     | 
    
         | 
| 
       785 
     | 
    
         
            -
            ```~```  
     | 
| 
      
 824 
     | 
    
         
            +
            ```~``` and ```w``` seem like note type, but it is compressed to preceding note as calculated note length. most commands cannot be set inside of ```'c~~~'.```
         
     | 
| 
       786 
825 
     | 
    
         | 
| 
       787 
826 
     | 
    
         
             
            ;; theremin like sound,
         
     | 
| 
       788 
827 
     | 
    
         | 
| 
         @@ -841,11 +880,20 @@ easy way to express fuzzy swing rythm. 
     | 
|
| 
       841 
880 
     | 
    
         | 
| 
       842 
881 
     | 
    
         
             
            ```
         
     | 
| 
       843 
882 
     | 
    
         
             
             /:a2b1/
         
     | 
| 
       844 
     | 
    
         
            -
             (setSwing:2,2.4)(setSwing:1,0.6)/:a2,b1,/
         
     | 
| 
       845 
     | 
    
         
            -
             (setSwing:2,1.8)(setSwing:1,1.2)/:a2,b1,/
         
     | 
| 
      
 883 
     | 
    
         
            +
             (setSwing: 2, 2.4)(setSwing: 1, 0.6) /:a2,b1,/
         
     | 
| 
      
 884 
     | 
    
         
            +
             (setSwing: 2, 1.8)(setSwing: 1, 1.2) /:a2,b1,/
         
     | 
| 
       846 
885 
     | 
    
         
             
            ```
         
     | 
| 
      
 886 
     | 
    
         
            +
            series of ```ab``` ,
         
     | 
| 
      
 887 
     | 
    
         
            +
            just 2:1, first longer, first shorter. rythm will be broken if setting part is wrong.
         
     | 
| 
       847 
888 
     | 
    
         | 
| 
       848 
     | 
    
         
            -
             
     | 
| 
      
 889 
     | 
    
         
            +
            ```
         
     | 
| 
      
 890 
     | 
    
         
            +
             (setSwing: 2of3, 2.4)/:a2,b1,/
         
     | 
| 
      
 891 
     | 
    
         
            +
            ```
         
     | 
| 
      
 892 
     | 
    
         
            +
             
     | 
| 
      
 893 
     | 
    
         
            +
            same as the second line of above. key value must be integer, not float.
         
     | 
| 
      
 894 
     | 
    
         
            +
            '2of3' and '1of5' can be used at once, but rythm will not be what you predict.
         
     | 
| 
      
 895 
     | 
    
         
            +
            value for 1of3 , set by rest of 2of3, is overwitten by 1of5.
         
     | 
| 
      
 896 
     | 
    
         
            +
            there is no way to help it.
         
     | 
| 
       849 
897 
     | 
    
         | 
| 
       850 
898 
     | 
    
         
             
            ;; register of modifiers
         
     | 
| 
       851 
899 
     | 
    
         | 
| 
         @@ -895,7 +943,7 @@ text implement to MIDI file. 
     | 
|
| 
       895 
943 
     | 
    
         
             
            but now blanks are removed. someday maybe fixed ?
         
     | 
| 
       896 
944 
     | 
    
         | 
| 
       897 
945 
     | 
    
         | 
| 
       898 
     | 
    
         
            -
            ## test, debug etc.
         
     | 
| 
      
 946 
     | 
    
         
            +
            ## test, debug etc. for developers
         
     | 
| 
       899 
947 
     | 
    
         | 
| 
       900 
948 
     | 
    
         
             
            ```
         
     | 
| 
       901 
949 
     | 
    
         
             
              (setInt: varName,10)
         
     | 
| 
         @@ -905,3 +953,17 @@ but now blanks are removed. someday maybe fixed ? 
     | 
|
| 
       905 
953 
     | 
    
         | 
| 
       906 
954 
     | 
    
         
             
            directly set local MidiHex variable, dump while compiling if the varName and value are valid.
         
     | 
| 
       907 
955 
     | 
    
         | 
| 
      
 956 
     | 
    
         
            +
            # syntax implement policy: 
         
     | 
| 
      
 957 
     | 
    
         
            +
             
     | 
| 
      
 958 
     | 
    
         
            +
             
     | 
| 
      
 959 
     | 
    
         
            +
            parenthesis command is buil with (name:value,value,...). names often used are shorter, or leave it as it is as possible.
         
     | 
| 
      
 960 
     | 
    
         
            +
             
     | 
| 
      
 961 
     | 
    
         
            +
             
     | 
| 
      
 962 
     | 
    
         
            +
            sound is modifier + note + length word.
         
     | 
| 
      
 963 
     | 
    
         
            +
             
     | 
| 
      
 964 
     | 
    
         
            +
             
     | 
| 
      
 965 
     | 
    
         
            +
            let it not too complicated in sound part for visibility.
         
     | 
| 
      
 966 
     | 
    
         
            +
            especially, for other words not to hide note type words.
         
     | 
| 
      
 967 
     | 
    
         
            +
             
     | 
| 
      
 968 
     | 
    
         
            +
             
     | 
| 
      
 969 
     | 
    
         
            +
            many values in MIDI are 0-127, so values are integers except pre -/+ values that mean differences.
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: smml
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.12
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - tabasano
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2014-09- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2014-09-24 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     |