Created
May 27, 2010 14:25
-
-
Save melborne/415859 to your computer and use it in GitHub Desktop.
DSL for bloopaphone
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "bloops" | |
class BloopSong | |
def self.init(tempo) | |
@bloops = Bloops.new | |
@bloops.tempo = tempo | |
yield self | |
self | |
end | |
def self.play(opt) | |
score_set = read_score(DATA) | |
tunes = opt[:tune] | |
range_max = score_set[tunes.first].length-1 | |
range = | |
if !opt[:range] | |
(0..range_max) | |
elsif opt[:range].end > range_max || opt[:range].end < 0 | |
(opt[:range].begin..range_max) | |
else | |
opt[:range] | |
end | |
for i in range | |
tunes.each do |tune| | |
@bloops.tune send(tune), score_set[tune][i] | |
end | |
@bloops.play | |
sleep 0.01 until @bloops.stopped? | |
@bloops.clear | |
end | |
end | |
private | |
def self.define_class_method(name) | |
(class << self; self end).module_eval { define_method(name) { yield } } | |
end | |
def self.sound(name, type) | |
self.instance_variable_set("@#{name}", @bloops.sound( Bloops.module_eval(type) )) | |
define_class_method(name) { self.instance_variable_get("@#{name}") } | |
yield send(name) | |
@bloops | |
end | |
def self.read_score(score) | |
q = Hash.new([]) | |
flag = nil | |
score.each_line do |line| | |
next if line =~ /^\s*$/ | |
case line | |
when /^:(\w+)/ then flag = $1 | |
else | |
q[flag.to_sym] += [line] | |
end | |
end | |
q | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/local/bin/ruby | |
# -*- encoding:utf-8 -*- | |
require_relative "bloopsong" | |
mario = | |
BloopSong.init(216) do |b| | |
b.sound(:lead, :SQUARE) do |s| | |
s.volume = 0.4 | |
s.punch = 0.441 | |
s.sustain = 0.067 | |
s.decay = 0.297 | |
s.freq = 0.499 | |
end | |
b.sound(:lead2, :SQUARE) do |s| | |
s.volume = 0.4 | |
s.punch = 0.441 | |
s.sustain = 0.067 | |
s.decay = 0.297 | |
s.freq = 0.499 | |
end | |
b.sound(:base, :SQUARE) do |s| | |
s.volume = 0.4 | |
s.punch = 0.641 | |
s.sustain = 0.197 | |
s.decay = 0.197 | |
s.freq = 0.499 | |
end | |
end | |
mario.play(:range => 0..-1, :tune => [:lead, :lead2, :base]) | |
__END__ | |
:lead | |
8E5 8E5 8 8E5 8 8C5 4E5 4G5 4 4G4 4 4C5 8 8G4 4 4E4 8 4A4 4B4 8A#4 4A4 | |
6G4 6E5 6G5 4A5 8F5 8G5 8 4E5 8C5 8D5 4B4 8 4C5 8 8G4 4 4E4 8 4A4 4B4 8A#4 4A4 | |
6G4 6E5 6G5 4A5 8F5 8G5 8 4E5 8C5 8D5 4B4 8 4 8G5 8F#5 8F5 4D#5 8E5 8 8G#4 8A4 8C5 8 8A4 8C5 8D5 | |
4 8G5 8F#5 8F5 4D#5 8E5 8 4C6 8C6 4C6 4 4 8G5 8F#5 8F5 4D#5 8E5 8 8G#4 8A4 8C5 8 8A4 8C5 8D5 | |
4 4D#5 8 4D5 8 4C5 4 4 4 4 8G5 8F#5 8F5 4D#5 8E5 8 8G#4 8A4 8C5 8 8A4 8C5 8D5 | |
4 8G5 8F#5 8F5 4D#5 8E5 8 4C6 8C6 4C6 4 4 8G5 8F#5 8F5 4D#5 8E5 8 8G#4 8A4 8C5 8 8A4 8C5 8D5 | |
4 4D#5 8 4D5 8 2C5 2 8C5 4C5 8C5 8 8C5 4D5 8E5 4C5 8A4 4G4 4 | |
8C5 4C5 8C5 8 8C5 8D5 8E5 1 8C5 4C5 8C5 8 8C5 4D5 8E5 4C5 8A4 4G4 4 | |
8E5 8E5 8 8E5 8 8C5 4E5 4G5 4 4G4 4 4C5 8 8G4 4 4E4 8 4A4 4B4 8A#4 4A4 | |
6G4 6E5 6G5 4A5 8F5 8G5 8 4E5 8C5 8D5 4B4 8 4C5 8 8G4 4 4E4 8 4A4 4B4 8A#4 4A4 | |
6G4 6E5 6G5 4A5 8F5 8G5 8 4E5 8C5 8D5 4B4 8 8E5 4C5 8G4 4 4G#4 8A4 4F5 8F5 2A4 | |
6B4 6A5 6A5 6A5 6G5 6F5 8E5 4C5 8A4 2G4 8E5 4C5 8G4 4 4G#4 8A4 4F5 8F5 2A4 | |
8B4 4F5 8F5 6F5 6E5 6D5 2C5 4 4C4 8E5 4C5 8G4 4 4G#4 8A4 4F5 8F5 2A4 | |
6B4 6A5 6A5 6A5 6G5 6F5 8E5 4C5 8A4 2G4 8E5 4C5 8G4 4 4G#4 8A4 4F5 8F5 2A4 | |
8B4 4F5 8F5 6F5 6E5 6D5 2C5 4 4C4 8C5 4C5 8C5 8 8C5 4D5 8E5 4C5 8A4 2G4 | |
8C5 4C5 8C5 8 8C5 8D5 8E5 1 8C5 4C5 8C5 8 8C5 4D5 8E5 4C5 8A4 2G4 | |
8E5 8E5 8 8E5 8 8C5 4E5 4G5 4 4G4 4 8E5 4C5 8G4 4 4G#4 8A4 4F5 8F5 2A4 | |
6B4 6A5 6A5 6A5 6G5 6F5 8E5 4C4 8A4 2G4 8E5 4C5 8G4 4 4G#4 8A4 4F5 8F5 2A4 | |
8B4 4F5 8F5 6F5 6E5 6D5 2C5 4 4C4 4C5 8 4G4 8 4E4 6A4 6B4 6A4 6G#4 6A#4 6G#4 | |
1g | |
:lead2 | |
8F#4 8F#4 8 8F#4 8 8F#4 4F#4 4G4 4 4G4 4 4E4 8 8E4 4 4C4 8 4C4 4D4 8C#4 4C4 | |
6C4 6E4 6B4 4C5 8A4 8B4 8 4A4 8E4 8F4 4D4 8 4E4 8 8E4 4 4C4 8 4C4 4D4 8C#4 4C4 | |
6C4 6E4 6B4 4C5 8A4 8B4 8 4A4 8E4 8F4 4D4 8 4 8E5 8D#5 8D5 4B4 8C5 8 8E4 8F4 8A4 8 8C4 8E4 8F4 | |
4 8E5 8D#5 8D5 4B4 8C5 8 4G5 8G5 4G5 4 4 8E5 8D#5 8D5 4B4 8C5 8 8E4 8F4 8A4 8 8C4 8E4 8F4 | |
4 4G#4 8 4F4 8 4E4 4 4 4 4 8E5 8D#5 8D5 4B4 8C5 8 8E4 8F4 8A4 8 8C4 8E4 8F4 | |
4 8E5 8D#5 8D5 4B4 8C5 8 4G5 8G5 4G5 4 4 8E5 8D#5 8D5 4B4 8C5 8 8E4 8F4 8A4 8 8C4 8E4 8F4 | |
4 4G#4 8 4F4 8 2E4 2 8G#4 4G#4 8G#4 8 8G#4 4A#4 8G4 4E4 8E4 4C4 4 | |
8G#4 4G#4 8G#4 8 8G#4 8A#4 8G4 1 8G#4 4G#4 8G#4 8 8G#4 4A#4 8G4 4E4 8E4 4C4 4 | |
8F#4 8F#4 8 8F#4 8 8F#4 4F#4 4B4 2 4 4E4 8 8E4 4 4C4 8 4C4 4D4 8C#4 4C4 | |
6C4 6G4 6B4 4C5 8A4 8B4 8 4C4 8E4 8F4 4D4 8 4E4 8 8E4 4 4C4 8 4C4 4D4 8C#4 4C4 | |
6C4 6G4 6B4 4C5 8A4 8B4 8 4C4 8E4 8F4 4D4 8 8C5 4A4 8E4 4 4E4 8F4 4C5 8C5 2F4 | |
6G4 6F5 6F5 6F5 6E5 6D5 8C5 4A4 8F4 2E4 8C5 4A4 8E4 4 4E4 8F4 4C5 8C5 2F4 | |
8G4 4D5 8D5 6D5 6C5 6B4 8G4 4E4 8E4 2 8C5 4A4 8E4 4 4E4 8F4 4C5 8C5 2F4 | |
6G4 6F5 6F5 6F5 6E5 6D5 8C5 4A4 8F4 2E4 8C5 4A4 8E4 4 4E4 8F4 4C5 8C5 2F4 | |
8G4 4D5 8D5 6D5 6C5 6B4 8G4 4E4 8E4 2 8G#4 4G#4 8G#4 8 8G#4 4A#4 8G4 4E4 8E4 4C4 4 | |
8G#4 4G#4 8G#4 8 8G#4 8A#4 8G4 1 8G#4 4G#4 8G#4 8 8G#4 4A#4 8G4 4E4 8E4 4C4 4 | |
8F#4 8F#4 8 8F#4 8 8F#4 4F#4 4B4 2 4 8C5 4A4 8E4 4 4E4 8F4 4C5 8C5 2F4 | |
6G4 6F5 6F5 6F5 6E5 6D5 8C5 4A4 8F4 2E4 8C5 4A4 8E4 4 4E4 8F4 4C5 8C5 2F4 | |
8G4 4D5 8D5 6D5 6C5 6B4 8G4 4E4 8E4 2 4E5 8 4E4 8 4C3 2F4 2F4 | |
8E4 8D4 1E4 | |
:base | |
8D3 8D3 8 8D3 8 8D3 4D3 4G3 4 4G3 4 4G3 8 8E3 4 4C3 8 4F3 4G3 8F#3 4E3 | |
6E3 6C4 6E4 4F4 8D4 8E4 8 4C4 8A3 8B3 4G3 8 4G3 8 8E3 4 4C3 8 4F3 4G3 8F#3 4E3 | |
6E3 6C4 6E4 4F4 8D4 8E4 8 4C4 8A3 8B3 4G3 8 4C3 8 8G3 4 4C4 4F3 8 8C4 4C4 4F3 | |
4C3 8 8E3 4 8G3 8C4 2 4 4G3 4C3 8 8G3 4 4C4 4F3 8 8C4 4C4 4F3 | |
4C3 4G#3 8 4A#3 8 4C4 8 8G3 4G3 4C3 4C3 8 8G3 4 4C4 4F3 8 8C4 4C4 4F3 | |
4C3 8 8E3 4 8G3 8C4 2 4 4G3 4C3 8 8G3 4 4C4 4F3 8 8C4 4C4 4F3 | |
4C3 4G#3 8 4A#3 8 4C4 8 8G3 4G3 4C3 4G#2 8 8D#3 4 4G#3 4G3 8 8C3 4 4G2 | |
4G#2 8 8B#3 4 4G#3 4G3 8 8C3 4 4G2 4G#2 8 8B#3 4 4G#3 4G3 8 8C3 4 4G2 | |
8D3 8D3 8 8D3 8 8D3 4D3 2 4G3 4 4G3 8 8E3 4 4C3 8 4F3 4G3 8F#3 4C3 | |
6E3 6C4 6E4 4F4 8D4 8E4 8 4C4 8A3 8B3 4G3 8 4G3 8 8E3 4 4C3 8 4E3 4G3 8E#3 4E3 | |
6E3 6C4 6E4 4F4 8D4 8E4 8 4C4 8A3 8B3 4G3 8 4C3 8 8E#3 4G3 4C4 4F3 4F3 8C4 8C4 4F3 | |
3D3 6F3 4G3 4B3 4G3 4G3 8C4 8C4 4G3 4C3 8 8F#3 4G3 4C4 4F3 4F3 8C4 8C4 4F3 | |
8G3 4G3 8G3 6G3 6A3 6B3 4C4 4G3 2C3 4C3 8 8F#3 4G3 4C4 4F3 4F3 8C4 8C4 4F3 | |
3D3 6F3 4G3 4B3 4G3 4G3 8C4 8C4 4G3 4C3 8 8F#3 4G3 4C4 4F3 4F3 8C4 8C4 4F3 | |
8G3 4G3 8G3 6G3 6A3 6B3 4C4 4G3 2C3 4G#2 8 8D#3 4 4G#3 4G3 8 8C3 4 4G2 | |
4G#2 8 8D#3 4 4G#3 4G3 8 8C3 4 4G2 4G#2 8 8D#3 4 4G#3 4G3 8 8C3 4 4G2 | |
8D3 8D3 8 8D3 8 8D3 4D3 2 4G3 4 4C3 8 8F#3 4G3 4C4 4F3 4F3 8C4 8C4 4F3 | |
3D3 6F3 4G3 4B3 4G3 4G3 8C4 8C4 4G3 4C3 8 8F#3 4G3 4C4 4F3 4F3 8C4 8C4 4F3 | |
8G3 4G3 8G3 6G3 6A3 6B3 4C4 4G3 2C3 4G3 8 4E3 8 4C3 2F3 2C#3 | |
1C3 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'bloops' | |
bases = Dir["../../sounds/*.blu"] | |
b = Bloops.new | |
bases.each do |base| | |
puts "** playing scale using #{base[/\w+.blu/]}" | |
sound = b.load base | |
b.tune sound, "c c# d eb e f f# g ab a bb b + c" | |
b.play | |
sleep 1 while !b.stopped? | |
b.clear | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/local/bin/ruby | |
# -*- encoding:utf-8 -*- | |
require_relative "bloopsong" | |
zelda = | |
BloopSong.init(120) do |b| | |
b.sound(:lead, :SQUARE) do |s| | |
s.volume = 0.5 | |
end | |
b.sound(:lead2, :SQUARE) do |s| | |
s.volume = 0.5 | |
end | |
b.sound(:base, :SQUARE) do |s| | |
s.volume = 0.5 | |
end | |
end | |
zelda.play(:range => 0..-1, :tune => [:lead, :lead2, :base]) | |
__END__ | |
:lead | |
2A# 12 12 12A# 12A# 12A# 12A# 6A# 12G# 4A# 12 12 12A# 12A# 12A# 12A# | |
6A# 12G# 4A# 12 12 12A# 12A# 12A# 12A# 8A# 16F 16F 8F 16F 16F 8F 16F 16F 8F 8F | |
4A# 4F 6 12A# 16A# + 16C 16D 16D# 2F 8 8F 12F 12F# 12G# | |
+ 2A# 12 12A# 12A# 12A# 12G# 12F# 6G# 12F# 2F 4F | |
+ 8D# 16D# 16F 2F# 8F 8D# 8C# 16C# 16D# 2F 8D# 8C# | |
+ 8C 16C 16D 2E 4G 8F - 16F 16F 8F 16F 16F 8F 16F 16F 8F 8F | |
4A# 4F 6 12A# 16A# + 16C 16D 16D# 2F 8 8F 12F 12F# 12G# | |
+ 2A# 4 + 4C# 4C - 4A 4 4F | |
+ 2F# 4 4A# 4A 4F 4 4F | |
+ 2F# 4 4A# 4A 4F 4 4D | |
+ 2D# 4 4F# 4F 4C# 4 - 4A# | |
+ 8C 16C 16D 4E 4 4G 8F - 16F 16F 8F 16F 16F 8F 16F 16F 8F 8F | |
4A# 4F 6 12A# 16A# + 16C 16D 16D# 2F 8 8F 12F 12F# 12G# | |
+ 2A# 12 12A# 12A# 12A# 12G# 12F# 6G# 12F# 2F 4F | |
+ 8D# 16D# 16F 2F# 8F 8D# 8C# 16C# 16D# 2F 8D# 8C# | |
+ 8C 16C 16D 2E 4G 8F - 16F 16F 8F 16F 16F 8F 16F 16F 8F 8F | |
4A# 4F 6 12A# 16A# + 16C 16D 16D# 2F 8 8F 12F 12F# 12G# | |
+ 2A# 4 + 4C# 4C - 4A 4 4F | |
+ 2F# 4 4A# 4A 4F 4 4F | |
+ 2F# 4 4A# 4A 4F 4 4D | |
+ 2D# 4 4F# 4F 4C# 4 - 4A# | |
+ 8C 16C 16D 4E 4 4G 8F - 16F 16F 8F 16F 16F 8F 16F 16F 8F 8F | |
:lead2 | |
2D 12 12 12D 12D 12D 12D 6C 12C 4C 4 12C 12C 12C | |
6C# 12C# 4C# 12 12 12C# 12C# 12C# 12C# 8C# - 16A 16A 8A 16A 16A 8A 16A 16A 8A 8A | |
4D 12D 12D 12C 6D 12D 16D 16D# 16F 16G 6G# 12A# 16A# + 16C 16D 16D# 4F - 12G# 12A# + 12C | |
+ 6C# - 12F# 16F# 16G# 16A# + 16C 6D 12D 12D 12C - 12A# + 6C# - 12G# 12G# 12G# 12F# 12G# 6G# 12G# 12G 12G# | |
8F# 16F# 16F 8F# 16F# 16G# 4A# 8G# 8F# 8F 16F 16D# 8F 16F 16F# 4G# 8F# 8F | |
4E 8E 16E 16F 8G 16G 16A 8A# + 8C - 8A - 16A 16A 8A 16A 16A 8A 16A 16A 8A 8A | |
4D 12D 12D 12C 6D 12D 16D 16D# 16F 16G 6G# 12A# 16A# + 16C 16D 16D# 4F - 12G# 12A# + 12C | |
+ 2C# 4 4E 4D# 4C 4 - 4A | |
2B 4 + 4C# 4C - 4A 4 4A | |
2B 4 + 4C# 4C - 4A 4 4A | |
2F# 4 + 4B# - 4A# 4F 4 4C# | |
4E 8E 16E 16F 8G 16G 16A 8A# + 8C - 8A - 16A 16A 8A 16A 16A 8A 16A 16A 8A 8A | |
4D 12D 12D 12C 6D 12D 16D 16D# 16F 16G 6G# 12A# 16A# + 16C 16D 16D# 4F - 12G# 12A# + 12C | |
+ 6C# - 12F# 16F# 16G# 16A# + 16C 6D 12D 12D 12C - 12A# + 6C# - 12G# 12G# 12G# 12F# 12G# 6G# 12G# 12G 12G# | |
8F# 16F# 16F 8F# 16F# 16G# 4A# 8G# 8F# 8F 16F 16D# 8F 16F 16F# 4G# 8F# 8F | |
4E 8E 16E 16F 8G 16G 16A 8A# + 8C - 8A - 16A 16A 8A 16A 16A 8A 16A 16A 8A 8A | |
4D 12D 12D 12C 6D 12D 16D 16D# 16F 16G 6G# 12A# 16A# + 16C 16D 16D# 4F - 12G# 12A# + 12C | |
+ 2C# 4 4E 4D# 4C 4 - 4A | |
2B 4 + 4C# 4C - 4A 4 4A | |
2B 4 + 4C# 4C - 4A 4 4A | |
2F# 4 + 4B# - 4A# 4F 4 4C# | |
4E 8E 16E 16F 8G 16G 16A 8A# + 8C - 8A - 16A 16A 8A 16A 16A 8A 16A 16A 8A 8A | |
:base | |
- 4A# 12A# 12A# 12A# 4A# 12A# 12A# 12A# 4G# 12G# 12G# 12G# 4G# 12G# 12G# 12G# | |
- 4F# 12F# 12F# 12F# 4F# 12F# 12F# 12F# 4F 4F 4F 8G 8A | |
- 4A# 12A# 12A# 12G# 4A# 4A# 4G# 12G# 12G# 12F# 4G# 4G# | |
- 4F# 12F# 12F# 12E# 4F# 4F# + 4C# 12C# 12C# 12C 4C# 4C# | |
- 4B 12B 12B 12A# 4B 12B 12B 12B 4A# 12A# 12A# 12G# 4A# 12A# 12A# 12A# | |
4C 12C 12C - 12B + 4C 12C 12C 12C - 4F 4F 4F 8G 8A | |
- 4A# 12A# 12A# 12G# 4A# 4A# 4G# 12G# 12G# 12F# 4G# 4G# | |
- 4F# 12F# 12F# 12E# 4F# 4F# 4F 12F 12F 12D# 4F 4F | |
- 12E 12A# + 12C# 12E 12A# + 12C# 4E 4 4F -- 12F 12F 12F 4F 4 | |
- 12E 12A# + 12C# 12E 12A# + 12C# 4E 4 4F -- 12F 12F 12F 4F 4 | |
- 4B 12B 12B 12A# 4B 12B 12B 12B 4A# 12A# 12A# 12G# 4A# 12A# 12A# 12A# | |
4C 12C 12C - 12B + 4C 12C 12C 12C - 4F 4F 4F 8G 8A | |
- 4A# 12A# 12A# 12G# 4A# 4A# 4G# 12G# 12G# 12F# 4G# 4G# | |
- 4F# 12F# 12F# 12E# 4F# 4F# + 4C# 12C# 12C# 12C 4C# 4C# | |
- 4B 12B 12B 12A# 4B 12B 12B 12B 4A# 12A# 12A# 12G# 4A# 12A# 12A# 12A# | |
4C 12C 12C - 12B + 4C 12C 12C 12C - 4F 4F 4F 8G 8A | |
- 4A# 12A# 12A# 12G# 4A# 4A# 4G# 12G# 12G# 12F# 4G# 4G# | |
- 4F# 12F# 12F# 12E# 4F# 4F# 4F 12F 12F 12D# 4F 4F | |
- 12E 12A# + 12C# 12E 12A# + 12C# 4E 4 4F -- 12F 12F 12F 4F 4 | |
- 12E 12A# + 12C# 12E 12A# + 12C# 4E 4 4F -- 12F 12F 12F 4F 4 | |
- 4B 12B 12B 12A# 4B 12B 12B 12B 4A# 12A# 12A# 12G# 4A# 12A# 12A# 12A# | |
4C 12C 12C - 12B + 4C 12C 12C 12C - 4F 4F 4F 8G 8A | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment