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
+
+}