[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:

+ + + +
+
+

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

+ + + +

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

+ + + 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 screenshot] + +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. +
+[ftr extractor screenshot] + +feature extractors: we will sort the file by pitch, so make sure that only "AvgPitchSimple" is +selected. +
+[composer screenshot] + +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 screenshot] + +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) - { - } }