smml 0.1.0 → 0.1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README_smml.md +8 -1
- data/bin/mmlsmml +61 -0
- data/bin/smml +11 -12
- data/bin/ssmml +2 -3
- data/lib/smml/msm.rb +103 -1
- data/lib/smml/version.rb +2 -2
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 030ec4626cbd1d8bbd61fe4e13b993ec2c27cfd6
|
4
|
+
data.tar.gz: f4a8aea294b67884dad7449c5ba524db6b162e76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c91c1d55a355e8bd9a35999df025fdbe95f1f1532e72e5f94fac6e6b9b0256a43543cf60383bf7865e5a3f692a2e3fccb3a27a2570449a32b5f5ba891936a0b3
|
7
|
+
data.tar.gz: fe30d0f2596410987755d5fadb450340ae7070c820e5de1b548054967b0ce7f30b680c425dad433a3f07445cc5edfcd2aaabd8011be45aa7bf00e023b897dbf5
|
data/README_smml.md
CHANGED
@@ -23,9 +23,16 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
-
|
26
|
+
in a ruby script,
|
27
|
+
|
28
|
+
m=Smml.new
|
27
29
|
m.compile('infile.mml','outfile.mid')
|
28
30
|
|
31
|
+
Or exec command
|
32
|
+
|
33
|
+
$ smml -i infile.mml -o outfile.mid
|
34
|
+
$ smml -d "cdefgab" -o outfile.mid
|
35
|
+
|
29
36
|
## Contributing
|
30
37
|
|
31
38
|
1. Fork it ( https://github.com/[my-github-username]/smml/fork )
|
data/bin/mmlsmml
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
# -*- encoding: utf-8 -*-
|
3
|
+
|
4
|
+
begin
|
5
|
+
require'./lib/smml/msm'
|
6
|
+
rescue LoadError
|
7
|
+
require'smml'
|
8
|
+
end
|
9
|
+
|
10
|
+
def help
|
11
|
+
puts Smml::VERSION
|
12
|
+
puts %Q(
|
13
|
+
ARGS:
|
14
|
+
-i infile.mml -o outfile.mid
|
15
|
+
or
|
16
|
+
-d "MML data" -o outfile.mid
|
17
|
+
for dump smml
|
18
|
+
-s
|
19
|
+
|
20
|
+
syntax:
|
21
|
+
A: a2bc dref => track A, MML data
|
22
|
+
B: c2de frga => track B, MML data
|
23
|
+
|
24
|
+
# comment
|
25
|
+
+- sharp,flat
|
26
|
+
[]3 repeat 3 times
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
infile="infile.mml"
|
31
|
+
outfile="mml.mid"
|
32
|
+
data=""
|
33
|
+
|
34
|
+
opt = OptionParser.new
|
35
|
+
opt.on('-i file',"input file") {|v| infile=v }
|
36
|
+
opt.on('-o file',"output file") {|v| outfile=v }
|
37
|
+
opt.on('-s',"dump smml data") {|v| $smmlshow=v }
|
38
|
+
opt.on('-d d',"input data string") {|v| data=v }
|
39
|
+
opt.on('-h',"help") {|v|
|
40
|
+
help
|
41
|
+
}
|
42
|
+
opt.parse!(ARGV)
|
43
|
+
|
44
|
+
def p *v
|
45
|
+
super v if $DEBUG
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
m=Smml.new
|
50
|
+
puts
|
51
|
+
data=data.size>0 ? data.split(';')*"\n" : (File.read(infile) rescue (help;exit))
|
52
|
+
p data
|
53
|
+
data=data.split("\n").map{|i|i.commentoff("\n",'#')}*"\n"
|
54
|
+
p data
|
55
|
+
smml=Mml.tosmml(data)
|
56
|
+
puts smml if $smmlshow || $DEBUG
|
57
|
+
m.octave=:far
|
58
|
+
m.data=smml
|
59
|
+
m.outfile=outfile
|
60
|
+
m.make
|
61
|
+
m.save
|
data/bin/smml
CHANGED
@@ -8,7 +8,6 @@ begin
|
|
8
8
|
require'./lib/smml/msm'
|
9
9
|
rescue LoadError
|
10
10
|
require'smml'
|
11
|
-
p Smml::VERSION
|
12
11
|
end
|
13
12
|
|
14
13
|
infile=false
|
@@ -56,14 +55,14 @@ opt.on('-m i',"mode of test/ 1:GM 2:XG 3:GS") {|v| $testmode=v.to_i }
|
|
56
55
|
opt.on('-n',"test only (dont write outfile)") {|v| $testonly=true }
|
57
56
|
opt.parse!(ARGV)
|
58
57
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
58
|
+
m=Smml.new(tbase,pspl,expfile,cmark)
|
59
|
+
m.infile=infile
|
60
|
+
m.outfile=outfile
|
61
|
+
m.data=data
|
62
|
+
m.velocity=velocity
|
63
|
+
m.bpm=bpm
|
64
|
+
m.octave=octaveMode
|
65
|
+
m.vfuzzy=vfuzzy
|
66
|
+
m.autopan=autopan
|
67
|
+
m.make($test,$fuzzy)
|
68
|
+
m.save if not $testonly
|
data/bin/ssmml
CHANGED
@@ -8,7 +8,6 @@ begin
|
|
8
8
|
require'./lib/smml/msm'
|
9
9
|
rescue LoadError
|
10
10
|
require'smml'
|
11
|
-
p Smml::VERSION
|
12
11
|
end
|
13
12
|
|
14
13
|
infile="infile.mml"
|
@@ -21,5 +20,5 @@ opt.on('-o file',"output file") {|v| outfile=v }
|
|
21
20
|
opt.on('-d d',"input data string") {|v| data=v }
|
22
21
|
opt.parse!(ARGV)
|
23
22
|
|
24
|
-
|
25
|
-
|
23
|
+
m=Smml.new
|
24
|
+
m.compile(infile,outfile,data)
|
data/lib/smml/msm.rb
CHANGED
@@ -7,6 +7,7 @@ $debuglevel=0
|
|
7
7
|
|
8
8
|
def hint
|
9
9
|
cmd=File.basename($0)
|
10
|
+
puts "Smml v#{Smml::VERSION}"
|
10
11
|
puts <<EOF
|
11
12
|
usage: #{cmd} -d \"dddd dr3 dddd r4 drdrdrdr dddd dr3\" -o outfile.mid -t bpm
|
12
13
|
#{cmd} -i infile.txt -o outfile.mid -t bpm
|
@@ -2198,7 +2199,7 @@ def modifierComp t,macro
|
|
2198
2199
|
}*""
|
2199
2200
|
end
|
2200
2201
|
|
2201
|
-
class
|
2202
|
+
class Smml
|
2202
2203
|
attr_accessor :tracknum, :tbase, :rundatas, :rawdatas, :mx
|
2203
2204
|
attr_accessor :bpm, :velocity, :octave, :vfuzzy, :data, :infile, :outfile, :autopan
|
2204
2205
|
def initialize tbase=480,pagesep='///',expfile=false,cmark=';;'
|
@@ -2334,3 +2335,104 @@ class MmlTracks
|
|
2334
2335
|
save
|
2335
2336
|
end
|
2336
2337
|
end
|
2338
|
+
|
2339
|
+
module Mml
|
2340
|
+
def self.calclen len,digdef,last
|
2341
|
+
if last == :sound
|
2342
|
+
htn=0
|
2343
|
+
if len=~/\.+/
|
2344
|
+
len=$`.to_i
|
2345
|
+
len=digdef if len==0
|
2346
|
+
htn=$&.size
|
2347
|
+
end
|
2348
|
+
len=4.0/len.to_i
|
2349
|
+
baselen=len/2.0
|
2350
|
+
htn.times{len+=baselen;baselen/=2.0}
|
2351
|
+
len=len.round if len==len.round
|
2352
|
+
len="" if len==1
|
2353
|
+
end
|
2354
|
+
len
|
2355
|
+
end
|
2356
|
+
def self.tosmml data
|
2357
|
+
tracks={}
|
2358
|
+
tr=0
|
2359
|
+
last=:no
|
2360
|
+
lines=data.split("\n")
|
2361
|
+
lines.each{|mml|
|
2362
|
+
octave=3
|
2363
|
+
digdef=4
|
2364
|
+
mml.scan(/([[:alpha:]]):|([[:alpha:]<>])([#\+\-])?([[:digit:]\.]+)?|@([[:alpha:]]+|[[:digit:]]+)|([[:digit:]\.]+)|([\[\]])| |/).each{|tname,al,sharp,dig,sname,dig2,same|
|
2365
|
+
valueAr=[tname,al,sharp,dig,sname,dig2,same]
|
2366
|
+
value=valueAr*""
|
2367
|
+
(tr=tname;next) if tname
|
2368
|
+
len=dig|| digdef
|
2369
|
+
len=calclen(len,digdef,:sound)
|
2370
|
+
dig2=calclen(dig2,digdef,last) if dig2
|
2371
|
+
last=:no
|
2372
|
+
v=""
|
2373
|
+
case al ? al.upcase : al
|
2374
|
+
when ">"
|
2375
|
+
octave+=1
|
2376
|
+
v="+"
|
2377
|
+
p "oct= #{octave} : #{v}"
|
2378
|
+
when "<"
|
2379
|
+
octave-=1
|
2380
|
+
v="-"
|
2381
|
+
p "oct= #{octave} : #{v}"
|
2382
|
+
when "L"
|
2383
|
+
digdef=dig
|
2384
|
+
p "defaault length : #{dig}"
|
2385
|
+
when "O"
|
2386
|
+
v="(oct:#{dig})"
|
2387
|
+
p "octave #{dig} : #{v}"
|
2388
|
+
when "Q"
|
2389
|
+
v="(gate:#{dig})"
|
2390
|
+
p "gate #{dig} : #{v}"
|
2391
|
+
when "P"
|
2392
|
+
v="(pan:#{dig})"
|
2393
|
+
p "pan #{dig} : #{v}"
|
2394
|
+
when "N"
|
2395
|
+
v="{#{dig}}"
|
2396
|
+
p "note #{dig} : #{v}"
|
2397
|
+
when "T"
|
2398
|
+
v="(tempo:#{dig})"
|
2399
|
+
p "tempo #{dig} : #{v}"
|
2400
|
+
when "V"
|
2401
|
+
v="(v:#{dig})"
|
2402
|
+
p "velocity #{dig} : #{v}"
|
2403
|
+
when "R"
|
2404
|
+
v="r#{len}"
|
2405
|
+
p "rest #{len} : #{v}"
|
2406
|
+
last=:sound
|
2407
|
+
when nil
|
2408
|
+
if sname
|
2409
|
+
v="(p:#{sname})"
|
2410
|
+
p "sound name #{sname} : #{v}"
|
2411
|
+
elsif same
|
2412
|
+
v=same
|
2413
|
+
p "same : #{v}"
|
2414
|
+
end
|
2415
|
+
when "A".."G"
|
2416
|
+
note=al.downcase
|
2417
|
+
case sharp
|
2418
|
+
when "#","+"
|
2419
|
+
note=note.upcase
|
2420
|
+
when "-"
|
2421
|
+
note="(-)"+note
|
2422
|
+
end
|
2423
|
+
v="#{note}#{len}"
|
2424
|
+
p "note #{al} #{sharp} #{len} : #{v}"
|
2425
|
+
last=:sound
|
2426
|
+
end
|
2427
|
+
v="#{dig2}" if dig2
|
2428
|
+
STDERR.puts "[#{value}] undefined?" if v=="" && value.size>0
|
2429
|
+
if tracks[tr]
|
2430
|
+
tracks[tr]<<v
|
2431
|
+
else
|
2432
|
+
tracks[tr]=v
|
2433
|
+
end
|
2434
|
+
}
|
2435
|
+
}
|
2436
|
+
tracks.keys.sort.map{|k|tracks[k]}*"\n|||\n"
|
2437
|
+
end
|
2438
|
+
end
|
data/lib/smml/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.1.0"
|
1
|
+
class Smml
|
2
|
+
VERSION = "0.1.0.1"
|
3
3
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0
|
4
|
+
version: 0.1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tabasano
|
@@ -42,6 +42,7 @@ description: compile a Music Macro Language file to a Standard MIDI file.
|
|
42
42
|
email:
|
43
43
|
- pianotoieba+smml@gmail.com
|
44
44
|
executables:
|
45
|
+
- mmlsmml
|
45
46
|
- smml
|
46
47
|
- ssmml
|
47
48
|
extensions: []
|
@@ -54,6 +55,7 @@ files:
|
|
54
55
|
- lib/smml/midi-programChange-list.txt
|
55
56
|
- lib/smml/msm.rb
|
56
57
|
- lib/smml/version.rb
|
58
|
+
- bin/mmlsmml
|
57
59
|
- bin/smml
|
58
60
|
- bin/ssmml
|
59
61
|
- Gemfile
|