[revamp_help_windows
ronw@ee.columbia.edu**20060718031229
- cleaned up HelpWindow patch - no more hardcoded help text. help
buttons now load doc/manual.html
- added "clear non-meta features" option to FeatExtractorPanel
- added "normalize features" option to sort composer options in
ComposerPanel
] {
addfile ./doc/manual.html
hunk ./doc/manual.html 1
+
+
MEAPsoft Manual
+
+This page provides a more detailed discussion of the components
+and function of MEAPsoft. For a quick illustration of how to get
+going, see the
+MEAPsoft Quick Start Walkthrough.
+
+
+
+Segmenter
+
+
+The segmenter analyzes the input sound file and outputs a list of
+segments representing events or beats present in the sound.
+
+
+Controls:
+
+
+-
+input sound file: select the sound you would like to
+analyze. The filename of this sound will be used as the base name for
+all subsequent file i/o operations. You can change this basename (if,
+for instance, you want to save multiple versions of the segments file
+for one input sound) in the prefs/about panel.
+
+
+-
+detect events/detect beats: the segmenter has two different
+modes, "events" and "beats". "Events" mode simply detects sudden,
+substantial changes in the sound. The threshold for what qualifies as
+a substantial change is set via the segment sensitivity slider.
+"Beats" mode is more complex; the segmenter attempts to identify the
+tempo of the input sound and then outputs events that are aligned with
+that tempo. This will only work well for input sounds with fairly
+simple tempo/beat structures.
+
+
+
+- Event detector options
+
+-
+segment sensitivity: a low sensitivity will result in fewer
+segments than a high sensitivity. Think of this as a sensitivity to
+change; if your sensitivity is high then everything will seem like an
+event.
+
+
+-
+segment density: determines how closely spaced events can be; higher
+density will allow very closely spaced events, while lower density
+will ignore events that occur too close together.
+
+
+
+ - Beat detector options
+
+-
+cut tempo in half: if the detected beat is too fast, this
+option will slow it down.
+
+
+
+
+-
+1st event = track start: This tells the segmenter to always
+count the beginning of the track as the first event, even if there is
+very little energy there. If a sound starts with a fade in, for
+instance, and you don't have this checked, then the event detector
+will probably not detect that fade in as an event and the output
+segments file will not include that part of the sound.
+
+
+-
+output segment file: this is the temporary file name that will
+be used to save the segments file that is generated by the
+segmenter. If you want to save this file for further use, check the
+appropriate box in the prefs/about panel.
+
+
+
+
+
+Feature Extractors
+
+
+Feature extractors analyze the segments in a .seg file and
+output a features file containing one or more values representing the
+features found. Some feature extractors, like ChunkPower,
+simply put out one number representing the total power in each
+segment. Others, like AvgChroma, put out an array of values
+for each segment. For a short description of each feature extractor,
+hover above the feature extractor's name and a tooltip will pop up.
+
+
+
+You can select as many feature extractors as you like, although best
+results are usually obtained by selecting features extractors that
+work well with the composers you'll feed the .feat file to.
+The number box beside each feature extractor is for entering
+weights that allow you to specify the relative importance of each
+feature in the analysis.
+
+
+
+"Meta feature extractors" are a special class of FEs that do higher
+level analysis on the outputs of previously run "normal" feature
+extractors. In order to use a meta feature extractor, you need to
+select at least one normal feature extractor in addition to the meta
+feature extractor. If "clear non-meta features" is selected, the
+output features file will only contain the selected meta features.
+
+
+
+The "Display extracted features" button is enabled after processing a
+segments file. It pops up a window with a simple viewer that allows
+you to inspect the values of the extracted features. This is useful if
+you need to set value ranges in a Composer.
+
+
+
+
+Composers
+
+
+A composer takes a feature file as an input, analyzes/sorts/modifys
+the segments in that file, and then creates an Edit Decision List
+(EDL) representing the order in which the segments from the original
+source sound file (as well as others) should be arranged by the
+Synthesizer. Composers can be very simple or very complex. For
+example, "simple sort" simply sorts a features file by the first
+feature in each chunk. You could use this with AvgPitchSimple
+to generate a glissando where all of the pitches in the input sound
+are arranged from low to high. More complex Composers, like "MashUp"
+and "head bang" perform more sophisticated operations.
+
+
+
+Each composer is described by a short text that appears when you
+select it. The controls for that composer (if any) will appear below
+the text.
+
+
+
+Controls: Each composer's controls (if any) are different,
+and should be described in that composer's explanatory text. The
+following Universal Chunk Operations apply to all composers.
+
+
+
+
+ - reverse: reverse audio in each chunk.
+
+ - apply fade in/out: to avoid pops between segments you may
+want to apply a quick fade in/out at the boundaries of each
+chunk.
+
+ - cross fade: slightly shift each segment so that their
+fade in/outs overlap. This generally results in smoother, less clicky
+sound.
+
+ - fade length (ms): the duration of the fade in/out, in
+ milliseconds.
+
+ - apply gain value: adds a gain value to each
+segment in the output EDL. The synthesizer will use the gain value to
+scale the amplitude of the samples it writes to the output
+soundfile.
- gain value: the gain value to add
+to each segment.
+
+
+
+The "Display composed features" button is like the "Display extracted
+features" button above, but it works on the newly composed EDL
+file. This is convenient for inspecting the results of the
+composer. For instance, if you run the "simple sort" composer and
+display the EDL file you will see that the jumpy colors in the .feat
+file have been turned into a smooth fade in the sorted EDL.
+
+
+
+
+Synthesizer
+
+
+The Synthesizer uses the EDL from a composer to construct a new audio
+file. The output sound file name is automatically set to the input
+sound file name + MEAPED.wav. You can change this if you
+like. Once the new audio file has been created the "Listen" button
+will be active. Clicking on the button will launch your preferred
+.wav playback application.
+
+
+
+
+Prefs/About
+
+
+System wide preferences are set here.
+
+
+
+
+-
+file i/o base name: this is the prefix used when creating temp
+files during processing steps. You can usually leave this as is. The
+primary reason to change this is if you are saving the intermediate
+output files for further use/analysis.
+
+-
+audio player: select the program that will be used to play
+audio when clicking on the listen buttons in the segmenter and
+synthesizer tabs.
+
+-
+save .seg .edl .feat files: Normally intermediate output files
+are not saved. However, if you are going to process the same file a
+number of times, you can save time by saving some of the output files
+and reusing them on each pass. For instance, you might save the output
+of the segmenter and then on subsequent runs you can disable the
+segmenter and just use the saved .seg file instead of wasting
+time reanalyzing the file each time around.
+
+
+
addfile ./doc/quickstart.html
hunk ./doc/quickstart.html 1
+
+MEAPsoft Quick Start Walkthrough
+
+
+
+This page leads you through using MEAPsoft to rearrange an example file that
+comes with the package. We assume that you have
+downloaded the package,
+unpacked it, and run "make" on it (as appropriate for your machine).
+
+
+
+For a more detailed description of the MEAPsoft components,
+see the MEAPsoft Manual.
+
+
+
+We'll do a quick demonstration of how to process a soundfile using the Chris Mann speech file
+included with the MEAPsoft distribution. We'll analyze the pitch of each segment in the file and
+then sort those segments from low to high so that we get a nice speech glissando as our output file.
+Click on each panel name (in the bar near the top of the window) to adjust its settings.
+
+
+
+
+
+
+ |
+
+segmenter: chris_mann.wav should already be set as the input sound file. If not click on the
+"browse" button and locate it (or some other .wav file) on your file system. Set the "segment
+sensitivity" to its highest setting -- we want to grab as many small sounds as possible. Click
+on "detect events" -- since this is a soundfile of someone speaking, it doesn't make sense to try
+to extract tempo/beat information. Click "1st event = track start" -- we want to make sure that
+the very first sound in the file is counted as an event.
+ |
+
+
+
+
+
+ |
+
+feature extractors: we will sort the file by pitch, so make sure that only "AvgPitchSimple" is
+selected.
+ |
+
+
+
+
+
+ |
+
+composers: make sure that "simple sort" is selected. Click "low to high" so that the pitches
+are sorted from low to high. Click "apply fade in/out" and "crossfade" so that we get nice
+transitions between speech segments. Set the "fade length (ms)" to 10ms.
+ |
+
+
+
+
+
+ |
+
+synthesizer: nothing to do here! Just click the "go!" button and wait for processing to complete.
+When it's finished, click the "listen button" (on OSX) or find the output sound file in your
+MEAPsoft/data directory. You should hear the speech sounds sorted by pitch.
+ |
+
+
+
+
hunk ./src/com/meapsoft/FeatExtractor.java 57
+ // should this FeatExtractor clear any non meta features?
+ private boolean clearNonMetaFeatures = true;
hunk ./src/com/meapsoft/FeatExtractor.java 261
-
hunk ./src/com/meapsoft/FeatExtractor.java 262
- //System.out.println("now doing meta feature extractors...");
hunk ./src/com/meapsoft/FeatExtractor.java 270
- file.featureDescriptions.clear();
+ if(clearNonMetaFeatures)
+ file.featureDescriptions.clear();
hunk ./src/com/meapsoft/FeatExtractor.java 278
- file.featureDescriptions.clear();
- //System.out.println("doing meta fe: " + fe.toString());
- ((MetaFeatureExtractor)fe).features(file);
+
+ // this obliterates any other features
+ ((MetaFeatureExtractor)fe).features(file, clearNonMetaFeatures);
hunk ./src/com/meapsoft/FeatExtractor.java 293
-
+
hunk ./src/com/meapsoft/FeatExtractor.java 361
+
+
+ /**
+ * Should this FeatExtractor clear any non meta features?
+ */
+ public void setClearNonMetaFeatures(boolean clearNonMF)
+ {
+ clearNonMetaFeatures = clearNonMF;
+ }
+
hunk ./src/com/meapsoft/composers/SortComposer.java 65
+ boolean normalizeFeatures = true;
hunk ./src/com/meapsoft/composers/SortComposer.java 171
+ public void setNormalizeFeatures(boolean b)
+ {
+ normalizeFeatures = b;
+ }
+
hunk ./src/com/meapsoft/composers/SortComposer.java 186
- featFile = (FeatFile)featFile.clone();
- featFile.normalizeFeatures();
- featFile.applyFeatureWeights();
+ if(normalizeFeatures)
+ {
+ featFile = (FeatFile)featFile.clone();
+ featFile.normalizeFeatures();
+ featFile.applyFeatureWeights();
+ }
hunk ./src/com/meapsoft/featextractors/Likelihood.java 39
- public void features(FeatFile featFile)
+ public void features(FeatFile featFile, boolean clearOriginalFeatures)
hunk ./src/com/meapsoft/featextractors/Likelihood.java 104
- curChunk.clearFeatures();
+ if(clearOriginalFeatures)
+ curChunk.clearFeatures();
+
hunk ./src/com/meapsoft/featextractors/MetaFeatureExtractor.java 29
- * Extension of FeatureExtractor that takes a FeatFile instead of FFT data. This allows meta features to be
- * extracted from whole groups of already extracted features.
+ * Extension of FeatureExtractor that takes a FeatFile instead of FFT
+ * data. This allows meta features to be extracted from whole groups
+ * of already extracted features.
hunk ./src/com/meapsoft/featextractors/MetaFeatureExtractor.java 44
- public abstract void features(FeatFile featFile);
+ /**
+ * Extract meta features from featFile. Clears the original
+ * features.
+ */
+ public void features(FeatFile featFile)
+ {
+ features(featFile, true);
+ }
+
+ public abstract void features(FeatFile featFile, boolean clearOriginalFeatures);
hunk ./src/com/meapsoft/gui/ComposerPanel.java 43
-public class ComposerPanel extends MEAPsoftGUIPanel implements ActionListener
+public class ComposerPanel extends MEAPsoftGUIPanel
hunk ./src/com/meapsoft/gui/ComposerPanel.java 51
- JLabel helpButton;
hunk ./src/com/meapsoft/gui/ComposerPanel.java 58
+
hunk ./src/com/meapsoft/gui/ComposerPanel.java 60
- JRadioButton highLowSortButton;
- JRadioButton lowHighSortButton;
-
hunk ./src/com/meapsoft/gui/ComposerPanel.java 70
+ // sort composer controls
+ JRadioButton highLowSortButton;
+ JRadioButton lowHighSortButton;
+ JCheckBox normalizeFeatCB;
+
hunk ./src/com/meapsoft/gui/ComposerPanel.java 95
- Color color;
-
- String helpText =
- "\nA composer takes a feature file as an input, analyzes/sorts/modifys the " +
"segments in that file, and then creates an Edit Decision List (EDL) " +
"representing the order in which the segments from the original source " +
"sound file (as well as others) should be arranged by the synthesizer. " +
"composers can be very simple or very complex. For example, 'simple sort' " +
"simply sorts a features file by the first feature in each chunk. You " +
"could use this with AvgPitchSimple to generate a glissando where all of " +
"the pitches in the input sound are arranged from low to high. More " +
"complex composers, like 'MashUp' and 'head bang' perform more " +
"sophisticated operations.\n\n" +
- "Each composer is described by a short text that appears when you " +
"select it. The controls for that composer (if any) will appear below " +
"the text.\n\n" +
- "Controls: Each composer's controls (if any) are different, and should " +
"be described in that composer's explanatory text. The following Universal " +
"Chunk Operations apply to all composers:\n\n" +
"* reverse: reverse audio in each chunk.\n\n" +
- "* apply fade in/out: to avoid pops between segments you may want to " +
"apply a quick fade in/out at the boundaries of each chunk.\n\n" +
- "* cross fade: slightly shift each segment so that their fade in/outs " +
"overlap. This generally results in smoother, less clicky sound.\n\n" +
- "* fade length (ms): the duration of the fade in/out, in milliseconds.\n\n" +
- "* apply gain value: adds a gain value to each segment in the output " +
"EDL. The synthesizer will use the gain value to scale the amplitude of " +
"the samples it writes to the output soundfile.\n\n" +
- "* gain value: the gain value to add to each segment.\n\n" +
- "The 'display composed features' button is like the 'display extracted " +
"features' button, but it works on the newly composed EDL file. This is " +
"convenient for inspecting the results of the composer. For instance, if " +
"you run the 'simple sort' composer and display the EDL file you will see " +
"that the jumpy colors in the .feat file have been turned into a smooth " +
"fade in the sorted EDL.\n\n";
-
hunk ./src/com/meapsoft/gui/ComposerPanel.java 102
+
+ title = "Composer";
+ helpURL += "#" + title;
hunk ./src/com/meapsoft/gui/ComposerPanel.java 129
- helpButton = new JLabel("(help)");
- helpButton.setForeground(Color.blue);
- helpButton.addMouseListener(this);
hunk ./src/com/meapsoft/gui/ComposerPanel.java 133
- JPanel aboutPanel = new JPanel();
- aboutPanel.setBackground(c);
-
- String aboutText =
- "A composer takes a feature file as an input, analyzes/sorts/modifys " +
"the segments in that file, and then creates an Edit Decision List " +
"representing the order in which the segments from the " +
"original source sound file (as well as others) should be arranged by " +
"the synthesizer. Universal Chunk Operations apply to all chunks in a file.";
-
- JTextArea description = new JTextArea(aboutText);
- description.setBackground(c);
- description.setColumns(70);
- description.setLineWrap(true);
- description.setWrapStyleWord(true);
- description.setBackground(c);
- description.setEditable(false);
- aboutPanel.add(description);
-
- add(aboutPanel);
-
hunk ./src/com/meapsoft/gui/ComposerPanel.java 329
+ normalizeFeatCB = new JCheckBox("normalize features");
+ normalizeFeatCB.setBackground(c);
+ normalizeFeatCB.setSelected(true);
+ controlsPanel.add(normalizeFeatCB);
+
hunk ./src/com/meapsoft/gui/ComposerPanel.java 838
-
- public void mouseClicked(MouseEvent arg0)
- {
- meapsoftGUI.ShowHelpWindow(helpText);
- }
-
-
- public void mousePressed(MouseEvent arg0)
- {
- }
-
- public void mouseReleased(MouseEvent arg0)
- {
- }
-
- public void mouseEntered(MouseEvent arg0)
- {
- }
-
- public void mouseExited(MouseEvent arg0)
- {
- }
hunk ./src/com/meapsoft/gui/ComposerPanel.java 849
+ ((SortComposer)composer).setNormalizeFeatures(normalizeFeatCB.isSelected());
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 44
-public class FeatExtractorPanel extends MEAPsoftGUIPanel implements ActionListener
+public class FeatExtractorPanel extends MEAPsoftGUIPanel
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 48
- JLabel helpButton;
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 56
+ JCheckBox clearNonMetaFeatures;
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 58
- Color color;
-
- String helpText =
- "\nFeature extractors analyze the segments in a .seg file and output a " +
"features file containing one or more values representing the features " +
"found. Some feature extractors, like ChunkPower, simply put out one " +
"number representing the total power in each segment. Others, like " +
"AvgChroma, put out an array of values for each segment. For a short " +
"description of each feature extractor, hover above the feature " +
"extractor's name and a tooltip will pop up.\n\n" +
- "You can select as many feature extractors as you like, although " +
"best results are usually obtained by selecting features extractors " +
"that work well with the composers you'll feed the .feat file to.\n\n" +
- "Meta feature extractors are a special class of FEs that do higher " +
"level analysis on the outputs of previously run normal feature " +
"extractors. In order to use a meta feature extractor, you need to " +
"select at least one normal feature extractor in addition to the meta " +
"feature extractor.\n\n" +
- "The 'Display extracted features' button is enabled after processing a " +
"segments file. It pops up a window with a simple viewer that allows " +
"you to inspect the values of the extracted features. This is useful " +
"if you need to set value ranges in a Composer.\n\n";
-
-
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 65
+
+ title = "Feature Extractor";
+ helpURL += "#" + title;
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 96
- helpButton = new JLabel("(help)");
- //helpButton.setBackground(c.darker());
- helpButton.setForeground(Color.blue);
- helpButton.addMouseListener(this);
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 100
- JPanel aboutPanel = new JPanel();
- aboutPanel.setBackground(c);
-
- String aboutText =
- "Feature extractors analyze a segments file and " +
- "output one or more values representing the sonic properties " +
- "of the segments. " +
- "Meta feature extractors perform feature extraction on the " +
- "results of other feature extractors. You need to activate " +
- "at least one regular feature extractor in order to use a " +
- "meta feature extractor. Number boxes beside feature extractors " +
- "are for entering weights that allow you to specify the relative " +
- "importance of each feature in the analysis.\n\n" +
- "For a short description of each feature extractor, hover above the " +
- "feature extractor's name and a tooltip will pop up.";
-
- JTextArea description = new JTextArea(aboutText);
- description.setBackground(c);
- description.setColumns(70);
- description.setLineWrap(true);
- description.setWrapStyleWord(true);
- description.setBackground(c);
- description.setEditable(false);
- aboutPanel.add(description);
-
- add(aboutPanel);
-
-
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 117
-
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 126
- JPanel selectMetaFeaturesPanel = new JPanel();
- selectMetaFeaturesPanel.setBackground(c);
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 130
- selectMetaFeaturesPanel.setBorder(metaTitle);
- controlsPanel.add(selectMetaFeaturesPanel);
+
+ Box box = Box.createVerticalBox();
+ box.setBackground(c);
+ box.setBorder(metaTitle);
+ controlsPanel.add(box);
+
+ clearNonMetaFeatures = new JCheckBox("clear non-meta features");
+ clearNonMetaFeatures.setBackground(c);
+ clearNonMetaFeatures.setSelected(true);
+ clearNonMetaFeatures.setAlignmentX(Component.CENTER_ALIGNMENT);
+ box.add(clearNonMetaFeatures);
+
+ JPanel selectMetaFeaturesPanel = new JPanel();
+ selectMetaFeaturesPanel.setBackground(c);
+ box.add(selectMetaFeaturesPanel);
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 167
- JCheckBox cb = new JCheckBox(name);
+ JToggleButton cb = new JCheckBox(name);
+ if(f instanceof MetaFeatureExtractor)
+ cb = new JRadioButton(name);
+
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 292
- ((JCheckBox)featureCheckBoxes.get(i)).isSelected());
+ ((JToggleButton)featureCheckBoxes.get(i)).isSelected());
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 296
- public void mouseClicked(MouseEvent arg0)
- {
- meapsoftGUI.ShowHelpWindow(helpText);
- }
-
-
- public void mousePressed(MouseEvent arg0)
- {
- }
-
- public void mouseReleased(MouseEvent arg0)
- {
- }
-
- public void mouseEntered(MouseEvent arg0)
- {
- }
-
- public void mouseExited(MouseEvent arg0)
- {
- }
-
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 315
- JCheckBox cb = (JCheckBox)featureCheckBoxes.elementAt(i);
+ JToggleButton cb = (JToggleButton)featureCheckBoxes.elementAt(i);
hunk ./src/com/meapsoft/gui/FeatExtractorPanel.java 349
+ featExtractor.setClearNonMetaFeatures(
+ clearNonMetaFeatures.isSelected());
hunk ./src/com/meapsoft/gui/HelpWindow.java 9
+import java.awt.BorderLayout;
hunk ./src/com/meapsoft/gui/HelpWindow.java 11
+import java.awt.Dimension;
hunk ./src/com/meapsoft/gui/HelpWindow.java 15
+import java.io.IOException;
+
+import java.net.MalformedURLException;
+
hunk ./src/com/meapsoft/gui/HelpWindow.java 21
+import javax.swing.JEditorPane;
hunk ./src/com/meapsoft/gui/HelpWindow.java 24
+import javax.swing.JScrollPane;
hunk ./src/com/meapsoft/gui/HelpWindow.java 26
+import javax.swing.text.JTextComponent;
hunk ./src/com/meapsoft/gui/HelpWindow.java 36
-
hunk ./src/com/meapsoft/gui/HelpWindow.java 37
+ JTextComponent textArea = null;
hunk ./src/com/meapsoft/gui/HelpWindow.java 39
- public HelpWindow(String text)
+ public HelpWindow(String url, String title, Color c)
hunk ./src/com/meapsoft/gui/HelpWindow.java 41
- Color c = new Color((int)(Math.random() * 127 + 127),
- (int)(Math.random() * 127 + 127),
- (int)(Math.random() * 127 + 127));
+ super(title);
+
+ JPanel panel = new JPanel(new BorderLayout());
+ panel.setBackground(c);
hunk ./src/com/meapsoft/gui/HelpWindow.java 46
- setBackground(c);
- setResizable(false);
-
- /*
- JPanel panel = new JPanel();
- BoxLayout bl = new BoxLayout(panel, BoxLayout.Y_AXIS);
- panel.setLayout(bl);
- */
-
- JTextArea textArea = new JTextArea(text);
- textArea.setColumns(50);
+ try
+ {
+ textArea = new JEditorPane(url);
+ }
+ catch(MalformedURLException e)
+ {
+ textArea = new JTextArea(url);
+ }
+ catch(IOException e)
+ {}
+
+ //textArea.setColumns(50);
hunk ./src/com/meapsoft/gui/HelpWindow.java 59
- textArea.setLineWrap(true);
- textArea.setWrapStyleWord(true);
- textArea.revalidate();
+ textArea.setEditable(false);
+ JScrollPane scrollPane = new JScrollPane(textArea);
+ panel.add(scrollPane, BorderLayout.CENTER);
hunk ./src/com/meapsoft/gui/HelpWindow.java 63
- /*
- panel.add(textArea);
-
+ panel.setPreferredSize(new Dimension(600, 400));
+
+ JPanel cbPanel = new JPanel();
+ cbPanel.setBackground(c);
hunk ./src/com/meapsoft/gui/HelpWindow.java 68
+ closeButton.setBackground(c);
hunk ./src/com/meapsoft/gui/HelpWindow.java 72
- hide(); // code to execute when button is pressed
+ setVisible(false);
hunk ./src/com/meapsoft/gui/HelpWindow.java 76
+ cbPanel.add(closeButton);
+ panel.add(cbPanel, BorderLayout.SOUTH);
hunk ./src/com/meapsoft/gui/HelpWindow.java 79
- panel.add(closeButton);
-
- setContentPane(panel);
- */
-
- getContentPane().add(textArea);
-
- validate();
- pack();
+ setContentPane(panel);
+ pack();
hunk ./src/com/meapsoft/gui/HelpWindow.java 82
- show();
- hide();
- pack();
- show();
+ setVisible(true);
hunk ./src/com/meapsoft/gui/MEAPsoftGUI.java 81
+ public static String meapsoftDirectory;
hunk ./src/com/meapsoft/gui/MEAPsoftGUI.java 136
- String cwd = binPath.getParent();
- dataDirectory = cwd + slash + "data";
+ meapsoftDirectory = binPath.getParent();
+ dataDirectory = meapsoftDirectory + slash + "data";
hunk ./src/com/meapsoft/gui/MEAPsoftGUI.java 151
- jframe.show();
-
hunk ./src/com/meapsoft/gui/MEAPsoftGUI.java 152
+
+ jframe.show();
hunk ./src/com/meapsoft/gui/MEAPsoftGUI.java 459
- public void ShowHelpWindow(String text)
- {
- HelpWindow help = new HelpWindow(text);
- }
-
hunk ./src/com/meapsoft/gui/MEAPsoftGUIPanel.java 58
+ protected static String meapsoftDirectory;
hunk ./src/com/meapsoft/gui/MEAPsoftGUIPanel.java 86
+ // help button
+ protected JLabel helpButton;
+ protected String helpURL;
+
+ // window title (used for help window).
+ protected String title;
hunk ./src/com/meapsoft/gui/MEAPsoftGUIPanel.java 94
- * Create a new Segmenter panel with the given action listener
+ * Create a new MEAPsoftGUIPanel
hunk ./src/com/meapsoft/gui/MEAPsoftGUIPanel.java 101
+ meapsoftDirectory = msg.meapsoftDirectory;
hunk ./src/com/meapsoft/gui/MEAPsoftGUIPanel.java 111
+
+ helpButton = new JLabel("(help)");
+ helpButton.setForeground(Color.blue);
+ helpButton.setAlignmentX(Component.CENTER_ALIGNMENT);
+ helpButton.addMouseListener(this);
+ helpURL = "file:///" + meapsoftDirectory + slash + "doc" + slash
+ + "manual.html";
hunk ./src/com/meapsoft/gui/MEAPsoftGUIPanel.java 208
+
+ public void actionPerformed(ActionEvent arg0)
+ {
+ }
+
+ public void mouseClicked(MouseEvent arg0)
+ {
+ HelpWindow help = new HelpWindow(helpURL, title+" Help", color);
+ }
+
+ public void mousePressed(MouseEvent arg0)
+ {
+ }
+
+ public void mouseReleased(MouseEvent arg0)
+ {
+ }
+
+ public void mouseEntered(MouseEvent arg0)
+ {
+ }
+
+ public void mouseExited(MouseEvent arg0)
+ {
+ }
hunk ./src/com/meapsoft/gui/PreferencesPanel.java 34
-public class PreferencesPanel extends MEAPsoftGUIPanel implements ActionListener
+public class PreferencesPanel extends MEAPsoftGUIPanel
hunk ./src/com/meapsoft/gui/PreferencesPanel.java 38
- JCheckBox deleteFilesPrefBox;
+ JTextField audioPlayerField;
+ JCheckBox saveFilesPrefBox;
hunk ./src/com/meapsoft/gui/PreferencesPanel.java 41
- Color color;
-
- String helpText =
- "\nSystem wide preferences are set here.\n\n" +
- "* file i/o base name: this is the prefix used when creating temp files " +
"during processing steps. You can usually leave this as is. The primary " +
"reason to change this is if you are saving the intermediate output files " +
"for further use/analysis.\n\n" +
- "* save .seg .edl .feat files: Normally intermediate output files are not " +
"saved. However, if you are going to process the same file a number of " +
"times, you can save time by saving some of the output files and reusing " +
"them on each pass. For instance, you might save the output of the segmenter " +
"and then on subsequent runs you can disable the segmenter and just use the " +
"saved .seg file instead of wasting time reanalyzing the file each time " +
"around.\n\n";
-
-
hunk ./src/com/meapsoft/gui/PreferencesPanel.java 48
+
+ title = "Preferences";
+ helpURL += "#" + title;
hunk ./src/com/meapsoft/gui/PreferencesPanel.java 63
+
+ add(helpButton);
hunk ./src/com/meapsoft/gui/PreferencesPanel.java 74
-
- JPanel dBNPanel = new JPanel();
+
+ JPanel panel = new JPanel();
+ panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+ panel.setBackground(c);
+
+ JPanel dBNPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
hunk ./src/com/meapsoft/gui/PreferencesPanel.java 201
- public void mouseClicked(MouseEvent arg0)
- {
- meapsoftGUI.ShowHelpWindow(helpText);
- }
-
- public void mousePressed(MouseEvent arg0)
- {
- }
-
- public void mouseReleased(MouseEvent arg0)
- {
- }
-
- public void mouseEntered(MouseEvent arg0)
- {
- }
-
- public void mouseExited(MouseEvent arg0)
- {
- }
-
hunk ./src/com/meapsoft/gui/SegmenterPanel.java 45
- JLabel helpButton;
hunk ./src/com/meapsoft/gui/SegmenterPanel.java 59
- String helpText =
- "\nThe segmenter analyzes the input sound file and outputs a list of " +
"segments representing events or beats present in the sound.\n\n" +
- "Controls:\n\n" +
- "* input sound file: select the sound you would like to analyze. The " +
"filename of this sound will be used as the base name for all subsequent " +
"file i/o operations. You can change this basename (if, for instance, you " +
"want to save multiple versions of the segments file for one input sound) " +
"in the prefs/about panel.\n\n" +
- "* segment sensitivity: a low sensitivity will result in fewer segments " +
"than a high sensitivity. Think of this as a sensitivity to change; if " +
"your sensitivity is high then everything will seem like an event.\n\n" +
- "* detect events/detect beats: the segmenter has two different modes, " +
"'events' and 'beats'. 'Events' mode simply detects sudden, substantial " +
"changes in the sound. The threshold for what qualifies as a " +
"substantial change is set via the segment sensitivity slider, above. " +
"'Beats' mode is more complex; the segmenter attempts to identify the " +
"tempo of the input sound and then outputs events that are aligned with " +
"that tempo. This will only work well for input sounds with fairly simple " +
"tempo/beat structures.\n\n" +
- "* 1st event = track start: This tells the segmenter to always count the " +
"beginning of the track as the first event, even if there is very little " +
"energy there. If a sound starts with a fade in, for instance, and you don't " +
"have this checked, then the event detector will probably not detect that " +
"fade in as an event and the output segments file will not include that " +
"part of the sound.\n\n" +
- "* output segment file: this is the temporary file name that will be used " +
"to save the segments file that is generated by the segmenter. If you want " +
"to save this file for further use, check the appropriate box in the " +
"prefs/about panel.\n\n";
-
-
hunk ./src/com/meapsoft/gui/SegmenterPanel.java 66
+
+ title = "Segmenter";
+ helpURL += "#" + title;
hunk ./src/com/meapsoft/gui/SegmenterPanel.java 83
- BoxLayout sepbl = new BoxLayout(segmenterEnablePanel, BoxLayout.Y_AXIS);
- segmenterEnablePanel.setLayout(sepbl);
+
hunk ./src/com/meapsoft/gui/SegmenterPanel.java 99
- JPanel aboutPanel = new JPanel();
- aboutPanel.setBackground(c);
-
- String aboutText =
- "The segmenter analyzes the input sound file and outputs a list of " +
"segments representing events or beats present in the sound.";
-
-
- JTextArea description = new JTextArea(aboutText);
- description.setBackground(c);
- description.setColumns(40);
- description.setLineWrap(true);
- description.setWrapStyleWord(true);
- description.setBackground(c);
- description.setEditable(false);
- aboutPanel.add(description);
-
- add(aboutPanel);
-
hunk ./src/com/meapsoft/gui/SegmenterPanel.java 284
-
- public void mouseClicked(MouseEvent arg0)
- {
- meapsoftGUI.ShowHelpWindow(helpText);
- }
-
-
- public void mousePressed(MouseEvent arg0)
- {
- }
-
- public void mouseReleased(MouseEvent arg0)
- {
- }
-
- public void mouseEntered(MouseEvent arg0)
- {
- }
-
- public void mouseExited(MouseEvent arg0)
- {
- }
hunk ./src/com/meapsoft/gui/SynthesizerPanel.java 41
-public class SynthesizerPanel extends MEAPsoftGUIPanel implements ActionListener
+public class SynthesizerPanel extends MEAPsoftGUIPanel
hunk ./src/com/meapsoft/gui/SynthesizerPanel.java 46
- JLabel helpButton;
hunk ./src/com/meapsoft/gui/SynthesizerPanel.java 50
-
hunk ./src/com/meapsoft/gui/SynthesizerPanel.java 57
+
+ title = "Synthesizer";
+ helpURL += "#" + title;
hunk ./src/com/meapsoft/gui/SynthesizerPanel.java 81
- String aboutText =
- "The synthesizer uses the EDL from a composer to construct a new audio " +
"file. The output sound file name is automatically set to the input " +
"sound file name + 'MEAPED.wav'. You can change this if you like.";
-
- JTextArea description = new JTextArea(aboutText);
- description.setBackground(c);
- description.setColumns(40);
- description.setLineWrap(true);
- description.setWrapStyleWord(true);
- description.setBackground(c);
- description.setEditable(false);
- aboutPanel.add(description);
+ enableSynthPanel.add(helpButton);
hunk ./src/com/meapsoft/gui/SynthesizerPanel.java 103
+ synthControlsPanel.setAlignmentY(Component.CENTER_ALIGNMENT);
hunk ./src/com/meapsoft/gui/SynthesizerPanel.java 185
-
- public void mouseClicked(MouseEvent arg0)
- {
- meapsoftGUI.ShowHelpWindow(helpText);
- }
-
-
- public void mousePressed(MouseEvent arg0)
- {
- }
-
- public void mouseReleased(MouseEvent arg0)
- {
- }
-
- public void mouseEntered(MouseEvent arg0)
- {
- }
-
- public void mouseExited(MouseEvent arg0)
- {
- }
}