Skip to content

Conversation

@pmirek
Copy link

@pmirek pmirek commented Jan 2, 2020

Hi,

Please take a look and if you like the changes merge this with your code.

Thanks!

@pmirek pmirek closed this Jan 2, 2020
@pmirek pmirek reopened this Jan 2, 2020
@greenjava
Copy link
Owner

greenjava commented Jan 3, 2020

I'm not the official maintainer of the project (this project is a bit old now),
but thank you for your contribution 👍

Your proposal is quite interesting, I just have a small comment:
it would be nice to ask the user where to save the .mid file.

Something like that (with a JFileChooser):

diff --git a/src/openomr/gui/ToolBar.java b/src/openomr/gui/ToolBar.java
index 2f9b3fb..ca1e1cc 100644
--- a/src/openomr/gui/ToolBar.java
+++ b/src/openomr/gui/ToolBar.java
@@ -25,6 +25,7 @@ package openomr.gui;
 import java.awt.BorderLayout;
 import java.awt.Container;
 import java.awt.event.ActionEvent;
+import java.io.File;
 import java.util.LinkedList;
 
 import javax.sound.midi.InvalidMidiDataException;
@@ -34,9 +35,11 @@ import javax.swing.Box;
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
 import javax.swing.JDialog;
+import javax.swing.JFileChooser;
 import javax.swing.JPanel;
 import javax.swing.JToolBar;
 import javax.swing.KeyStroke;
+import javax.swing.filechooser.FileNameExtensionFilter;
 
 import openomr.midi.MidiFileGenerator;
 import openomr.midi.ScoreGenerator;
@@ -141,23 +144,35 @@ public class ToolBar extends JPanel
 
 		public void actionPerformed(ActionEvent arg0)
 		{
-			ScoreGenerator scoreGen = null;
-			try
-			{
-				StaveDetection staveDetection = gui.getStaveDetection();
-				LinkedList<Staves> staveList = staveDetection.getStaveList();
-				scoreGen = new ScoreGenerator(staveList);
-				scoreGen.makeSong(64);
-				scoreGen.save();
-			} 
-			catch (MidiUnavailableException e)
-			{
-				e.printStackTrace();
-			} 
-			catch (InvalidMidiDataException e)
-			{
-				e.printStackTrace();
-			}
+                        JFileChooser fileChooser = new JFileChooser();
+                        fileChooser.setAcceptAllFileFilterUsed(false);
+                        fileChooser.setFileFilter(new FileNameExtensionFilter("midi file","mid"));
+                        int option = fileChooser.showSaveDialog(ToolBar.this);
+                        if ( option == JFileChooser.APPROVE_OPTION) {
+                            File file = fileChooser.getSelectedFile();
+                            ScoreGenerator scoreGen = null;
+                            try
+                            {
+                                    StaveDetection staveDetection = gui.getStaveDetection();
+                                    LinkedList<Staves> staveList = staveDetection.getStaveList();
+                                    scoreGen = new ScoreGenerator(staveList);
+                                    scoreGen.makeSong(64);
+                                    String midiFile = file.getAbsoluteFile().toString();
+                                    if (!midiFile.endsWith(".mid"))
+                                    {
+                                        midiFile += ".mid";
+                                    }
+                                    scoreGen.save(midiFile);
+                            } 
+                            catch (MidiUnavailableException e)
+                            {
+                                    e.printStackTrace();
+                            } 
+                            catch (InvalidMidiDataException e)
+                            {
+                                    e.printStackTrace();
+                            }
+                        }
 		}
 	}
 	
diff --git a/src/openomr/midi/MidiFileGenerator.java b/src/openomr/midi/MidiFileGenerator.java
index 188a1f6..7de0f4e 100644
--- a/src/openomr/midi/MidiFileGenerator.java
+++ b/src/openomr/midi/MidiFileGenerator.java
@@ -60,14 +60,14 @@ public abstract class MidiFileGenerator
 		sequencer.start();
 	}
 
-	public void save()
+	public void save(String fileName)
 	{
 
 		try{
-			File midifile = new File("generated.mid");
+			File midifile = new File(fileName);
                         if (sequence != null){
 				MidiSystem.write(sequence,1,midifile);
-				System.out.println("File written: [generated.mid]");
+				System.out.printf("File written: [%s]", fileName);
 			}else{
 				System.out.println("null midi sequence found");
 			}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants