diff --git a/build.xml b/build.xml index 7067068..4f9c1d7 100644 --- a/build.xml +++ b/build.xml @@ -8,8 +8,28 @@ - Builds, tests, and runs the project OpenOMR. - + Builds, tests, and runs the project OpenOMR. + + + + + + + + + + + + + - + diff --git a/icons/save.png b/icons/save.png new file mode 100644 index 0000000..00030e8 Binary files /dev/null and b/icons/save.png differ diff --git a/src/openomr/gui/GUI.java b/src/openomr/gui/GUI.java index 56dae46..cdd5625 100644 --- a/src/openomr/gui/GUI.java +++ b/src/openomr/gui/GUI.java @@ -1196,6 +1196,7 @@ public void setImageRecognisedOptions(boolean val) symbolItem.setEnabled(val); staveProjItem.setEnabled(val); toolBar.setPlayEnbabled(true); + toolBar.setSaveEnbabled(true); } public void setBoundaryImage(BufferedImage dupImage) diff --git a/src/openomr/gui/ToolBar.java b/src/openomr/gui/ToolBar.java index e07fc42..2f9b3fb 100644 --- a/src/openomr/gui/ToolBar.java +++ b/src/openomr/gui/ToolBar.java @@ -52,6 +52,7 @@ public class ToolBar extends JPanel private RecognitionAction recognitionAction; private FFTAction fftAction; private PlayAction playAction; + private SaveAction saveAction; private JDialog recogDialog; private OpenAction openAction; @@ -70,11 +71,13 @@ public ToolBar(GUI gui) recognitionAction = new RecognitionAction("Right", new ImageIcon("icons/GreenFlag.png"), "Perform Recognition", 'R'); fftAction = new FFTAction("Center", new ImageIcon("icons/Fft.png"), "Do FFT", 'C'); playAction = new PlayAction("Right", new ImageIcon("icons/Play.png"), "Play Recognized Score", 'R'); + saveAction = new SaveAction("Right", new ImageIcon("icons/save.png"), "Save Recognized Score", 'S'); openAction = new OpenAction("Left", new ImageIcon("icons/Open.png"), "Open File", 'L'); toolbar.add(openAction); toolbar.add(fftAction); toolbar.add(recognitionAction); toolbar.add(playAction); + toolbar.add(saveAction); box.add(toolbar); box.add(Box.createHorizontalGlue()); @@ -126,6 +129,39 @@ public void actionPerformed(ActionEvent arg0) } } + private class SaveAction extends AbstractAction + { + public SaveAction(String text, Icon icon, String description, char accelerator) + { + super(text, icon); + setEnabled(false); + putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(accelerator, java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + putValue(SHORT_DESCRIPTION, description); + } + + public void actionPerformed(ActionEvent arg0) + { + ScoreGenerator scoreGen = null; + try + { + StaveDetection staveDetection = gui.getStaveDetection(); + LinkedList staveList = staveDetection.getStaveList(); + scoreGen = new ScoreGenerator(staveList); + scoreGen.makeSong(64); + scoreGen.save(); + } + catch (MidiUnavailableException e) + { + e.printStackTrace(); + } + catch (InvalidMidiDataException e) + { + e.printStackTrace(); + } + } + } + + private class PlayAction extends AbstractAction { public PlayAction(String text, Icon icon, String description, char accelerator) @@ -198,6 +234,11 @@ public void setPlayEnbabled(boolean val) playAction.setEnabled(val); } + public void setSaveEnbabled(boolean val) + { + saveAction.setEnabled(val); + } + public void setOpenEnabled(boolean val) { openAction.setEnabled(val); diff --git a/src/openomr/midi/MidiFileGenerator.java b/src/openomr/midi/MidiFileGenerator.java index e5b0cdc..188a1f6 100644 --- a/src/openomr/midi/MidiFileGenerator.java +++ b/src/openomr/midi/MidiFileGenerator.java @@ -23,6 +23,7 @@ package openomr.midi; +import java.io.File; import javax.sound.midi.*; /** @@ -32,6 +33,7 @@ public abstract class MidiFileGenerator { private final Sequencer sequencer; + private final Sequence sequence; private final Track track; private final int resolution; private int pos; @@ -45,9 +47,8 @@ public abstract class MidiFileGenerator public MidiFileGenerator(int key, int tempo, int resolution) throws MidiUnavailableException, InvalidMidiDataException { this.resolution = resolution; - Sequence sequence = new Sequence(Sequence.PPQ, resolution); + this.sequence = new Sequence(Sequence.PPQ, resolution); track = sequence.createTrack(); - //makeSong(key); sequencer = MidiSystem.getSequencer(); sequencer.open(); sequencer.setSequence(sequence); @@ -59,7 +60,23 @@ public void start() sequencer.start(); } - //protected abstract void makeSong(int key) throws InvalidMidiDataException; + public void save() + { + + try{ + File midifile = new File("generated.mid"); + if (sequence != null){ + MidiSystem.write(sequence,1,midifile); + System.out.println("File written: [generated.mid]"); + }else{ + System.out.println("null midi sequence found"); + } + } + + catch(Exception e){ + System.out.println("Exception caught " + e.toString()); + } + } protected void add(int note) throws InvalidMidiDataException { @@ -109,4 +126,4 @@ private void addStopEvent(int note) throws InvalidMidiDataException message.setMessage(ShortMessage.NOTE_OFF, 0, note, 0); track.add(new MidiEvent(message, pos)); } -} \ No newline at end of file +} diff --git a/src/openomr/midi/ScoreGenerator.java b/src/openomr/midi/ScoreGenerator.java index 59c535e..2612d5a 100644 --- a/src/openomr/midi/ScoreGenerator.java +++ b/src/openomr/midi/ScoreGenerator.java @@ -65,4 +65,5 @@ public void makeSong(int key) throws InvalidMidiDataException //System.out.println("End Stave"); } } -} \ No newline at end of file + +}