packagecom.jq.util;publicclassNote{String name;int level;publicNote(String name,int level){this.name = name;this.level = level;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicintgetLevel(){return level;}publicvoidsetLevel(int level){this.level = level;}@OverridepublicStringtoString(){return"Note{"+"name='"+ name +'\''+", level="+ level +'}';}publicStringtoYin(){String a =null;switch(name){case"C":
a ="1";break;case"#C":
a ="#1";break;case"D":
a ="2";break;case"#D":
a ="#2";break;case"E":
a ="3";break;case"F":
a ="4";break;case"#F":
a ="#4";break;case"G":
a ="5";break;case"#G":
a ="#5";break;case"A":
a ="6";break;case"#A":
a ="#6";break;case"B":
a ="7";break;}if(level >0){for(int i =1; i <= level; i++){
a +="+";}}elseif(level <0){for(int i =-1; i >= level; i--){
a +="-";}}return a;}}
packagecom.jq.util;publicclassTest{//6根弦0品所有音privatestaticNote[] rootNotes ={newNote("E",1),newNote("B",0),newNote("G",0),newNote("D",0),newNote("A",-1),newNote("E",-1)};//12平均律privatestaticString[] notes ={"C","#C","D","#D","E","F","#F","G","#G","A","#A","B"};publicstaticvoidmain(String[] args){get(1,15);}publicstaticintgetNumber(String name){int i =0;for(String y : notes){if(notes[i].equals(name)){break;}
i++;}return i;}/**
*
* @param chord 几弦
* @param pin 几品
*/publicstaticvoidget(int chord,int pin){Note root = rootNotes[chord -1];// 弦的0品音int num =getNumber(root.getName());//音名在12平均律中的位置int a = pin /12;//超过多少个八度
root.setLevel(root.getLevel()+ a);int b = pin %12;//增加多少半音阶,除掉八度if(num + b <=11){
root.setName(notes[b + num]);}else{
root.setName(notes[num + b -12]);
root.setLevel(root.getLevel()+1);}System.out.println(root.toYin());}}