Skip to content

Commit ccc9ee2

Browse files
committed
Remove FilesPreprocessor and FilesPreprocessor to introduce SequenceExtractor
1 parent 27996ef commit ccc9ee2

File tree

4 files changed

+71
-235
lines changed

4 files changed

+71
-235
lines changed

modules/core/src/main/java/jsymbolic2/processing/FeatureExtractionJobProcessor.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import jsymbolic2.configuration.ConfigurationFileData;
55
import jsymbolic2.featureutils.FeatureExtractorAccess;
66
import org.apache.commons.lang3.tuple.ImmutablePair;
7+
import org.apache.commons.lang3.tuple.Pair;
78
import org.ddmal.jmei2midi.MeiSequence;
89
import org.ddmal.jmei2midi.meielements.meispecific.MeiSpecificStorage;
910

@@ -19,8 +20,7 @@
1920
*
2021
* @author Cory McKay and Tristano Tenaglia
2122
*/
22-
public enum FeatureExtractionJobProcessor {
23-
;
23+
public class FeatureExtractionJobProcessor {
2424
/* PUBLIC STATIC METHODS ********************************************************************************/
2525

2626
/**
@@ -66,11 +66,11 @@ public static List<String> extractAndSaveSpecificFeatures(List<File> paths_of_fi
6666
FeatureExtractorAccess.getAllImplementedFeatureExtractors(),
6767
features_to_extract,
6868
saveInfo.save_overall_recording_features());
69-
FilesPreprocessor filesPreprocessor = new FilesPreprocessor(paths_of_files_or_folders_to_parse,
70-
printStreams.error_print_stream(), error_log);
71-
FilesReader filesReader = new FilesReader(List.of(new SequencePreprocessor()));
72-
List<ImmutablePair<String, Sequence>> midiPairs = filesReader.extractMidi(filesPreprocessor.getMidiFilesList());
73-
List<ImmutablePair<String, MeiSequence>> meiPairs = filesReader.extractMei(filesPreprocessor.getMeiFilesList());
69+
70+
SequenceExtractor sequenceExtractor = new SequenceExtractor(paths_of_files_or_folders_to_parse);
71+
72+
List<Pair<String, Sequence>> midiPairs = sequenceExtractor.getMIDISequences();
73+
List<Pair<String, MeiSequence>> meiPairs = sequenceExtractor.getMEISequences();
7474
// Extract features and save the feature values in DataBoard
7575
DataBoard dataBoard = FeatureExtractionJobProcessor.extractFeatures(midiPairs, meiPairs,
7676
processor,
@@ -206,8 +206,8 @@ public static List<String> extractAndSaveFeaturesConfigFileSettings(List<File> p
206206
* displayed and a direct printing of the associated error message to
207207
* standard error.
208208
*/
209-
private static DataBoard extractFeatures(List<ImmutablePair<String, Sequence>> midiSequences,
210-
List<ImmutablePair<String, MeiSequence>> meiSequences,
209+
private static DataBoard extractFeatures(List<Pair<String, Sequence>> midiSequences,
210+
List<Pair<String, MeiSequence>> meiSequences,
211211
MIDIFeatureProcessor processor,
212212
String feature_values_save_path,
213213
PrintStreams printStreams, List<String> error_log,

modules/core/src/main/java/jsymbolic2/processing/FilesPreprocessor.java

Lines changed: 0 additions & 104 deletions
This file was deleted.

modules/core/src/main/java/jsymbolic2/processing/FilesReader.java

Lines changed: 0 additions & 122 deletions
This file was deleted.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package jsymbolic2.processing;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.util.List;
6+
import javax.sound.midi.InvalidMidiDataException;
7+
import javax.sound.midi.MidiSystem;
8+
import javax.sound.midi.Sequence;
9+
import org.apache.commons.lang3.tuple.Pair;
10+
import org.ddmal.jmei2midi.MeiSequence;
11+
12+
public class SequenceExtractor {
13+
14+
private final List<File> filesList;
15+
SequencePreprocessor sequencePreprocessor = new SequencePreprocessor();
16+
17+
SequenceExtractor(List<File> filesList) {
18+
this.filesList = filesList;
19+
}
20+
21+
List<Pair<String, Sequence>> getMIDISequences() {
22+
return filesList.stream()
23+
.filter(file -> file.getName().endsWith(".mid") || file.getName().endsWith(".midi"))
24+
.map(file -> {
25+
try {
26+
return Pair.of(file.getName(),
27+
sequencePreprocessor.apply(MidiSystem.getSequence(file)));
28+
} catch (InvalidMidiDataException | IOException e) {
29+
throw new RuntimeException("Could not parse " + file.getAbsolutePath() + " " + e);
30+
}
31+
})
32+
.toList();
33+
}
34+
35+
List<Pair<String, MeiSequence>> getMEISequences() {
36+
return filesList.stream()
37+
.filter(file -> file.getName().endsWith(".mei"))
38+
.map(file -> {
39+
try {
40+
return Pair.of(file.getName(), new MeiSequence(file));
41+
} catch (InvalidMidiDataException e) {
42+
throw new RuntimeException("Could not parse " + file.getAbsolutePath() + " " + e);
43+
}
44+
})
45+
.toList();
46+
}
47+
48+
public static Sequence getMidiSequenceFromMidiFile(File file, List<String> error_log)
49+
throws IOException, InvalidMidiDataException {
50+
Sequence sequence = null;
51+
try {
52+
sequence = MidiSystem.getSequence(file);
53+
} catch (IOException e) {
54+
error_log.add("The specified path, " + file + ", does not refer to a valid file.");
55+
throw e;
56+
} catch (InvalidMidiDataException e) {
57+
error_log.add("The specified file, " + file + ", is not a valid MIDI or MEI file.");
58+
throw e;
59+
}
60+
return sequence;
61+
}
62+
}

0 commit comments

Comments
 (0)