midinous 1.0.2 → 1.0.3
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/README.md +1 -1
- data/lib/midinous/init.rb +37 -6
- data/lib/midinous/points.rb +6 -1
- data/lib/midinous/proc_midi.rb +14 -4
- data/lib/midinous/style/midinous.glade +279 -2
- data/lib/midinous/style/ui.rb +36 -2
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 421b8db3f96cfe3ca0f044a7d7ab88b2a1fc3ba65b244143809b341313ca6a44
|
4
|
+
data.tar.gz: 40741dc16eea914d989591332706923924b7d4075df85fe5709539e09851b904
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ddb259175deb80f193ff1e7cb644b116dc9065d47d409134cd2df7b70c74db1913ac385238b6df5d278c804d3e04e774267dfe6681a6c351114cb2184a1e565d
|
7
|
+
data.tar.gz: 3c5bc184140f2733320a0e98a9520820299f9c158dc86929469d34a13a284c1c4ed0c39a71517e5c1eca757f35f525139a7cb09918a781ea5c49fd1847d8ce2b
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Midinous combines generative features with a grid-based GUI to offer a supplemen
|
|
6
6
|
|
7
7
|
* [GTK3](http://www.gtk.org/) 3.3.6 or later
|
8
8
|
* Midinous is designed to run on 64-bit architectures
|
9
|
-
* You must have 64-bit Ruby version 2.5.5 installed with the devkit and MSYS2
|
9
|
+
* You must have 64-bit Ruby version 2.5.0 - 2.5.5 installed with the devkit and MSYS2
|
10
10
|
* It is recommended you use a virtual MIDI cable program for use with Midinous on Windows
|
11
11
|
|
12
12
|
## Install
|
data/lib/midinous/init.rb
CHANGED
@@ -34,6 +34,10 @@ class Init_Prog
|
|
34
34
|
apply_style(UI::prop_list_view,@provider)
|
35
35
|
apply_style(UI::file_chooser,@provider)
|
36
36
|
apply_style(UI::confirmer,@provider)
|
37
|
+
apply_style(UI::about_window,@provider)
|
38
|
+
apply_style(UI::notes_window,@provider)
|
39
|
+
apply_style(UI::scales_window,@provider)
|
40
|
+
apply_style(UI::hotkeys_window,@provider)
|
37
41
|
end
|
38
42
|
|
39
43
|
def grid_center #center the grid
|
@@ -78,6 +82,22 @@ module Event_Router
|
|
78
82
|
UI::confirmer.visible = false
|
79
83
|
true
|
80
84
|
end
|
85
|
+
UI::about_window.signal_connect("delete-event") do
|
86
|
+
UI::about_window.visible = false
|
87
|
+
true
|
88
|
+
end
|
89
|
+
UI::notes_window.signal_connect("delete-event") do
|
90
|
+
UI::notes_window.visible = false
|
91
|
+
true
|
92
|
+
end
|
93
|
+
UI::scales_window.signal_connect("delete-event") do
|
94
|
+
UI::scales_window.visible = false
|
95
|
+
true
|
96
|
+
end
|
97
|
+
UI::hotkeys_window.signal_connect("delete-event") do
|
98
|
+
UI::hotkeys_window.visible = false
|
99
|
+
true
|
100
|
+
end
|
81
101
|
|
82
102
|
#For key bindings
|
83
103
|
UI::midinous.signal_connect("key-press-event") { |obj, event| route_key(event) }
|
@@ -113,18 +133,29 @@ module Event_Router
|
|
113
133
|
#For menu items
|
114
134
|
UI::in_device_items.each_with_index {|i, idx| i.signal_connect("button-press-event") {UI.set_device(idx,"i")}}
|
115
135
|
UI::out_device_items.each_with_index {|o, idx| o.signal_connect("button-press-event") {UI.set_device(idx,"o")}}
|
136
|
+
UI::in_channel_items.each do |i|
|
137
|
+
i.signal_connect("button-press-event") do
|
138
|
+
Pm.in_chan = i.label.to_i
|
139
|
+
UI.regen_status
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
UI::help_about.signal_connect("button-press-event") {UI::about_window.visible = true}
|
144
|
+
UI::help_notes.signal_connect("button-press-event") {UI::notes_window.visible = true}
|
145
|
+
UI::help_scales.signal_connect("button-press-event") {UI::scales_window.visible = true}
|
146
|
+
UI::help_hotkeys.signal_connect("button-press-event") {UI::hotkeys_window.visible = true}
|
116
147
|
|
117
148
|
#For file operations
|
118
|
-
UI::file_new.signal_connect("button-press-event") {UI.confirm("new")}
|
119
|
-
UI::file_open.signal_connect("button-press-event") {UI.file_oper("open")}
|
120
|
-
UI::file_save.signal_connect("button-press-event") {UI.file_oper("save")}
|
121
|
-
UI::file_save_as.signal_connect("button-press-event") {UI.file_oper("saveas")}
|
122
|
-
UI::file_quit.signal_connect("button-press-event") {UI.confirm("quit")}
|
149
|
+
UI::file_new.signal_connect("button-press-event") {UI.confirm("new")}
|
150
|
+
UI::file_open.signal_connect("button-press-event") {UI.file_oper("open")}
|
151
|
+
UI::file_save.signal_connect("button-press-event") {UI.file_oper("save")}
|
152
|
+
UI::file_save_as.signal_connect("button-press-event") {UI.file_oper("saveas")}
|
153
|
+
UI::file_quit.signal_connect("button-press-event") {UI.confirm("quit")}
|
123
154
|
|
124
155
|
UI::confirmer_confirm.signal_connect("button-press-event"){UI.confirm_act("yes")}
|
125
156
|
UI::confirmer_cancel.signal_connect("button-press-event") {UI.confirm_act("no")}
|
126
157
|
|
127
|
-
UI::file_operation.signal_connect("button-press-event") {UI.file_oper_act("yes")}
|
158
|
+
UI::file_operation.signal_connect("button-press-event") {UI.file_oper_act("yes")}
|
128
159
|
UI::file_cancel.signal_connect("button-press-event") {UI.file_oper_act("no")}
|
129
160
|
UI::file_chooser.signal_connect("selection-changed") {UI.file_input_check("chooser")}
|
130
161
|
UI::file_name.signal_connect("changed") {UI.file_input_check("name")}
|
data/lib/midinous/points.rb
CHANGED
@@ -68,8 +68,13 @@ class Point_Logic
|
|
68
68
|
CC.nouspoints.find_all(&:selected).each {|n| n.path_mode = mode}
|
69
69
|
UI::canvas.queue_draw
|
70
70
|
end
|
71
|
-
def
|
71
|
+
def set_note_via_devc(note)
|
72
72
|
CC.nouspoints.find_all(&:selected).each {|n| n.note = note}
|
73
|
+
Pm.note_send(Pm.in_chan,note,100)
|
74
|
+
GLib::Timeout.add(1000) do
|
75
|
+
Pm.note_rlse(1,note)
|
76
|
+
false
|
77
|
+
end
|
73
78
|
populate_prop(CC.nouspoints)
|
74
79
|
end
|
75
80
|
def inc_note(inc)
|
data/lib/midinous/proc_midi.rb
CHANGED
@@ -41,11 +41,12 @@ class GuiListener < MIDIEye::Listener
|
|
41
41
|
end
|
42
42
|
|
43
43
|
class Proc_Midi
|
44
|
-
attr_accessor :out_list, :in_list
|
44
|
+
attr_accessor :out_list, :in_list, :in_chan
|
45
45
|
attr_reader :out_id, :in_id, :in, :midi_in
|
46
46
|
def initialize(oid,iid)
|
47
47
|
@out_list = []
|
48
48
|
@in_list = []
|
49
|
+
@in_chan = 1
|
49
50
|
|
50
51
|
@out_id = oid
|
51
52
|
@out_list = UniMIDI::Output.all
|
@@ -55,12 +56,19 @@ class Proc_Midi
|
|
55
56
|
@in_list = UniMIDI::Input.all
|
56
57
|
unless @in_list.empty?
|
57
58
|
@in = UniMIDI::Input.use(@in_id)
|
58
|
-
|
59
|
-
@midi_in.listen_for(:class => [MIDIMessage::NoteOn,MIDIMessage::NoteOff]) {|e| Pl.set_note(e[:message].note.clamp(0,127))}
|
60
|
-
@midi_in.gui_listen
|
59
|
+
set_listener
|
61
60
|
end
|
62
61
|
end
|
63
62
|
|
63
|
+
#Restart the listener
|
64
|
+
def set_listener
|
65
|
+
@midi_in = GuiListener.new(@in)
|
66
|
+
@midi_in.listen_for(:class => [MIDIMessage::NoteOn]) do |e|
|
67
|
+
Pl.set_note_via_devc(e[:message].note.clamp(0,127)) if e[:message].velocity <= 127
|
68
|
+
end
|
69
|
+
@midi_in.gui_listen
|
70
|
+
end
|
71
|
+
|
64
72
|
#Select the output device
|
65
73
|
def sel_out(id)
|
66
74
|
@out = UniMIDI::Output.use(id)
|
@@ -71,6 +79,8 @@ class Proc_Midi
|
|
71
79
|
def sel_in(id)
|
72
80
|
@in = UniMIDI::Input.use(id)
|
73
81
|
@in_id = id
|
82
|
+
@midi_in.close
|
83
|
+
set_listener
|
74
84
|
end
|
75
85
|
|
76
86
|
#Sends a note to an instrument
|
@@ -3,6 +3,233 @@
|
|
3
3
|
<interface>
|
4
4
|
<requires lib="gtk+" version="3.20"/>
|
5
5
|
<!-- interface-css-provider-path midinous_themes.style -->
|
6
|
+
<object class="GtkTextBuffer" id="about_text_1">
|
7
|
+
<property name="text">Midinous combines generative features with a grid-based GUI to offer a supplemental unique compositional experience
|
8
|
+
|
9
|
+
Copyright (C) 2019 James "Nornec" Ratliff
|
10
|
+
|
11
|
+
Midinous is free software: you can redistribute it and/or modify
|
12
|
+
it under the terms of the GNU General Public License as published by
|
13
|
+
the Free Software Foundation, either version 3 of the License, or
|
14
|
+
(at your option) any later version.
|
15
|
+
|
16
|
+
https://github.com/Nornec/Midinous
|
17
|
+
https://nornec.bandcamp/com
|
18
|
+
https://youtube.com/nornec
|
19
|
+
https://rubygems.org/gems/midinous</property>
|
20
|
+
</object>
|
21
|
+
<object class="GtkWindow" id="about_window">
|
22
|
+
<property name="can_focus">False</property>
|
23
|
+
<property name="title">About Midinous</property>
|
24
|
+
<property name="icon_name">accessories-calculator-symbolic</property>
|
25
|
+
<property name="resizable">False</property>
|
26
|
+
<child>
|
27
|
+
<placeholder/>
|
28
|
+
</child>
|
29
|
+
<child>
|
30
|
+
<object class="GtkFixed">
|
31
|
+
<property name="visible">True</property>
|
32
|
+
<property name="can_focus">False</property>
|
33
|
+
<child>
|
34
|
+
<object class="GtkTextView">
|
35
|
+
<property name="width_request">100</property>
|
36
|
+
<property name="height_request">80</property>
|
37
|
+
<property name="left_margin">10</property>
|
38
|
+
<property name="right_margin">10</property>
|
39
|
+
<property name="top_margin">10</property>
|
40
|
+
<property name="bottom_margin">10</property>
|
41
|
+
<property name="visible">True</property>
|
42
|
+
<property name="can_focus">True</property>
|
43
|
+
<property name="editable">False</property>
|
44
|
+
<property name="cursor_visible">False</property>
|
45
|
+
<property name="buffer">about_text_1</property>
|
46
|
+
<property name="accepts_tab">False</property>
|
47
|
+
<property name="monospace">True</property>
|
48
|
+
</object>
|
49
|
+
</child>
|
50
|
+
</object>
|
51
|
+
</child>
|
52
|
+
</object>
|
53
|
+
<object class="GtkTextBuffer" id="help_text_1">
|
54
|
+
<property name="text">Note Octave
|
55
|
+
-2 -1 0 1 2 3 4 5 6 7 8
|
56
|
+
C 0 12 24 36 48 60 72 84 96 108 120
|
57
|
+
C# 1 13 25 37 49 61 73 85 97 109 121
|
58
|
+
D 2 14 26 38 50 62 74 86 98 110 122
|
59
|
+
D# 3 15 27 39 51 63 75 87 99 111 123
|
60
|
+
E 4 16 28 40 52 64 76 88 100 112 124
|
61
|
+
F 5 17 29 41 53 65 77 89 101 113 125
|
62
|
+
F# 6 18 30 42 54 66 78 90 102 114 126
|
63
|
+
G 7 19 31 43 55 67 79 91 103 115 127
|
64
|
+
G# 8 20 32 44 56 68 80 92 104 116 -
|
65
|
+
A 9 21 33 45 57 69 81 93 105 117 -
|
66
|
+
A# 10 22 34 46 58 70 82 94 106 118 -
|
67
|
+
B 11 23 35 47 59 71 83 95 107 119 -</property>
|
68
|
+
</object>
|
69
|
+
<object class="GtkWindow" id="notes_window">
|
70
|
+
<property name="can_focus">False</property>
|
71
|
+
<property name="title">Notes by Integer</property>
|
72
|
+
<property name="icon_name">accessories-calculator-symbolic</property>
|
73
|
+
<property name="resizable">False</property>
|
74
|
+
<child>
|
75
|
+
<placeholder/>
|
76
|
+
</child>
|
77
|
+
<child>
|
78
|
+
<object class="GtkFixed">
|
79
|
+
<property name="visible">True</property>
|
80
|
+
<property name="can_focus">False</property>
|
81
|
+
<child>
|
82
|
+
<object class="GtkTextView">
|
83
|
+
<property name="width_request">219</property>
|
84
|
+
<property name="height_request">215</property>
|
85
|
+
<property name="left_margin">10</property>
|
86
|
+
<property name="right_margin">10</property>
|
87
|
+
<property name="top_margin">10</property>
|
88
|
+
<property name="bottom_margin">10</property>
|
89
|
+
<property name="visible">True</property>
|
90
|
+
<property name="can_focus">True</property>
|
91
|
+
<property name="editable">False</property>
|
92
|
+
<property name="cursor_visible">False</property>
|
93
|
+
<property name="buffer">help_text_1</property>
|
94
|
+
<property name="accepts_tab">False</property>
|
95
|
+
<property name="monospace">True</property>
|
96
|
+
</object>
|
97
|
+
</child>
|
98
|
+
</object>
|
99
|
+
</child>
|
100
|
+
</object>
|
101
|
+
<object class="GtkTextBuffer" id="help_text_2">
|
102
|
+
<property name="text">W = whole tone, H = Half tone
|
103
|
+
Scales and their relative intervals
|
104
|
+
Aeolian R-W-H-W-W-H-W-W
|
105
|
+
Altered R-H-W-H-W-W-W-W
|
106
|
+
Augmented R-3H-H-3H-H-3H-H
|
107
|
+
Blues R-3H-W-H-H-3H-W
|
108
|
+
Chromatic R-H-H-H-H-H-H-H-H-H-H-H-H
|
109
|
+
Dorian R-W-H-W-W-W-H-W
|
110
|
+
Flamenco R-H-3H-H-W-H-3H-H
|
111
|
+
Half Diminished R-W-H-W-H-W-W-W
|
112
|
+
Harmonic major R-W-W-H-W-H-3H-H
|
113
|
+
Harmonic minor R-W-H-W-W-H-3H-H
|
114
|
+
Hirajoshi R-2W-W-H-2W-H
|
115
|
+
Hungarian R-W-H-3H-H-H-3H-H
|
116
|
+
Insen R-H-2W-W-2W-W
|
117
|
+
Ionian R-W-W-H-W-W-W-H
|
118
|
+
Iwato R-H-2W-H-2W-W
|
119
|
+
Locrian R-H-W-W-H-W-W-W
|
120
|
+
Locrian Major R-W-W-H-H-W-W-W
|
121
|
+
Lydian R-W-W-W-H-W-W-H
|
122
|
+
Lydian Augmented R-W-W-W-W-H-W-H
|
123
|
+
Pentatonic Major R-W-W-3H-W-3H
|
124
|
+
Pentatonic Minor R-3H-W-W-3H-W
|
125
|
+
Melodic minor R-W-H-W-W-W-W-H
|
126
|
+
Mixolydian R-W-W-H-W-W-H-W
|
127
|
+
Octatonic Whole R-W-H-W-H-W-H-W-H
|
128
|
+
Octatonic Half R-H-W-H-W-H-W-H-W
|
129
|
+
Persian R-H-3H-H-H-W-3H-H
|
130
|
+
Phrygian R-H-W-W-W-H-W-W
|
131
|
+
Prometheus R-W-W-W-3H-H-W
|
132
|
+
Tritone R-H-3H-W-H-3H-W
|
133
|
+
Two-semitone Tritone R-H-H-4H-H-H
|
134
|
+
Ukrainian Dorian R-W-H-3H-H-W-H-W
|
135
|
+
Whole Tone R-W-W-W-W-W-W</property>
|
136
|
+
</object>
|
137
|
+
<object class="GtkWindow" id="scales_window">
|
138
|
+
<property name="can_focus">False</property>
|
139
|
+
<property name="title" translatable="yes">Scales and Intervals</property>
|
140
|
+
<property name="icon_name">accessories-calculator-symbolic</property>
|
141
|
+
<property name="resizable">False</property>
|
142
|
+
<child>
|
143
|
+
<placeholder/>
|
144
|
+
</child>
|
145
|
+
<child>
|
146
|
+
<object class="GtkFixed">
|
147
|
+
<property name="visible">True</property>
|
148
|
+
<property name="can_focus">False</property>
|
149
|
+
<child>
|
150
|
+
<object class="GtkTextView">
|
151
|
+
<property name="width_request">267</property>
|
152
|
+
<property name="height_request">510</property>
|
153
|
+
<property name="left_margin">10</property>
|
154
|
+
<property name="right_margin">10</property>
|
155
|
+
<property name="top_margin">10</property>
|
156
|
+
<property name="bottom_margin">10</property>
|
157
|
+
<property name="visible">True</property>
|
158
|
+
<property name="can_focus">True</property>
|
159
|
+
<property name="editable">False</property>
|
160
|
+
<property name="cursor_visible">False</property>
|
161
|
+
<property name="buffer">help_text_2</property>
|
162
|
+
<property name="accepts_tab">False</property>
|
163
|
+
<property name="monospace">True</property>
|
164
|
+
</object>
|
165
|
+
</child>
|
166
|
+
</object>
|
167
|
+
</child>
|
168
|
+
</object>
|
169
|
+
<object class="GtkTextBuffer" id="help_text_3">
|
170
|
+
<property name="text" translatable="yes">[ -- decrement grid size/change time signature divisor -1
|
171
|
+
] -- increment grid size/ change time signature divisor +1
|
172
|
+
{ -- decrement time signature denominator (slows down play) - min 2
|
173
|
+
} -- increment time signature denominator (speeds up play) - max 16
|
174
|
+
delete -- deletes selected point(s)
|
175
|
+
home -- deletes paths entering selected point(s)
|
176
|
+
end -- deletes paths leaving selected point(s)
|
177
|
+
Page Up -- change path direction
|
178
|
+
Page Down -- change path direction
|
179
|
+
A -- Make starting point (need at least 1 to begin play)
|
180
|
+
T -- Built path - build a path between one or more points
|
181
|
+
Q -- Select Tool - Box select or single select points
|
182
|
+
W -- Point Place Tool - Places a point
|
183
|
+
E -- Move Tool - moves selected points based on a stencil
|
184
|
+
R -- Path Tool - Select source point, select target points, push build path or hit 'T'
|
185
|
+
< and > -- Cycle Play Mode - between robin, portal (random, split, if more than one path is leaving a point)
|
186
|
+
, and . -- Cycle starting path if more than one path is leaving a point
|
187
|
+
+ and - -- add or subtract 1 from the currently selected points' note
|
188
|
+
Num 6 -- play
|
189
|
+
Num 5 -- stop
|
190
|
+
space -- toggle play/stop
|
191
|
+
Ctrl+A -- select all
|
192
|
+
Ctrl+C -- copy selected points
|
193
|
+
Ctrl+X -- cut selected points
|
194
|
+
Ctrl+V -- paste copied/cut points
|
195
|
+
Ctrl+O -- Open
|
196
|
+
Ctrl+S -- Save
|
197
|
+
Shift+Ctrl+S -- Save As
|
198
|
+
Ctrl+N -- New
|
199
|
+
Ctrl+Q -- Quit</property>
|
200
|
+
</object>
|
201
|
+
<object class="GtkWindow" id="hotkeys_window">
|
202
|
+
<property name="can_focus">False</property>
|
203
|
+
<property name="title" translatable="yes">Hotkeys</property>
|
204
|
+
<property name="icon_name">accessories-calculator-symbolic</property>
|
205
|
+
<property name="resizable">False</property>
|
206
|
+
<child>
|
207
|
+
<placeholder/>
|
208
|
+
</child>
|
209
|
+
<child>
|
210
|
+
<object class="GtkFixed">
|
211
|
+
<property name="visible">True</property>
|
212
|
+
<property name="can_focus">False</property>
|
213
|
+
<child>
|
214
|
+
<object class="GtkTextView">
|
215
|
+
<property name="width_request">100</property>
|
216
|
+
<property name="height_request">80</property>
|
217
|
+
<property name="left_margin">10</property>
|
218
|
+
<property name="right_margin">10</property>
|
219
|
+
<property name="top_margin">10</property>
|
220
|
+
<property name="bottom_margin">10</property>
|
221
|
+
<property name="visible">True</property>
|
222
|
+
<property name="can_focus">True</property>
|
223
|
+
<property name="editable">False</property>
|
224
|
+
<property name="cursor_visible">False</property>
|
225
|
+
<property name="buffer">help_text_3</property>
|
226
|
+
<property name="accepts_tab">False</property>
|
227
|
+
<property name="monospace">True</property>
|
228
|
+
</object>
|
229
|
+
</child>
|
230
|
+
</object>
|
231
|
+
</child>
|
232
|
+
</object>
|
6
233
|
<object class="GtkDialog" id="confirmer">
|
7
234
|
<property name="title" translatable="yes">Confirmation</property>
|
8
235
|
<property name="icon_name">accessories-calculator-symbolic</property>
|
@@ -363,6 +590,29 @@
|
|
363
590
|
</object>
|
364
591
|
</child>
|
365
592
|
</object>
|
593
|
+
</child>
|
594
|
+
<child>
|
595
|
+
<object class="GtkMenuItem">
|
596
|
+
<property name="visible">True</property>
|
597
|
+
<property name="can_focus">False</property>
|
598
|
+
<property name="label" translatable="yes">Input _Channel</property>
|
599
|
+
<property name="use_underline">True</property>
|
600
|
+
<child type="submenu">
|
601
|
+
<object class="GtkMenu" id="input_channel_menu">
|
602
|
+
<property name="visible">True</property>
|
603
|
+
<property name="can_focus">False</property>
|
604
|
+
<!-- child>
|
605
|
+
<object class="GtkImageMenuItem" id="file_quit">
|
606
|
+
<property name="label">gtk-quit</property>
|
607
|
+
<property name="visible">True</property>
|
608
|
+
<property name="can_focus">False</property>
|
609
|
+
<property name="use_underline">True</property>
|
610
|
+
<property name="use_stock">True</property>
|
611
|
+
</object>
|
612
|
+
</child> -->
|
613
|
+
</object>
|
614
|
+
</child>
|
615
|
+
</object>
|
366
616
|
</child>
|
367
617
|
<child>
|
368
618
|
<object class="GtkMenuItem">
|
@@ -394,12 +644,39 @@
|
|
394
644
|
<property name="label" translatable="yes">_Help</property>
|
395
645
|
<property name="use_underline">True</property>
|
396
646
|
<child type="submenu">
|
397
|
-
<object class="GtkMenu">
|
647
|
+
<object class="GtkMenu" id="help_menu">
|
398
648
|
<property name="visible">True</property>
|
399
649
|
<property name="can_focus">False</property>
|
400
650
|
<child>
|
401
651
|
<object class="GtkImageMenuItem" id="help_about">
|
402
|
-
<property name="label">
|
652
|
+
<property name="label">_About</property>
|
653
|
+
<property name="visible">True</property>
|
654
|
+
<property name="can_focus">False</property>
|
655
|
+
<property name="use_underline">True</property>
|
656
|
+
<property name="use_stock">True</property>
|
657
|
+
</object>
|
658
|
+
</child>
|
659
|
+
<child>
|
660
|
+
<object class="GtkImageMenuItem" id="help_notes">
|
661
|
+
<property name="label">_Notes by Integer</property>
|
662
|
+
<property name="visible">True</property>
|
663
|
+
<property name="can_focus">False</property>
|
664
|
+
<property name="use_underline">True</property>
|
665
|
+
<property name="use_stock">True</property>
|
666
|
+
</object>
|
667
|
+
</child>
|
668
|
+
<child>
|
669
|
+
<object class="GtkImageMenuItem" id="help_scales">
|
670
|
+
<property name="label">_Scales and Intervals</property>
|
671
|
+
<property name="visible">True</property>
|
672
|
+
<property name="can_focus">False</property>
|
673
|
+
<property name="use_underline">True</property>
|
674
|
+
<property name="use_stock">True</property>
|
675
|
+
</object>
|
676
|
+
</child>
|
677
|
+
<child>
|
678
|
+
<object class="GtkImageMenuItem" id="help_hotkeys">
|
679
|
+
<property name="label">_Hotkeys</property>
|
403
680
|
<property name="visible">True</property>
|
404
681
|
<property name="can_focus">False</property>
|
405
682
|
<property name="use_underline">True</property>
|
data/lib/midinous/style/ui.rb
CHANGED
@@ -63,12 +63,14 @@ end
|
|
63
63
|
class UI_Elements
|
64
64
|
include Logic_Controls
|
65
65
|
# Construct a Gtk::Builder instance and load our UI description
|
66
|
-
attr_reader :menu_commands,:canvas_commands,:in_device_items
|
66
|
+
attr_reader :menu_commands,:canvas_commands,:in_device_items,
|
67
|
+
:out_device_items,:in_channel_items
|
67
68
|
def initialize
|
68
69
|
@current_file = nil
|
69
70
|
@operation_file = nil
|
70
71
|
@current_window = nil
|
71
72
|
@scale_iters = []
|
73
|
+
@in_channel_items = []
|
72
74
|
@in_device_items = []
|
73
75
|
@out_device_items = []
|
74
76
|
end
|
@@ -88,6 +90,18 @@ class UI_Elements
|
|
88
90
|
def confirmer
|
89
91
|
@builder.get_object("confirmer")
|
90
92
|
end
|
93
|
+
def about_window
|
94
|
+
@builder.get_object("about_window")
|
95
|
+
end
|
96
|
+
def notes_window
|
97
|
+
@builder.get_object("notes_window")
|
98
|
+
end
|
99
|
+
def scales_window
|
100
|
+
@builder.get_object("scales_window")
|
101
|
+
end
|
102
|
+
def hotkeys_window
|
103
|
+
@builder.get_object("hotkeys_window")
|
104
|
+
end
|
91
105
|
|
92
106
|
#Menus
|
93
107
|
def input_menu
|
@@ -96,6 +110,12 @@ class UI_Elements
|
|
96
110
|
def output_menu
|
97
111
|
@builder.get_object("output_menu")
|
98
112
|
end
|
113
|
+
def input_channel_menu
|
114
|
+
@builder.get_object("input_channel_menu")
|
115
|
+
end
|
116
|
+
def help_menu
|
117
|
+
@builder.get_object("help_menu")
|
118
|
+
end
|
99
119
|
|
100
120
|
#Menu Items
|
101
121
|
def file_new
|
@@ -115,6 +135,15 @@ class UI_Elements
|
|
115
135
|
end
|
116
136
|
def help_about
|
117
137
|
@builder.get_object("help_about")
|
138
|
+
end
|
139
|
+
def help_notes
|
140
|
+
@builder.get_object("help_notes")
|
141
|
+
end
|
142
|
+
def help_scales
|
143
|
+
@builder.get_object("help_scales")
|
144
|
+
end
|
145
|
+
def help_hotkeys
|
146
|
+
@builder.get_object("help_hotkeys")
|
118
147
|
end
|
119
148
|
|
120
149
|
#Drawing Areas
|
@@ -271,6 +300,10 @@ class UI_Elements
|
|
271
300
|
@builder.get_object("scale_display")
|
272
301
|
end
|
273
302
|
|
303
|
+
16.times.with_index {|i| @in_channel_items << Gtk::ImageMenuItem.new(label: (i+1).to_s)}
|
304
|
+
@in_channel_items.each {|i| input_channel_menu.append(i)}
|
305
|
+
input_channel_menu.show_all
|
306
|
+
|
274
307
|
Pm.in_list.each {|i| @in_device_items << Gtk::ImageMenuItem.new(label: i.name)}
|
275
308
|
@in_device_items.each {|i| input_menu.append(i)}
|
276
309
|
input_menu.show_all
|
@@ -291,7 +324,8 @@ class UI_Elements
|
|
291
324
|
|
292
325
|
def regen_status
|
293
326
|
unless Pm.in_list.empty?
|
294
|
-
status_area.text = "Using: Output[#{Pm.out_list[Pm.out_id].name}]
|
327
|
+
status_area.text = "Using: Output[#{Pm.out_list[Pm.out_id].name}] "\
|
328
|
+
"Input[#{Pm.in_list[Pm.in_id].name} Channel: #{Pm.in_chan}]"
|
295
329
|
else
|
296
330
|
status_area.text = "Using: Output[#{Pm.out_list[Pm.out_id].name}]"
|
297
331
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: midinous
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James "Nornec" Ratliff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gtk3
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: Midinous combines generative features with a grid-based GUI to offer
|
56
|
-
a supplemental unique compositional experience
|
56
|
+
a supplemental and unique compositional experience
|
57
57
|
email: jaynornec@gmail.com
|
58
58
|
executables: []
|
59
59
|
extensions: []
|
@@ -85,15 +85,16 @@ require_paths:
|
|
85
85
|
- lib
|
86
86
|
required_ruby_version: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - "
|
88
|
+
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 2.5.0
|
91
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
93
|
- - ">="
|
94
94
|
- !ruby/object:Gem::Version
|
95
95
|
version: '0'
|
96
|
-
requirements:
|
96
|
+
requirements:
|
97
|
+
- Virtual MIDI Cable (Windows)
|
97
98
|
rubyforge_project:
|
98
99
|
rubygems_version: 2.7.6.2
|
99
100
|
signing_key:
|