App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/res/abc/abc2svg/strtab-1.js view on Meta::CPAN
c += 16
while (1) {
if (p[i + 1] == "'") {
c += 7
i++
} else if (p[i + 1] == ",") {
c -= 7
i++
} else {
break
}
}
t.push(c)
}
} else {
for (i = 0; i < p.length; i++) {
c = p[i]
switch (c) {
case '^':
case '_':
a = c == '^' ? 1 : -1
c = p[++i]
break
default:
a = 0
break
}
c = "CCDDEFFGGAABccddeffggaab".indexOf(c)
if (c < 0)
return // null
c += 60 + a
while (1) {
if (p[i + 1] == "'") {
c += 12
i++
} else if (p[i + 1] == ",") {
c -= 12
i++
} else {
break
}
}
t.push(c)
}
}
return t
} // abc2tab
// convert an array of <note name><octave> into a list of MIDI pitches
function str2tab(a) {
var str, p, o,
t = []
if (p_v.diafret) {
while (1) {
str = a.shift()
if (!str)
break
p = "CDEFGAB".indexOf(str[0])
o = Number(str[1])
if (p < 0 || isNaN(o))
return // null
t.push(o * 7 + p - 12) // C4 = 16 (12 = 4 * 7 - 16)
}
} else {
while (1) {
str = a.shift()
if (!str)
break
p = "CCDDEFFGGAAB".indexOf(str[0])
if (p < 0)
return // undefined
o = str[1]
switch (o) {
case '#':
case 'b':
p += o == '#' ? 1 : -1
o = Number(str[2])
break
default:
o = Number(str[1])
break
}
if (isNaN(o))
return // undefined
t.push((o + 1) * 12 + p) // C4 = 60
}
}
return t
} // str2tab()
// convert the list of <string number> ':' <fret number>
function minfret(a) {
var sf,
sfa = a.split(' ')
p_v.minfret = {}
while (1) {
sf = sfa.shift()
if (!sf)
break
sf = sf.split(':')
if (sf.length != 2)
break //fixme: error
p_v.minfret[sf[0]] = sf[1]
}
} //minfret()
for (i = 0; i < a.length; i++) {
switch (a[i]) {
case "clef=":
e = a[i + 1]
if (e != "tab")
break
a.splice(i, 1)
// fall thru
case "tab":
a.splice(i, 1)
i--
ok = true
break
case "strings=":
strs = a[++i]
ok = true
break
case "nostems":
p_v.pos.stm = abc2svg.C.SL_HIDDEN
p_v.pos.gst = abc2svg.C.SL_HIDDEN
break
case "capo=":
p_v.capo = Number(a[++i])
break
case "diafret=":
i++
case "diafret":
p_v.diafret = true
break
case "minfret=":
minfret(a[++i])
break
case "nodot":
p_v.nodot = 1 //true
break
}
( run in 0.563 second using v1.01-cache-2.11-cpan-140bd7fdf52 )