我是一名大吉他手,我正在尝试学习我最喜欢的乐队Rise Against的每首歌。问题是,有些歌曲是标准调音的标签,有些是Eb。我不想经常来回走动,所以我想制作一个程序将所有标准歌曲转换成Eb调音。
这是通过简单地为每个音品添加一个来完成的。因此,如果我应该将标准的第一个音品放在和弦上,我会在第二个音符处做。
这是"全部放弃"
的标签e|---------------|
H|---------------|
G|---------------|
D|-7---3---6---4-|
A|-4---4---4---4-|
E|---------------|
Verse Part 1 (x2)
e|--------------------------------------|
H|--------------------------------------|
G|--------------7777----------7777-9999-|
D|-44--44--44---7777-44--44---7777-9999-|
A|-44--44--44---5555-44--44---5555-7777-|
E|-22--22--22--------22--22-------------|
Verse Part 2 (x2)
E|--------------------------------------|
H|--------------------------------------|
G|--------------7777----------7777-9999-|
D|-44--44--44---7777-44--44---7777-9999-|
A|-4422442244---5555-44--44---5555-7777-|
E|-2200220022--------22002200-----------|
Chorus (2x)
E|--------------------------------------------|
H|--------------------------------------------|
G|--------------------------------------------|
D|----------99999999-111111111111111-77777777-|
A|-77777777-77777777-111111111111111-55555555-|
E|-55555555----------9-9-9-9-9-9-9-9----------|
至少这是它的一部分。我的编程老师帮我在Processing:
中完成了这个 void setup() {
String lines[] = loadStrings("fretEx1.txt");
println("there are " + lines.length + " lines");
for (int i = 0 ; i < lines.length; i++) {
println(shiftLine(lines[i]));
}
System.out.println(Character.isDigit('9'));
}
//Takes a line of tablature (spelling?) and increases all fret number values by 1.
StringBuilder shiftLine(String tab) {
StringBuilder sb = new StringBuilder(tab);
for(int i=0; i<sb.length(); i++) {
char ch = sb.charAt(i);
if(Character.isDigit(ch) ) {
ch++;
sb.setCharAt(i,ch);
}
}
return sb;
}
它可以很好地工作,直到它将9转换为应该是10而不是它放一个冒号。你怎么建议修理这个?另外,我知道还有很多其他问题,但我现在正专注于这个问题。谢谢!
答案 0 :(得分:3)
你的问题源于10不是一个数字的事实。看看the ascii table。 ascii表后面的字符9是冒号字符。当您为&#39; 9&#39;增加ascii值时,最终会得到&#39;:&#39;。在打印其值之前,需要将ascii字符转换为整数,然后递增。您可能还需要考虑为包含两位数字的数字腾出空间,这样您的标签就不会出现问题。
请注意数字&#39; 0&#39;的ascii值。因此,一个简单的算法(在Java / Processing中)用于将ascii数字字符转换为其整数值:
if (Character.isDigit(someChar)) {
int value = (int) someChar - 48;
}