App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/res/abc/abc2svg/perc-1.js view on Meta::CPAN
// percussion reduced names (alphabetic order)
var prn = {
"a-b-d": 35,
"a-s": 38,
"b-d-1": 36,
"ca": 69,
"cl": 75,
"co": 56,
"c-c": 52,
"c-c-1": 49,
"c-c-2": 57,
"c-h-h": 42,
"e-s": 40,
"h-a": 67,
"h-b": 60,
"h-c": 39,
"h-f-t": 43,
"h-m-t": 48,
"h-ti": 65,
"h-to": 50,
"h-w-b": 76,
"l-a": 68,
"l-b": 61,
"l-c": 64,
"l-f-t": 41,
"l-g": 74,
"l-m-t": 47,
"l-ti": 66,
"l-to": 45,
"l-w": 72,
"l-w-b": 77,
"m": 70,
"m-c": 78,
"m-h-c": 62,
"m-t": 80,
"o-c": 79,
"o-h-c": 63,
"o-h-h": 46,
"o-t": 81,
"p-h-h": 44,
"r-b": 53,
"r-c-1": 51,
"r-c-2": 59,
"s-c": 55,
"s-g": 73,
"s-s": 37,
"s-w": 71,
"t": 54,
"v": 58
}
// convert a drum instrument to a ABC note
function toabc(p) {
var i, j, s, pit
if (/^[_^]*[A-Ga-g][,']*$/.test(p)) // '
return p // ABC note
// if not a MIDI pitch, try a drum instrument name
pit = Number(p)
if (isNaN(pit)) {
p = p.toLowerCase(p);
s = p[0]; // get the 1st letters after '-'
i = 0
while (1) {
j = p.indexOf('-', i)
if (j < 0)
break
i = j + 1;
s += '-' + p[i]
}
pit = prn[s]
// solve some specific cases
if (!pit) {
switch (p[0]) {
case 'c':
switch (p[1]) {
case 'a': pit = prn.ca; break
case 'l': pit = prn.cl; break
case 'o': pit = prn.co; break
}
break
case 'h':
case 'l':
i = p.indexOf('-')
if (p[i + 1] != 't')
break
switch (p[i + 2]) {
case 'i':
case 'o':
pit = prn[s + p[i + 2]]
break
}
break
}
if (!pit)
return
}
}
p = ["C","^C","D","_E","E","F","^F","G","^G","A","_B","B"][pit % 12]
while (pit < 60) {
p += ','
pit += 12
}
while (pit >= 72) {
p += "'"
pit -= 12
}
return p
} // toabc()
// do_perc()
var a = parm.split(/\s+/),
p = a[1].replace(/[=_^]/, '')
this.do_pscom("map MIDIdrum " + a[1] +
" play=" + toabc(a[2]) +
" print=" + p +
(a[3] ? (" heads=" + a[3]) : ''))
( run in 1.031 second using v1.01-cache-2.11-cpan-140bd7fdf52 )