Skip to content

Instantly share code, notes, and snippets.

@vi
Last active December 16, 2015 18:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vi/5478693 to your computer and use it in GitHub Desktop.
Save vi/5478693 to your computer and use it in GitHub Desktop.
71 3
69 3
68 3
69 3
72 12
74 3
72 3
71 3
72 3
76 12
77 3
76 3
75 3
76 3
83 3
81 3
80 3
81 3
83 3
81 3
80 3
81 3
84 12
81 6
84 6
79 1
81 1
83 4
81 6
79 6
81 6
79 1
81 1
83 4
81 6
79 6
81 6
79 1
81 1
83 4
81 6
79 6
78 6
76 12
71 3
69 3
68 3
69 3
72 12
74 3
72 3
71 3
72 3
76 12
77 3
76 3
75 3
76 3
83 3
81 3
80 3
81 3
83 3
81 3
80 3
81 3
84 12
81 6
84 6
79 1
81 1
83 4
81 6
79 6
81 6
79 1
81 1
83 4
81 6
79 6
81 6
79 1
81 1
83 4
81 6
79 6
78 6
76 12
76 6
77 6
79 6
79 6
81 3
79 3
77 3
76 3
74 6
67 6
76 6
77 6
79 6
79 6
81 3
79 3
77 3
76 3
74 12
72 6
74 6
76 6
76 6
77 3
76 3
74 3
72 3
71 6
64 6
72 6
74 6
76 6
76 6
77 3
76 3
74 3
72 3
71 12
71 3
69 3
68 3
69 3
72 12
74 3
72 3
71 3
72 3
76 12
77 3
76 3
75 3
76 3
83 3
81 3
80 3
81 3
83 3
81 3
80 3
81 3
84 12
81 6
83 6
84 6
83 6
81 6
80 6
81 6
76 6
77 6
74 6
72 13
71 9
69 2
71 2
69 12
76 6
77 6
79 6
79 6
81 3
79 3
77 3
76 3
74 6
67 6
76 6
77 6
79 6
79 6
81 3
79 3
77 3
76 3
74 12
72 6
74 6
76 6
76 6
77 3
76 3
74 3
72 3
71 6
64 6
72 6
74 6
76 6
76 6
77 3
76 3
74 3
72 3
71 12
71 3
69 3
68 3
69 3
72 12
74 3
72 3
71 3
72 3
76 12
77 3
76 3
75 3
76 3
83 3
81 3
80 3
81 3
83 3
81 3
80 3
81 3
84 12
81 6
83 6
84 6
83 6
81 6
80 6
81 6
76 6
77 6
74 6
72 13
71 9
69 2
71 2
69 12
81 6
83 6
85 12
81 6
83 6
85 6
83 6
81 6
80 6
78 6
80 6
81 6
83 6
80 6
76 6
81 6
83 6
85 12
81 6
83 6
85 6
83 6
81 6
80 6
78 6
83 6
80 6
76 6
81 12
81 6
83 6
85 12
81 6
83 6
85 6
83 6
81 6
80 6
78 6
80 6
81 6
83 6
80 6
76 6
81 6
83 6
85 12
81 6
83 6
85 6
83 6
81 6
80 6
78 6
83 6
80 6
76 6
81 12
85 3
86 3
85 3
83 3
81 3
83 3
81 3
80 3
78 3
81 3
80 3
78 3
77 3
78 3
80 3
77 3
73 3
75 3
77 3
73 3
78 3
77 3
78 3
80 3
81 3
80 3
81 3
83 3
85 3
84 3
85 3
84 3
85 3
86 3
85 3
83 3
81 3
83 3
81 3
80 3
78 3
81 3
80 3
78 3
76 3
78 3
80 3
76 3
73 3
75 3
76 3
73 3
75 3
76 3
78 3
75 3
72 3
73 3
75 3
72 3
73 12
85 3
86 3
85 3
83 3
81 3
83 3
81 3
80 3
78 3
81 3
80 3
78 3
77 3
78 3
80 3
77 3
73 3
75 3
77 3
73 3
78 3
77 3
78 3
80 3
81 3
80 3
81 3
83 3
85 3
84 3
85 3
84 3
85 3
86 3
85 3
83 3
81 3
83 3
81 3
80 3
78 3
81 3
80 3
78 3
76 3
78 3
80 3
76 3
73 3
75 3
76 3
73 3
75 3
76 3
78 3
75 3
72 3
73 3
75 3
72 3
73 12
76 3
74 3
73 2
71 4
69 3
71 3
73 3
74 3
76 3
78 3
80 3
81 3
81 3
80 3
78 3
76 3
76 3
74 3
73 3
71 3
69 3
71 3
73 3
74 3
76 3
78 3
80 3
81 3
82 6
83 6
76 3
74 3
73 3
71 3
69 3
71 3
73 3
74 3
76 3
78 3
80 3
81 3
81 3
80 3
78 3
76 3
76 3
74 3
73 3
71 3
73 3
76 3
69 3
73 3
71 3
74 3
68 3
71 3
69 12
85 3
86 3
85 3
83 3
81 3
83 3
81 3
80 3
78 3
81 3
80 3
78 3
77 3
78 3
80 3
77 3
73 3
75 3
77 3
73 3
78 3
77 3
78 3
80 3
81 3
80 3
81 3
83 3
85 3
84 3
85 3
84 3
85 3
84 3
85 3
82 3
86 3
85 3
86 3
85 3
86 3
85 3
86 3
85 3
86 3
85 3
83 3
81 3
80 3
81 3
83 3
80 3
81 3
83 3
85 3
78 3
77 3
78 3
80 3
77 3
78 12
76 3
74 3
73 3
71 3
69 3
71 3
73 3
74 3
76 3
78 3
80 3
81 3
81 3
80 3
78 3
76 3
76 3
74 3
73 3
71 3
69 3
71 3
73 3
74 3
76 3
78 3
80 3
81 3
82 6
83 6
76 3
74 3
73 3
71 3
69 3
71 3
73 3
74 3
76 3
78 3
80 3
81 3
81 3
80 3
78 3
76 3
76 3
74 3
73 3
71 3
73 3
76 3
69 3
73 3
71 3
74 3
68 3
71 3
69 12
85 3
86 3
85 3
83 3
81 3
83 3
81 3
80 3
78 3
81 3
80 3
78 3
77 3
78 3
80 3
77 3
73 3
75 3
77 3
73 3
78 3
77 3
78 3
80 3
81 3
80 3
81 3
83 3
85 3
84 3
85 3
84 3
85 3
84 3
85 3
82 3
86 3
85 3
86 3
85 3
86 3
85 3
86 3
85 3
86 3
85 3
83 3
81 3
80 3
81 3
83 3
80 3
81 3
83 3
85 3
78 3
77 3
78 3
80 3
77 3
78 12
81 6
83 6
85 12
81 6
83 6
85 6
83 6
81 6
80 6
78 6
80 6
81 6
83 6
80 6
76 6
81 6
83 6
85 12
81 6
83 6
85 6
83 6
81 6
80 6
78 6
83 6
80 6
76 6
81 12
81 6
83 6
85 12
81 6
83 6
85 6
83 6
81 6
80 6
78 6
80 6
81 6
83 6
80 6
76 6
81 6
83 6
85 12
81 6
83 6
85 6
83 6
81 6
80 6
78 6
83 6
80 6
76 6
81 12
71 3
69 3
68 3
69 3
72 12
74 3
72 3
71 3
72 3
76 12
77 3
76 3
75 3
76 3
83 3
81 3
80 3
81 3
83 3
81 3
80 3
81 3
84 12
81 6
84 6
79 1
81 1
83 4
81 6
79 6
81 6
79 1
81 1
83 4
81 6
79 6
81 6
79 1
81 1
83 4
81 6
79 6
78 6
76 12
71 3
69 3
68 3
69 3
72 12
74 3
72 3
71 3
72 3
76 12
77 3
76 3
75 3
76 3
83 3
81 3
80 3
81 3
83 3
81 3
80 3
81 3
84 12
81 6
84 6
79 1
81 1
83 4
81 6
79 6
81 6
79 1
81 1
83 4
81 6
79 6
81 6
79 1
81 1
83 4
81 6
79 6
78 6
76 12
76 6
77 6
79 6
79 6
81 3
79 3
77 3
76 3
74 6
67 6
76 6
77 6
79 6
79 6
81 3
79 3
77 3
76 3
74 12
72 6
74 6
76 6
76 6
77 3
76 3
74 3
72 3
71 6
64 6
72 6
74 6
76 6
76 6
77 3
76 3
74 3
72 3
71 12
71 3
69 3
68 3
69 3
72 12
74 3
72 3
71 3
72 3
76 12
77 3
76 3
75 3
76 3
83 3
81 3
80 3
81 3
83 3
81 3
80 3
81 3
84 12
81 6
83 6
84 6
83 6
81 6
80 6
81 6
76 6
77 6
74 6
72 12
71 9
69 2
71 2
69 12
76 6
77 6
79 6
79 6
81 3
79 3
77 3
76 3
74 6
67 6
76 6
77 6
79 6
79 6
81 3
79 3
77 3
76 3
74 12
72 6
74 6
76 6
76 6
77 3
76 3
74 3
72 3
71 6
64 6
72 6
74 6
76 6
76 6
77 3
76 3
74 3
72 3
71 12
71 3
69 3
68 3
69 3
72 12
74 3
72 3
71 3
72 3
76 12
77 3
76 3
75 3
76 3
83 3
81 3
80 3
81 3
83 3
81 3
80 3
81 3
84 12
81 6
83 6
84 6
83 6
81 6
80 6
81 6
76 6
77 6
74 6
72 13
71 9
69 2
71 2
69 12
69 3
81 3
71 3
83 3
73 3
85 9
69 3
81 3
71 3
83 3
73 3
85 3
71 3
83 3
69 3
81 3
68 3
80 3
66 3
78 3
68 3
80 3
69 3
81 3
71 3
83 3
68 3
80 3
64 3
76 3
69 3
81 3
71 3
83 3
73 3
85 9
69 3
81 3
71 3
83 3
73 3
85 3
71 3
83 3
69 3
81 3
68 3
80 3
66 3
78 2
71 4
83 3
68 3
80 3
64 3
76 3
81 12
69 3
81 3
71 3
83 3
73 3
85 9
69 3
81 3
71 3
83 3
73 3
85 3
71 3
83 3
69 3
81 3
68 3
80 3
66 3
78 3
68 3
80 3
69 3
81 3
71 3
83 3
68 3
80 3
64 3
76 3
69 3
81 3
71 3
83 3
73 3
85 9
69 3
81 3
71 3
83 3
73 3
85 3
71 3
83 3
69 3
81 3
68 3
80 3
66 3
78 2
71 4
83 3
68 3
80 3
64 3
76 3
81 12
85 9
85 4
85 24
85 23
86 3
85 3
83 3
85 3
86 3
85 3
83 3
85 3
86 24
86 1
85 5
86 1
85 5
86 1
85 5
86 1
85 5
83 18
88 7
85 24
85 23
86 3
85 3
83 3
85 3
86 3
85 3
83 3
85 3
86 24
86 1
85 23
85 1
83 5
85 1
83 5
85 1
83 5
85 1
83 5
81 12
76 1
81 1
85 7
85 3
86 1
81 1
85 22
76 1
81 1
85 22
86 3
85 3
83 3
85 3
86 3
85 3
83 3
85 3
86 24
86 1
85 5
86 1
85 5
86 1
85 5
86 1
85 5
83 18
88 7
85 24
85 23
86 3
85 3
83 3
85 3
86 3
85 3
83 3
85 3
86 24
86 1
85 23
85 1
83 5
85 1
83 5
85 1
83 5
85 1
83 5
81 18
85 6
81 18
88 6
81 18
85 6
81 6
85 6
81 6
88 6
81 12
81 12
81 12
#!/usr/bin/perl -wn
# Implemented by Vitaly "_Vi" Shukela
# Usage: printf '70 1000\n71 1000\n72 1000\n' | ./play.pl | aplay -f cd
our $vq = 0.2;
sub tone($$) {
my $freq = shift;
my $len = shift;
$len = int($len * 44100);
my $vol = 500 + 10000000/$freq;
$vol = 20000 if $vol > 20000;
$vol*=$vq;
for my $i (0..$len) {
my $b = int(sin($i*2*3.14159264358*$freq/44100)*$vol*(1-0.5*$i/$len));
$b+=65535 if($b<0);
print pack("vv", $b, $b);
}
}
sub note($$) {
my $num = shift;
my $len = shift;
$len *= 0.04;
$num-=60;
#print STDERR "n=$num l=$len\n";
tone(440*(2**($num/12)), $len);
}
/(\d+) (\d+)/;
note($1, $2);
=cut
java -cp /usr/share/java/clojure.jar:/usr/share/java/android-midi-libv3.jar clojure.main -e '(let [events (-> "/home/vi/_/ringtones/example.mid" java.io.File. com.leff.midi.MidiFile. .getTracks (nth 1) .getEvents) notes (filter #(or (isa? (type %) com.leff.midi.event.NoteOn) (isa? (type %) com.leff.midi.event.NoteOff)) events) output (map (fn[n] (format "on=%s tick=%s delta=%s channel=%s note=%s velocity=%s\n" (isa? (type n) com.leff.midi.event.NoteOn) (.getTick n) (.getDelta n) (.getChannel n) (.getNoteValue n) (.getVelocity n))) notes) ] (doall (map print output)) nil)' | perl -ne 'our $prevtick; our $prevnote; /on=(\w+) tick=(\d+) delta=\d+ channel=\d+ note=(\d+) velocity=\d+/; my $o = $1 eq "true"; my $t = $2; my $n = $3; if ($o) { if ($prevtick) { my $l = $t - $prevtick; print "$prevnote $l\n" if $l > 0; } $prevtick = $t; $prevnote = $n; }' | /home/vi/code/_/play.pl | aplay -f cd
=cut
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment