Guest User

Untitled

a guest
May 26th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. require "bloops"
  2.  
  3. class BloopSong
  4. def self.init(tempo)
  5. @bloops = Bloops.new
  6. @bloops.tempo = tempo
  7. yield self
  8. self
  9. end
  10.  
  11. def self.play(opt)
  12. score_set = read_score(DATA)
  13. tunes = opt[:tune]
  14. range_max = score_set[tunes.first].length-1
  15. range =
  16. if !opt[:range]
  17. (0..range_max)
  18. elsif opt[:range].end > range_max || opt[:range].end < 0
  19. (opt[:range].begin..range_max)
  20. else
  21. opt[:range]
  22. end
  23.  
  24. for i in range
  25. tunes.each do |tune|
  26. @bloops.tune send(tune), score_set[tune][i]
  27. end
  28. @bloops.play
  29. sleep 0.01 until @bloops.stopped?
  30. @bloops.clear
  31. end
  32. end
  33.  
  34. private
  35. def self.define_class_method(name)
  36. (class << self; self end).module_eval { define_method(name) { yield } }
  37. end
  38.  
  39. def self.sound(name, type)
  40. self.instance_variable_set("@#{name}", @bloops.sound( Bloops.module_eval(type) ))
  41. define_class_method(name) { self.instance_variable_get("@#{name}") }
  42. yield send(name)
  43. @bloops
  44. end
  45.  
  46. def self.read_score(score)
  47. q = Hash.new([])
  48. flag = nil
  49. score.each_line do |line|
  50. next if line =~ /^\s*$/
  51. case line
  52. when /^:(\w+)/ then flag = $1
  53. else
  54. q[flag.to_sym] += [line]
  55. end
  56. end
  57. q
  58. end
  59. end
Add Comment
Please, Sign In to add comment