Javaで「MIDIファイルを入力し、音の強弱を基にしてBPMを推定する」というプログラムを書いているのですが、コマンドプロンプトでコンパイルを実行したところ、「シンボルを見つけられません」というエラーを返されました。
MIDIMain.java:メインファイル
Binary.java:BufferedInputStream
Text.java:書き込み
MIDIPlay.java:MIDIを解析する
Track.java:タイミングデータ読み込み
Note.java:パラメータを返す
Delta.java:音とその次の音の発音時刻の差を格納し、出現数カウント
また、クラスパスですがC:\Program Files\Java\jdk1.8.0_181\binに設定してあります。javac -version, java versionコマンドは共に通りました。
Visual Studio Codeで編集を行っていますが、走らせたら「指定されたパスが見つかりません。」とエラーを返されました。
MIDIMain.java:16: エラー: シンボルを見つけられません Binary bi=new Binary(a); //error point ^ シンボル: クラス Binary 場所: クラス MIDIMain MIDIMain.java:16: エラー: シンボルを見つけられません Binary bi=new Binary(a); //error point ^ シンボル: クラス Binary 場所: クラス MIDIMain MIDIMain.java:17: エラー: シンボルを見つけられません Text te=new Text(a); //error point ^ シンボル: クラス Text 場所: クラス MIDIMain MIDIMain.java:17: エラー: シンボルを見つけられません Text te=new Text(a); //error point ^ シンボル: クラス Text 場所: クラス MIDIMain MIDIMain.java:18: エラー: シンボルを見つけられません MIDIPlay mp=new MIDIPlay(bi,te); //error point ^ シンボル: クラス MIDIPlay 場所: クラス MIDIMain MIDIMain.java:18: エラー: シンボルを見つけられません MIDIPlay mp=new MIDIPlay(bi,te); //error point ^ シンボル: クラス MIDIPlay 場所: クラス MIDIMain MIDIMain.java:31: エラー: シンボルを見つけられません ArrayList<Track> Tr=new ArrayList<Track>(); //error point ^ シンボル: クラス Track 場所: クラス MIDIMain MIDIMain.java:31: エラー: シンボルを見つけられません ArrayList<Track> Tr=new ArrayList<Track>(); //error point ^ シンボル: クラス Track 場所: クラス MIDIMain MIDIMain.java:36: エラー: シンボルを見つけられません Tr.add(new Track(I)); //error point ^ シンボル: クラス Track 場所: クラス MIDIMain MIDIMain.java:54: エラー: シンボルを見つけられません ArrayList<Note> Nt=Tr.get(0).getNote(); //error point ^ シンボル: クラス Note 場所: クラス MIDIMain MIDIMain.java:63: エラー: シンボルを見つけられません ArrayList<Delta> delta=new ArrayList<Delta>(); //error point ^ シンボル: クラス Delta 場所: クラス MIDIMain MIDIMain.java:63: エラー: シンボルを見つけられません ArrayList<Delta> delta=new ArrayList<Delta>(); //error point ^ シンボル: クラス Delta 場所: クラス MIDIMain MIDIMain.java:76: エラー: シンボルを見つけられません delta.add(new Delta(Nt.get(j).getDelta())); //error point ^ シンボル: クラス Delta 場所: クラス MIDIMain MIDIMain.java:83: エラー: シンボルを見つけられません Delta maxdelta=delta.get(0); //error point ^ シンボル: クラス Delta 場所: クラス MIDIMain エラー14個
該当のソースコード
java
1package MIDI; 2import MIDI.*; 3import java.io.*; 4import java.util.ArrayList; 5import java.util.StringTokenizer; 6 7class MIDIMain{ 8 public static void main(String args[])throws IOException{ 9 10 //MIDI読み込み~タイミングデータ作成 11 String a="Midi19"; 12 double BPM=154; 13 Binary bi=new Binary(a); //error point 14 Text te=new Text(a); //error point 15 MIDIPlay mp=new MIDIPlay(bi,te); //error point 16 te.TextClose(); 17 bi=null; 18 te=null; 19 20 21 //タイミングデータ読み込み、Trackごとにデータを格納していく 22 File fp=new File("Output/"+a+".txt"); 23 FileReader fr=new FileReader(fp); 24 BufferedReader br=new BufferedReader(fr); 25 String line=""; 26 StringTokenizer token; 27 28 ArrayList<Track> Tr=new ArrayList<Track>(); //error point 29 int I=0; 30 while((line=br.readLine())!=null){ 31 //略 32 } 33 34 ArrayList<Note> Nt=Tr.get(0).getNote(); //error point 35 for(int i=0;i<Tr.size();i++){ 36 Nt=Tr.get(i).getNote(); 37 if(Nt.size()!=1){ 38 break; 39 } 40 } 41 42 //音とその次の音の発音時刻の差を格納し,出現数カウント 43 ArrayList<Delta> delta=new ArrayList<Delta>(); //error point 44 for(int i=0;i<Tr.size();i++){ 45 Nt=Tr.get(i).getNote(); 46 for(int j=0;j<Nt.size();j++){ 47 int flag=0; 48 for(int k=0;k<delta.size();k++){ 49 if(delta.get(k).getDelta()==Nt.get(j).getDelta()){ 50 flag=1; 51 delta.get(k).PlusCount(); 52 break; 53 } 54 } 55 if(flag==0){ 56 delta.add(new Delta(Nt.get(j).getDelta())); //error point 57 } 58 } 59 } 60 System.out.println(); 61 62 //デルタTの出現回数最多を求める 63 Delta maxdelta=delta.get(0); //error point 64 for(int i=1;i<delta.size();i++){ 65 if(maxdelta.getCount()<delta.get(i).getCount()){ 66 maxdelta=delta.get(i); 67 } 68 } 69 70 //テンポ値第一候補算出 71 double MaxBPM=(60.0/(((double)maxdelta.getDelta())*60.0/BPM/(double)mp.getDeso())); 72 System.out.println("第一候補"+MaxBPM); 73 74 //拍の開始位置をずらしながら,BPMごとに1拍目が一番強い回数をカウント 75 for(int i=0;i<Tr.size();i++){ 76 Tr.get(i).setVolume(maxdelta.getDelta()); 77 ArrayList<Integer> Volume=Tr.get(i).getVolume(); 78 if(Volume!=null){ 79 //略 80 81 double[] max=new double[4]; 82 int[] maxl=new int[4]; 83 for(int l=0;l<4;l++){ 84 //略 85 } 86 } 87 88 for(int k=1;k<4;k++){ 89 for(int l=maxl[0];l<Math.pow(2, k+2);l+=4){ 90 //略 91 } 92 } 93 } 94 System.out.println(); 95 int kekka=0; 96 double Min=0; 97 for(int k=0;k<4;k++){ 98 //略 99 } 100 } 101 } 102 103 System.out.println("結果"+kekka); 104 break; 105 } 106 } 107 } 108 109} 110 111***** 112//Binary.java 113package MIDI; 114 115import java.io.*; 116 117class Binary{ 118 //protected BufferedInputStream bis; 119 BufferedInputStream bis; 120 Binary(String a)throws IOException{ 121 File fp=new File("Input/"+a+".mid"); 122 FileInputStream fis=new FileInputStream(fp); 123 bis=new BufferedInputStream(fis); 124 } 125 126} 127 128***** 129//Text.java 130package MIDI; 131import java.io.*; 132 133class Text{ 134 protected PrintWriter pw; 135 Text(String args){ 136 File Dire=new File("Output"); 137 if(Dire.exists()==false){ 138 Dire.mkdir(); 139 } 140 File fp=new File("Output/"+args+".txt"); 141 try{ 142 fp.createNewFile(); 143 }catch(IOException e){ 144 145 } 146 try{ 147 pw=new PrintWriter(new BufferedWriter(new FileWriter(fp))); 148 }catch(IOException e){ 149 } 150 } 151 152 void TextClose(){ 153 pw.close(); 154 } 155 156} 157 158 159***** 160//Track.java 161package MIDI; 162 163import java.util.ArrayList; 164 165public class Track { 166 private int Num; 167 private ArrayList<Note> Nt=new ArrayList<Note>(); 168 private ArrayList<Integer> Volume=new ArrayList<Integer>(); 169 170 Track(int Num){ 171 this.Num=Num; 172 Nt.add(new Note(0,0,0)); 173 } 174 void addNote(int Time,int Volume){ 175 int Delta=Nt.get(Nt.size()-1).getTime(); 176 Nt.add(new Note(Time,Volume,Time-Delta)); 177 } 178 179 ArrayList<Note> getNote(){ 180 return Nt; 181 } 182 183 void setVolume(int Delta){ 184 if(Nt.size()==1){ 185 return; 186 } 187 int J=1; 188 for(int i=0;true;i++){ 189 int Time=Delta*i; 190 if(Time>=Nt.get(Nt.size()-1).getTime()){ 191 break; 192 } 193 for(int j=J;j<Nt.size();j++){ 194 195 if(Time+Nt.get(1).getTime()==Nt.get(j).getTime()){ 196 Volume.add(Nt.get(j).getVolume()); 197 J=j+1; 198 break; 199 } 200 if(Time+Nt.get(1).getTime()<Nt.get(j).getTime()){ 201 J=j; 202 Volume.add(0); 203 break; 204 } 205 } 206 } 207 } 208 209 ArrayList<Integer> getVolume(){ 210 if(Volume.size()==0){ 211 return null; 212 } 213 else{ 214 return Volume; 215 } 216 } 217} 218 219***** 220//Note.java 221package MIDI; 222 223public class Note{ 224 private int Time; 225 private int Volume; 226 private int Delta; 227 Note(int Time,int Volume,int Delta){ 228 this.Time=Time; 229 this.Volume=Volume; 230 this.Delta=Delta; 231 } 232 233 int getTime(){ 234 return Time; 235 } 236 int getVolume(){ 237 return Volume; 238 } 239 int getDelta(){ 240 return Delta; 241 } 242} 243 244***** 245//Delta.java 246package MIDI; 247 248public class Delta{ 249 private int Delta; 250 private int Count; 251 Delta(int Delta){ 252 this.Delta=Delta; 253 Count=1; 254 } 255 256 int getDelta(){ //Deltaの値を返す 257 return Delta; 258 } 259 260 int getCount(){ //Countの値を返す 261 return Count; 262 } 263 void PlusCount(){ //Countの値を1増やす(インクリメント) 264 Count++; 265 } 266 267 268} 269
また、eclipseでの実行も試してみましたが以下のようなエラーを返されました。
「指定されたパスが見つかりません。」
ちなみに、MIDIファイルとjavaファイルはそれぞれ
MIDIファイル:\プログラム\Input
javaファイル:\プログラム\src\MIDI
に入っています。
試したこと
eclipseで実行したところ、全てのjavaファイルに対してclassファイルが作成されました。また、全てのクラスをpublicにして実行してみたところ上述のエラーを返されました。
補足情報(FW/ツールのバージョンなど)
OS:Windows 10 64bit
使用ソフト:Visual Studio Code
コンパイル:コマンドプロンプト
回答1件
あなたの回答
tips
プレビュー