Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- math.randomseed(os.time())
- --output random # between 0 and 1
- function random()
- local big = 10000000
- return math.random(0,big)/big
- end
- --object representing a single note
- Note = {
- order = 0; note = " ";
- new = function(order, note)
- local n = {}
- n.order = order
- n.note = note
- n.get = Note.get
- return n
- end;
- get = function(self)
- print(self.order, self.note)
- end
- }
- --object containing list of notes, contains all 12 notes by default
- NoteList = {
- Note.new(1, 'Ab');
- Note.new(2, 'A');
- Note.new(3, 'Bb');
- Note.new(4, 'B');
- Note.new(5, 'C');
- Note.new(6, 'Db');
- Note.new(7, 'D');
- Note.new(8, 'Eb');
- Note.new(9, 'E');
- Note.new(10, 'F');
- Note.new(11, 'Gb');
- Note.new(12, 'G');
- get = function(self)
- for i=1,#self do
- self[i]:get()
- end
- end;
- new = function(self)
- local n = {}
- for k,v in pairs(NoteList) do
- n[k] = v
- end
- return n
- end;
- --randomly select N notes from default NoteList, retaining original sort order
- randomlist = function(self, N)
- local copy = NoteList.new()
- --shuffle the note list by assigning random # and sorting by it
- for k,v in ipairs(copy) do
- copy[k].random = random()
- end
- table.sort(copy, function(k1, k2) return k1.random < k2.random end)
- --delete all but first N notes
- for i=#copy, 1, -1 do
- if i > N then
- copy[i] = nil
- end
- end
- --sort back into original order (by note name) and output
- table.sort(copy, function(k1, k2) return k1.order < k2.order end)
- return copy
- end;
- --output space-separated list of notes from object
- output_list = function(self)
- local output = ""
- for k,v in ipairs(self) do
- if k==1 then output = self[k].note
- else output = output .. " " .. self[k].note
- end
- end
- return output
- end
- }
- --generate [num] note lists each containing between [min] and [max] total notes
- function generate_lists(num, min, max)
- for i=1,num do
- n = math.random(min, max)
- local a = NoteList:randomlist(n)
- print(a:output_list())
- end
- end
- generate_lists(50, 2, 5)
- --[[
- sample output:
- Bb F Gb
- Ab D E F G
- A Eb F
- Gb G
- B D E Gb
- Bb Db
- Bb D
- Ab C D E
- B C Db Eb E
- Db D E Gb G
- A D Eb
- Eb E
- D G
- A Eb Gb
- B Eb E
- B D
- F Gb
- Ab Bb F Gb
- B F Gb
- C Db Eb Gb
- Bb C
- Gb G
- Ab A D E Gb
- C Db Gb
- A Bb Db F
- Ab Bb B G
- B D
- Db G
- Bb B E F
- Ab D E Gb
- Db Gb G
- Db Gb
- Ab C D F Gb
- Ab E
- A Db Gb
- Bb Db Eb Gb
- A G
- A Bb D Eb G
- Db F
- B D Gb
- B D E
- C D Eb F G
- B F Gb G
- B C D G
- C Db
- A Gb
- B Eb E Gb
- Bb Db Gb
- Ab C E G
- Bb B D G
- --]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement