-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample.rb
73 lines (55 loc) · 1.38 KB
/
example.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
require 'lib/minihal'
brain = Minihal::Brain.new
Minihal.string_to_sequences(IO.read("/home/abez/.bashrc")).each { |sequence| brain.learn(sequence) }
puts brain.query.to_sentence
song = "B A G A B B B | A A A B D D | B A G A B B B | B A A B A G | B A G A B B B | A A A B D D | B A G A B B B | B A A B A G | D B A G A B B B | A A A B D D | D B A G A B B B | B A A B A G | D B A G A B B B | A A A B D D | D B A G A B B B | B A A B A G "
TOKEN_PIPE = Minihal::Tokens::Punctuation.new("|")
class MusicSequence < Minihal::Sequence
def self.punctuation_regex_string
"\\|"
end
def self.token_map(char)
case char
when "|" then TOKEN_PIPE
end
end
end
music = Minihal::Brain.new
Minihal.string_to_sequences_delegate(MusicSequence, song).each { |sequence|
music.learn(sequence)
}
puts music.query.infer_sequence.join
### Now with "symbols" only
symbolic_music = Minihal::Brain.new
class Note
end
class A < Note
end
class B < Note
end
class C < Note
end
class D < Note
end
class E < Note
end
class F < Note
end
class G < Note
end
class Quarter < Note
end
class Half < Note
end
class Full < Note
end
[[A, B, C, D],
[G, A, B, Quarter],
[B, B, Quarter, A],
[D, A, D, Quarter],
[F, A, G, Quarter],
[Full],
[Half, A, A],
[B, B, Half],
].each { |seq| symbolic_music.learn(Minihal::Sequence.new(seq)) }
6.times {|n| puts symbolic_music.query.infer_sequence.map {|x| x.to_s }.join }