/**
* Copyright 2007 DFKI GmbH.
* All Rights Reserved. Use is subject to license terms.
*
* This file is part of MARY TTS.
*
* MARY TTS is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package marytts.tools.redstart;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
import java.util.Properties;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Mixer;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.TargetDataLine;
import javax.swing.JOptionPane;
import marytts.signalproc.display.MultiDisplay;
import marytts.util.data.audio.AudioConverterUtils;
import marytts.util.data.audio.AudioPlayer;
import marytts.util.data.audio.AudioProcessor;
import marytts.util.data.audio.MonoAudioInputStream;
/**
*
* @author Mat Wilson <mwilson@dfki.de>
*/
public class Options extends javax.swing.JFrame {
// Location of beeps for recording countdown, start and end
private static final URL BEEP_HIGH_URL = Redstart.class.getResource("beep_high.wav");
private static final URL BEEP_LOW_URL = Redstart.class.getResource("beep_low.wav");
private AdminWindow adminWindow;
// Relevant paths
private String optionsFolderString;
private File optionsFolder;
private String optionsPathString;
private String testPlaybackPathString;
// User options (pause duration preferences) with default values
private Integer bufferToAdd = new Integer(0); // Buffer duration (in ms) to add when opening mic
private Integer pauseAfterSynth = new Integer(0); // Pause duration after playing synthesized prompt
private Integer timePerChar = new Integer(0); // Pause duration between basenames in continuous mode
private Integer silenceDuration = new Integer(0); // Silence duration before recording
// User-defined display options
private boolean systemLookAndFeel = true; // Use system look and feel instead (e.g., Windows, Mac OS)
private boolean printTestOutput = true; // Obsolete? Nearly - clean up
// Playback flags and objects
private boolean playingStatus;
private boolean stopPressed;
private Recording testRecording;
// Progress bar fields
private static int minAmp = -30;
private static int maxAmp = 0;
// Target data line
private TargetDataLine targetDataLine = null;
/**
* Creates new form Options
*
* @param adminWindow
* adminWindow
*/
public Options(AdminWindow adminWindow) {
this.adminWindow = adminWindow;
optionsFolderString = adminWindow.getVoiceFolderPath().getPath() + "/config/";
optionsFolder = new File(optionsFolderString);
optionsPathString = optionsFolderString + "recsessionmgr.config";
testPlaybackPathString = optionsFolderString + "test.wav";
testRecording = new Recording(optionsFolder, "test");
initComponents();
populateAudioCombo();
// Center window in the user's screen
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = getSize();
setLocation(new Point((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2));
// Set the tool icon in the upper left corner to the 16 x 16 pixel image
this.setIconImage(Toolkit.getDefaultToolkit().getImage(IconSet.LOGO_16x16_URL));
loadOptionValues();
// Intialize meter values for audio testing
this.jProgressBar_Amplitude.setMinimum(minAmp);
this.jProgressBar_Amplitude.setMaximum(maxAmp);
this.jProgressBar_Amplitude.setValue(minAmp);
}
public boolean getSystemLookAndFeel() {
return this.systemLookAndFeel;
}
/**
* Gets buffer to to add duration of synthesized playback (for open mic time)
*
* @return The amount of buffer to add (in milliseconds)
*/
public int getBufferToAdd() {
return bufferToAdd.intValue();
}
/**
* Gets pause duration between synthesis playback and recording
*
* @return The pause duration (in milliseconds) after synthesis playback
*/
public int getPauseAfterSynth() {
return pauseAfterSynth.intValue();
}
/**
* Gets pause duration between basenames in continuous mode
*
* @return The pause duration (in milliseconds) between prompts when in continuous recording mode
*/
public int getTimePerChar() {
return timePerChar.intValue();
}
public boolean getPrintTestOutput() {
return printTestOutput;
}
public boolean getShowPromptCount() {
return jCheckBox_ShowPromptCount.isSelected();
}
public boolean getRedAlertMode() {
return jCheckBox_RedAlertMode.isSelected();
}
/**
* Get the target data line corresponding to the selected AudioSource, Line and Format.
*
* @throws LineUnavailableException
* LineUnavailableException
* @return targetDataLine
*/
public TargetDataLine getTargetDataLine() throws LineUnavailableException {
if (targetDataLine != null) {
if (targetDataLine.isOpen()) {
Test.output("targetDataLine was open, with format: " + targetDataLine.getFormat());
targetDataLine.close();
}
}
Object audioDescriptor = cbAudioSource.getSelectedItem();
assert audioDescriptor instanceof Mixer.Info || audioDescriptor instanceof String;
if (audioDescriptor instanceof Mixer.Info) {
Mixer.Info mixerInfo = (Mixer.Info) audioDescriptor;
Mixer mixer = AudioSystem.getMixer(mixerInfo);
Line.Info[] lineInfos = mixer.getTargetLineInfo();
assert lineInfos.length > 0 : "Strange, there is no more line info for mixer: " + mixer;
Line.Info lineInfo = lineInfos[0];
targetDataLine = (TargetDataLine) mixer.getLine(lineInfo);
} else {
assert ((String) audioDescriptor).equals("AudioSystem");
Line.Info lineInfo = new DataLine.Info(TargetDataLine.class, getAudioFormat());
targetDataLine = (TargetDataLine) AudioSystem.getLine(lineInfo);
}
targetDataLine.open(getAudioFormat());
Test.output("Target line opened:");
Test.output("Format requested: " + getAudioFormat());
Test.output("Format opened : " + targetDataLine.getFormat());
return targetDataLine;
}
public AudioFormat getAudioFormat() {
return new AudioFormat(Float.parseFloat((String) cbSamplingRate.getSelectedItem()),
Integer.parseInt((String) cbBitsPerSample.getSelectedItem()),
((String) cbMonoStereo.getSelectedItem()).equals("mono") ? 1 : 2, true, // signed
false); // little-endian
}
public AudioProcessor getInlineFilter() {
AudioProcessor highPassFilter = new AudioConverterUtils.HighPassFilter(20, 20);
String monoStereo = (String) cbMonoStereo.getSelectedItem();
if (monoStereo.equals("mono")) {
return highPassFilter;
} else {
int mode = AudioPlayer.STEREO;
if (monoStereo.equals("left only")) {
mode = AudioPlayer.LEFT_ONLY;
} else if (monoStereo.equals("right only")) {
mode = AudioPlayer.RIGHT_ONLY;
}
AudioProcessor[] sequence = new AudioProcessor[] { new AudioConverterUtils.Stereo2Mono(mode), highPassFilter };
return new AudioConverterUtils.SequenceAudioProcessor(Arrays.asList(sequence));
}
}
/**
* Try to get a line for output to the speaker. The line is not yet opened with a specific format.
*
* @return a line object, or null if the line could not be created.
*/
public SourceDataLine getSpeakerOutputLine() {
Object audioDescriptor = cbSpeakerOutput.getSelectedItem();
assert audioDescriptor instanceof Mixer.Info;
Mixer.Info mixerInfo = (Mixer.Info) audioDescriptor;
Mixer mixer = AudioSystem.getMixer(mixerInfo);
Line.Info[] lineInfos = mixer.getSourceLineInfo();
assert lineInfos.length > 0 : "Strange, there are no more source lines for mixer: " + mixer;
Line.Info lineInfo = lineInfos[0];
SourceDataLine line = null;
try {
line = (SourceDataLine) mixer.getLine(lineInfo);
} catch (LineUnavailableException e) {
e.printStackTrace();
}
return line;
}
/**
* From the GUI, get the output mode setting: one of AudioPlayer.MONO, AudioPlayer.STEREO, AudioPlayer.LEFT_ONLY or
* AudioPlayer.RIGHT_ONLY.
*
* @return AudioPlayer.STEREO
*/
public int getSpeakerOutputMode() {
String mode = (String) cbSpeakerMonoStereo.getSelectedItem();
if (mode.equals("mono"))
return AudioPlayer.MONO;
else if (mode.equals("left only"))
return AudioPlayer.LEFT_ONLY;
else if (mode.equals("right only"))
return AudioPlayer.RIGHT_ONLY;
// default:
return AudioPlayer.STEREO;
}
/**
* Try to get a line for output to the expert. The line is not yet opened with a specific format.
*
* @return a line object, or null if the line could not be created.
*/
public SourceDataLine getExpertOutputLine() {
Object audioDescriptor = cbExpertOutput.getSelectedItem();
assert audioDescriptor instanceof Mixer.Info;
Mixer.Info mixerInfo = (Mixer.Info) audioDescriptor;
Mixer mixer = AudioSystem.getMixer(mixerInfo);
Line.Info[] lineInfos = mixer.getSourceLineInfo();
assert lineInfos.length > 0 : "Strange, there are no more source lines for mixer: " + mixer;
Line.Info lineInfo = lineInfos[0];
SourceDataLine line = null;
try {
line = (SourceDataLine) mixer.getLine(lineInfo);
} catch (LineUnavailableException e) {
e.printStackTrace();
}
return line;
}
/**
* From the GUI, get the input mode setting: one of AudioPlayer.MONO, AudioPlayer.STEREO, AudioPlayer.LEFT_ONLY or
* AudioPlayer.RIGHT_ONLY.
*
* @return AudioPlayer.STEREO
*/
public int getInputMode() {
String mode = (String) cbMonoStereo.getSelectedItem();
if (mode.equals("mono"))
return AudioPlayer.MONO;
else if (mode.equals("left only"))
return AudioPlayer.LEFT_ONLY;
else if (mode.equals("right only"))
return AudioPlayer.RIGHT_ONLY;
// default:
return AudioPlayer.STEREO;
}
/**
* From the GUI, get the output mode setting: one of AudioPlayer.MONO, AudioPlayer.STEREO, AudioPlayer.LEFT_ONLY or
* AudioPlayer.RIGHT_ONLY.
*
* @return AudioPlayer.MONO if mode is "mono", AudioPlayer.LEFT_ONLY if mode is "left only", AudioPlayer.RIGHT_ONLY if mode is
* mode is "right only", AudioPlayer.STEREO otherwise
*/
public int getExpertOutputMode() {
String mode = (String) cbExpertMonoStereo.getSelectedItem();
if (mode.equals("mono"))
return AudioPlayer.MONO;
else if (mode.equals("left only"))
return AudioPlayer.LEFT_ONLY;
else if (mode.equals("right only"))
return AudioPlayer.RIGHT_ONLY;
// default:
return AudioPlayer.STEREO;
}
public void playOpenBeep() {
try {
SourceDataLine speakerOutput = getSpeakerOutputLine();
AudioPlayer beepPlayer = new AudioPlayer(AudioSystem.getAudioInputStream(BEEP_HIGH_URL), speakerOutput, null,
getSpeakerOutputMode());
beepPlayer.start();
beepPlayer.join();
} catch (Exception e) {
e.printStackTrace();
}
}
public void playClosedBeep() {
try {
SourceDataLine speakerOutput = getSpeakerOutputLine();
AudioPlayer beepPlayer = new AudioPlayer(AudioSystem.getAudioInputStream(BEEP_LOW_URL), speakerOutput, null,
getSpeakerOutputMode());
beepPlayer.start();
beepPlayer.join();
} catch (Exception e) {
e.printStackTrace();
}
}
/** Loads options from a properties file */
private void read() {
try {
// Get the properties from the options file
Properties options = new Properties();
// First, load defaults from resource in classpath:
options.load(Redstart.class.getResourceAsStream("user.options"));
// Then, overwrite from file if present:
File fileHandle = new File(optionsPathString);
if (fileHandle.exists()) {
FileInputStream optionsStream = new FileInputStream(fileHandle);
options.load(optionsStream);
// Close the input stream
optionsStream.close();
}
bufferToAdd = Integer.valueOf(options.getProperty("bufferAdded", "2000"));
pauseAfterSynth = Integer.valueOf(options.getProperty("pauseAfterSynth", "0"));
timePerChar = Integer.valueOf(options.getProperty("timePerChar", "70"));
int audioSourceIndex = Integer.parseInt(options.getProperty("audioSourceIndex", "1"));
int expertOutputIndex = Integer.parseInt(options.getProperty("expertOutputIndex", "0"));
int speakerOutputIndex = Integer.parseInt(options.getProperty("speakerOutputIndex", "0"));
silenceDuration = Integer.valueOf(options.getProperty("silenceDuration", "2000"));
boolean showTranscription = Boolean.valueOf(options.getProperty("showTranscription", "false")).booleanValue();
boolean showPromptCount = Boolean.valueOf(options.getProperty("showPromptCount", "true")).booleanValue();
boolean redAlertMode = Boolean.valueOf(options.getProperty("redAlertMode", "false")).booleanValue();
// Set values in the GUI to match what's in the options file
jSpinner_BufferAdded.setValue(bufferToAdd);
jSpinner_PauseAfterSynth.setValue(pauseAfterSynth);
jSpinner_TimePerChar.setValue(timePerChar);
jSpinner_SilenceDuration.setValue(silenceDuration);
cbAudioSource.setSelectedIndex(audioSourceIndex);
cbExpertOutput.setSelectedIndex(expertOutputIndex);
cbSpeakerOutput.setSelectedIndex(speakerOutputIndex);
cbSamplingRate.setSelectedItem(options.getProperty("samplingRate", "44100"));
cbBitsPerSample.setSelectedItem(options.getProperty("bitsPerSample", "16"));
cbMonoStereo.setSelectedItem(options.getProperty("monoStereo", "stereo"));
cbExpertBitsPerSample.setSelectedItem(options.getProperty("expertBitsPerSample", "16"));
cbExpertMonoStereo.setSelectedItem(options.getProperty("expertMonoStereo", "stereo"));
cbSpeakerBitsPerSample.setSelectedItem(options.getProperty("speakerBitsPerSample", "16"));
cbSpeakerMonoStereo.setSelectedItem(options.getProperty("speakerMonoStereo", "stereo"));
systemLookAndFeel = Boolean.valueOf(options.getProperty("systemLookAndFeel", "true")).booleanValue();
jCheckBox_SystemLookAndFeel.setSelected(systemLookAndFeel);
printTestOutput = Boolean.valueOf(options.getProperty("printTestOutput", "true")).booleanValue();
jCheckBox_ShowTestOutput.setSelected(printTestOutput);
Test.setDebugMode(printTestOutput); // PRI3 Consolidate these fields
jCheckBox_ShowTranscription.setSelected(showTranscription);
adminWindow.setShowTranscription(showTranscription);
jCheckBox_ShowPromptCount.setSelected(showPromptCount);
adminWindow.getSpeakerWindow().setShowPromptCount(showPromptCount);
jCheckBox_RedAlertMode.setSelected(redAlertMode);
adminWindow.setRedAlertMode(redAlertMode);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void saveVoicePath(File path) {
File fileHandle = new File(optionsPathString);
File parentDir = fileHandle.getParentFile(); // config subdirectory in voice dir
if (!parentDir.exists())
parentDir.mkdir();
FileOutputStream optionsStream;
try {
optionsStream = new FileOutputStream(fileHandle);
Test.output("|Options.saveVoicePath()| New voice path: " + path);
// Set and save properties to config file
Properties options = new Properties();
options.setProperty("defaultVoicePath", String.valueOf(adminWindow.getVoiceFolderPath().getPath()));
try {
options.store(optionsStream, "Settings for Redstart Recording Session Manager");
// Close the output stream
optionsStream.close();
Test.output("|Options.write()| Settings saved to " + optionsPathString); // TESTCODE
} catch (IOException ex) {
ex.printStackTrace();
}
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
}
/** Writes options to a properties file */
private void write() {
try {
File fileHandle = new File(optionsPathString);
File parentDir = fileHandle.getParentFile(); // config subdirectory in voice dir
if (!parentDir.exists())
parentDir.mkdir();
FileOutputStream optionsStream = new FileOutputStream(fileHandle);
// Set and save properties to config file
Properties options = new Properties();
this.bufferToAdd = (Integer) jSpinner_BufferAdded.getValue();
this.pauseAfterSynth = (Integer) jSpinner_PauseAfterSynth.getValue();
this.timePerChar = (Integer) jSpinner_TimePerChar.getValue();
this.silenceDuration = (Integer) jSpinner_SilenceDuration.getValue();
options.setProperty("bufferAdded", String.valueOf(bufferToAdd));
options.setProperty("pauseAfterSynth", String.valueOf(pauseAfterSynth));
options.setProperty("pauseBetweenRec", String.valueOf(timePerChar));
options.setProperty("silenceDuration", String.valueOf(silenceDuration));
int audioSourceIndex = cbAudioSource.getSelectedIndex();
int expertOutputIndex = cbExpertOutput.getSelectedIndex();
int speakerOutputIndex = cbSpeakerOutput.getSelectedIndex();
options.setProperty("audioSourceIndex", String.valueOf(audioSourceIndex));
options.setProperty("expertOutputIndex", String.valueOf(expertOutputIndex));
options.setProperty("speakerOutputIndex", String.valueOf(speakerOutputIndex));
options.setProperty("systemLookAndFeel", String.valueOf(this.systemLookAndFeel));
options.setProperty("printTestOutput", String.valueOf(this.printTestOutput));
boolean showTranscription = jCheckBox_ShowTranscription.isSelected();
options.setProperty("showTranscription", String.valueOf(showTranscription));
boolean showPromptCount = jCheckBox_ShowPromptCount.isSelected();
options.setProperty("showPromptCount", String.valueOf(showPromptCount));
boolean redAlertMode = jCheckBox_RedAlertMode.isSelected();
options.setProperty("redAlertMode", String.valueOf(redAlertMode));
options.setProperty("samplingRate", (String) cbSamplingRate.getSelectedItem());
options.setProperty("bitsPerSample", (String) cbBitsPerSample.getSelectedItem());
options.setProperty("monoStereo", (String) cbMonoStereo.getSelectedItem());
options.setProperty("expertBitsPerSample", (String) cbExpertBitsPerSample.getSelectedItem());
options.setProperty("expertMonoStereo", (String) cbExpertMonoStereo.getSelectedItem());
options.setProperty("speakerBitsPerSample", (String) cbSpeakerBitsPerSample.getSelectedItem());
options.setProperty("speakerMonoStereo", (String) cbSpeakerMonoStereo.getSelectedItem());
options.store(optionsStream, "Settings for Redstart Recording Session Manager");
// Close the output stream
optionsStream.close();
Test.output("|Options.write()| Settings saved to " + optionsPathString); // TESTCODE
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of
* this method is always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
private void initComponents() {
jButton_SaveOptions = new javax.swing.JButton();
jButton_CancelOptions = new javax.swing.JButton();
jTabbedPane_Options = new javax.swing.JTabbedPane();
jPanel_AudioOptions = new javax.swing.JPanel();
jLabel_AudioMixer = new javax.swing.JLabel();
cbAudioSource = new javax.swing.JComboBox();
jButton_Record = new javax.swing.JButton();
jButton_Play = new javax.swing.JButton();
jProgressBar_Amplitude = new javax.swing.JProgressBar();
jLabel_dBMin = new javax.swing.JLabel();
jLabel_dBMax = new javax.swing.JLabel();
jLabel_Status = new javax.swing.JLabel();
jLabel_Message = new javax.swing.JLabel();
cbExpertOutput = new javax.swing.JComboBox();
cbSpeakerOutput = new javax.swing.JComboBox();
jLabel_ExpertOutput = new javax.swing.JLabel();
jLabel_SpeakerOutput = new javax.swing.JLabel();
cbSamplingRate = new javax.swing.JComboBox();
jLabel1 = new javax.swing.JLabel();
cbBitsPerSample = new javax.swing.JComboBox();
jLabel2 = new javax.swing.JLabel();
cbMonoStereo = new javax.swing.JComboBox();
jLabel3 = new javax.swing.JLabel();
cbExpertMonoStereo = new javax.swing.JComboBox();
jLabel4 = new javax.swing.JLabel();
cbExpertBitsPerSample = new javax.swing.JComboBox();
cbSpeakerMonoStereo = new javax.swing.JComboBox();
bDisplay = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
cbSpeakerBitsPerSample = new javax.swing.JComboBox();
jPanel_TimingOptions = new javax.swing.JPanel();
jLabel_BufferAdded = new javax.swing.JLabel();
jSpinner_BufferAdded = new javax.swing.JSpinner();
jLabel_PauseBufferAddedUnits = new javax.swing.JLabel();
jLabel_PauseBetweenrecUnits = new javax.swing.JLabel();
jSpinner_TimePerChar = new javax.swing.JSpinner();
jLabel_TimePerChar = new javax.swing.JLabel();
jLabel_PauseAfterSynth = new javax.swing.JLabel();
jSpinner_PauseAfterSynth = new javax.swing.JSpinner();
jLabel_PauseAfterSynthUnits = new javax.swing.JLabel();
jLabel_SilenceDuration = new javax.swing.JLabel();
jSpinner_SilenceDuration = new javax.swing.JSpinner();
jLabel_SilenceDurationBeforeRecUnits = new javax.swing.JLabel();
jPanel_DisplayOptions = new javax.swing.JPanel();
jCheckBox_SystemLookAndFeel = new javax.swing.JCheckBox();
jCheckBox_ShowTestOutput = new javax.swing.JCheckBox();
jCheckBox_ShowTranscription = new javax.swing.JCheckBox();
jCheckBox_ShowPromptCount = new javax.swing.JCheckBox();
jCheckBox_RedAlertMode = new javax.swing.JCheckBox();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Redstart - Options");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
public void windowActivated(java.awt.event.WindowEvent evt) {
formWindowActivated(evt);
}
});
jButton_SaveOptions.setIcon(new javax.swing.ImageIcon(getClass().getResource("/marytts/tools/redstart/ok_16x16.png")));
jButton_SaveOptions.setText("Save");
jButton_SaveOptions.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton_SaveOptionsActionPerformed(evt);
}
});
jButton_CancelOptions.setIcon(new javax.swing.ImageIcon(getClass()
.getResource("/marytts/tools/redstart/cancel_16x16.png")));
jButton_CancelOptions.setText("Cancel");
jButton_CancelOptions.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton_CancelOptionsActionPerformed(evt);
}
});
jTabbedPane_Options.setBackground(javax.swing.UIManager.getDefaults().getColor("TabbedPane.highlight"));
jPanel_AudioOptions.setBackground(javax.swing.UIManager.getDefaults().getColor("TabbedPane.highlight"));
jLabel_AudioMixer.setText("Audio source:");
cbAudioSource.setMaximumSize(new java.awt.Dimension(250, 27));
cbAudioSource.setPreferredSize(new java.awt.Dimension(250, 27));
cbAudioSource.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbAudioSourceActionPerformed(evt);
}
});
jButton_Record.setIcon(new javax.swing.ImageIcon(getClass().getResource("/marytts/tools/redstart/recording_16x16.png")));
jButton_Record.setText("Record");
jButton_Record.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
jButton_Record.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
jButton_Record.setMaximumSize(new java.awt.Dimension(95, 25));
jButton_Record.setMinimumSize(new java.awt.Dimension(95, 25));
jButton_Record.setPreferredSize(new java.awt.Dimension(95, 25));
jButton_Record.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton_RecordActionPerformed(evt);
}
});
jButton_Play.setIcon(new javax.swing.ImageIcon(getClass().getResource("/marytts/tools/redstart/playing_16x16.png")));
jButton_Play.setText("Play");
jButton_Play.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
jButton_Play.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
jButton_Play.setMaximumSize(new java.awt.Dimension(95, 25));
jButton_Play.setMinimumSize(new java.awt.Dimension(95, 25));
jButton_Play.setPreferredSize(new java.awt.Dimension(95, 25));
jButton_Play.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton_PlayActionPerformed(evt);
}
});
jLabel_dBMin.setText("-30 dB");
jLabel_dBMax.setText("0 dB");
jLabel_Status.setText("Status:");
jLabel_Message.setText("Ready for testing.");
cbExpertOutput.setMaximumSize(new java.awt.Dimension(250, 27));
cbExpertOutput.setPreferredSize(new java.awt.Dimension(250, 27));
cbExpertOutput.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbExpertOutputActionPerformed(evt);
}
});
cbSpeakerOutput.setMaximumSize(new java.awt.Dimension(250, 27));
cbSpeakerOutput.setPreferredSize(new java.awt.Dimension(250, 27));
cbSpeakerOutput.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbSpeakerOutputActionPerformed(evt);
}
});
jLabel_ExpertOutput.setText("Expert output:");
jLabel_SpeakerOutput.setText("Speaker output:");
cbSamplingRate.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "44100", "48000" }));
cbSamplingRate.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbSamplingRateActionPerformed(evt);
}
});
jLabel1.setText("Hz");
cbBitsPerSample.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "16", "24" }));
jLabel2.setText("bit");
cbMonoStereo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "mono", "stereo", "left only", "right only" }));
cbExpertMonoStereo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "mono", "stereo", "left only",
"right only" }));
jLabel4.setText("bit");
cbExpertBitsPerSample.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "16", "24" }));
cbSpeakerMonoStereo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "mono", "stereo", "left only",
"right only" }));
bDisplay.setText("Display");
bDisplay.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bDisplayActionPerformed(evt);
}
});
jLabel5.setText("bit");
cbSpeakerBitsPerSample.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "16", "24" }));
org.jdesktop.layout.GroupLayout jPanel_AudioOptionsLayout = new org.jdesktop.layout.GroupLayout(jPanel_AudioOptions);
jPanel_AudioOptions.setLayout(jPanel_AudioOptionsLayout);
jPanel_AudioOptionsLayout
.setHorizontalGroup(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel_AudioOptionsLayout
.createSequentialGroup()
.addContainerGap()
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING,
jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(org.jdesktop.layout.GroupLayout.LEADING,
jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(jPanel_AudioOptionsLayout
.createParallelGroup(
org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel_ExpertOutput)
.add(jLabel_SpeakerOutput))
.addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(
org.jdesktop.layout.GroupLayout.LEADING)
.add(jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(jPanel_AudioOptionsLayout
.createParallelGroup(
org.jdesktop.layout.GroupLayout.TRAILING)
.add(jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(24, 24, 24)
.add(jLabel3,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
56,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED,
230,
Short.MAX_VALUE))
.add(jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(cbExpertBitsPerSample,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
54,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel4)
.addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED)))
.add(cbExpertMonoStereo,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
116,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(cbExpertOutput, 0, 426,
Short.MAX_VALUE)
.add(cbSpeakerOutput, 0, 426,
Short.MAX_VALUE)))
.add(jPanel_AudioOptionsLayout
.createSequentialGroup()
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel_AudioMixer)
.add(17, 17, 17)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(
org.jdesktop.layout.GroupLayout.TRAILING)
.add(org.jdesktop.layout.GroupLayout.LEADING,
jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(cbSamplingRate,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
81,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel1)
.addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED,
120, Short.MAX_VALUE)
.add(cbBitsPerSample,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
55,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel2)
.addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED)
.add(cbMonoStereo,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
121,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(org.jdesktop.layout.GroupLayout.LEADING,
cbAudioSource, 0, 426, Short.MAX_VALUE))))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED))
.add(jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel_Status).add(jLabel_dBMin))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING,
jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(cbSpeakerBitsPerSample,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
54,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel5)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(cbSpeakerMonoStereo,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
113,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(org.jdesktop.layout.GroupLayout.TRAILING,
jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(jLabel_Message,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
197,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.add(jButton_Record,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jButton_Play,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(bDisplay))
.add(org.jdesktop.layout.GroupLayout.TRAILING,
jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(jProgressBar_Amplitude,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
440, Short.MAX_VALUE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel_dBMax))))).add(107, 107, 107)));
jPanel_AudioOptionsLayout.setVerticalGroup(jPanel_AudioOptionsLayout.createParallelGroup(
org.jdesktop.layout.GroupLayout.LEADING).add(
jPanel_AudioOptionsLayout
.createSequentialGroup()
.addContainerGap()
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel_AudioMixer)
.add(cbAudioSource, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(cbSamplingRate, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel1)
.add(cbMonoStereo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel2)
.add(cbBitsPerSample, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel_ExpertOutput)
.add(cbExpertOutput, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel3)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(cbExpertMonoStereo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel4)
.add(cbExpertBitsPerSample, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel_SpeakerOutput)
.add(cbSpeakerOutput, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(6, 6, 6)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(jLabel_dBMin)
.add(jPanel_AudioOptionsLayout
.createSequentialGroup()
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(cbSpeakerMonoStereo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel5)
.add(cbSpeakerBitsPerSample, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(jLabel_dBMax)
.add(jProgressBar_Amplitude, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_AudioOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel_Status)
.add(bDisplay)
.add(jButton_Play, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jButton_Record, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(jLabel_Message)).addContainerGap()));
jTabbedPane_Options.addTab("Audio", jPanel_AudioOptions);
jPanel_TimingOptions.setBackground(javax.swing.UIManager.getDefaults().getColor("TabbedPane.highlight"));
jLabel_BufferAdded.setText("Buffer added to recording time:");
jLabel_PauseBufferAddedUnits.setText("ms");
jLabel_PauseBetweenrecUnits.setText("ms");
jLabel_TimePerChar.setText("Recording time per character:");
jLabel_PauseAfterSynth.setText("Pause duration after synthesized playback:");
jLabel_PauseAfterSynthUnits.setText("ms");
jLabel_SilenceDuration.setText("Silence duration before recording:");
jLabel_SilenceDurationBeforeRecUnits.setText("ms");
org.jdesktop.layout.GroupLayout jPanel_TimingOptionsLayout = new org.jdesktop.layout.GroupLayout(jPanel_TimingOptions);
jPanel_TimingOptions.setLayout(jPanel_TimingOptionsLayout);
jPanel_TimingOptionsLayout.setHorizontalGroup(jPanel_TimingOptionsLayout.createParallelGroup(
org.jdesktop.layout.GroupLayout.LEADING).add(
org.jdesktop.layout.GroupLayout.TRAILING,
jPanel_TimingOptionsLayout
.createSequentialGroup()
.addContainerGap()
.add(jPanel_TimingOptionsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel_BufferAdded).add(jLabel_TimePerChar).add(jLabel_PauseAfterSynth)
.add(jLabel_SilenceDuration))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 91, Short.MAX_VALUE)
.add(jPanel_TimingOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jSpinner_BufferAdded, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 61,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jSpinner_TimePerChar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 61,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jSpinner_PauseAfterSynth, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 61,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jSpinner_SilenceDuration, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 61,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_TimingOptionsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel_PauseBufferAddedUnits).add(jLabel_PauseBetweenrecUnits)
.add(jLabel_PauseAfterSynthUnits).add(jLabel_SilenceDurationBeforeRecUnits)).add(90, 90, 90)));
jPanel_TimingOptionsLayout.setVerticalGroup(jPanel_TimingOptionsLayout.createParallelGroup(
org.jdesktop.layout.GroupLayout.LEADING).add(
jPanel_TimingOptionsLayout
.createSequentialGroup()
.addContainerGap()
.add(jPanel_TimingOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel_BufferAdded)
.add(jLabel_PauseBufferAddedUnits, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(jSpinner_BufferAdded, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 20, Short.MAX_VALUE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_TimingOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel_TimePerChar)
.add(jLabel_PauseBetweenrecUnits, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 14,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(jSpinner_TimePerChar))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_TimingOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel_PauseAfterSynth)
.add(jLabel_PauseAfterSynthUnits)
.add(jSpinner_PauseAfterSynth, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPanel_TimingOptionsLayout
.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jSpinner_SilenceDuration, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(jLabel_SilenceDuration)
.add(jLabel_SilenceDurationBeforeRecUnits)).add(141, 141, 141)));
jTabbedPane_Options.addTab("Timing", jPanel_TimingOptions);
jPanel_DisplayOptions.setBackground(javax.swing.UIManager.getDefaults().getColor("TabbedPane.highlight"));
jCheckBox_SystemLookAndFeel.setBackground(javax.swing.UIManager.getDefaults().getColor("TabbedPane.highlight"));
jCheckBox_SystemLookAndFeel.setText("Use system look and feel (requires tool restart)");
jCheckBox_SystemLookAndFeel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
jCheckBox_SystemLookAndFeel.setMargin(new java.awt.Insets(0, 0, 0, 0));
jCheckBox_SystemLookAndFeel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBox_SystemLookAndFeelActionPerformed(evt);
}
});
jCheckBox_ShowTestOutput.setBackground(javax.swing.UIManager.getDefaults().getColor("TabbedPane.highlight"));
jCheckBox_ShowTestOutput.setText("Display test output in console");
jCheckBox_ShowTestOutput.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
jCheckBox_ShowTestOutput.setMargin(new java.awt.Insets(0, 0, 0, 0));
jCheckBox_ShowTestOutput.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBox_ShowTestOutputActionPerformed(evt);
}
});
jCheckBox_ShowTranscription.setBackground(javax.swing.UIManager.getDefaults().getColor("TabbedPane.highlight"));
jCheckBox_ShowTranscription.setText("Show transcription");
jCheckBox_ShowTranscription.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
jCheckBox_ShowTranscription.setMargin(new java.awt.Insets(0, 0, 0, 0));
jCheckBox_ShowTranscription.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBox_ShowTranscriptionActionPerformed(evt);
}
});
jCheckBox_ShowPromptCount.setBackground(javax.swing.UIManager.getDefaults().getColor("TabbedPane.highlight"));
jCheckBox_ShowPromptCount.setText("Show prompt count and progress bar in Speaker Window");
jCheckBox_ShowPromptCount.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
jCheckBox_ShowPromptCount.setMargin(new java.awt.Insets(0, 0, 0, 0));
jCheckBox_ShowPromptCount.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBox_ShowPromptCountActionPerformed(evt);
}
});
jCheckBox_RedAlertMode.setBackground(javax.swing.UIManager.getDefaults().getColor("TabbedPane.highlight"));
jCheckBox_RedAlertMode.setText("Red alert mode");
jCheckBox_RedAlertMode.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
jCheckBox_RedAlertMode.setMargin(new java.awt.Insets(0, 0, 0, 0));
jCheckBox_RedAlertMode.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBox_RedAlertModeActionPerformed(evt);
}
});
org.jdesktop.layout.GroupLayout jPanel_DisplayOptionsLayout = new org.jdesktop.layout.GroupLayout(jPanel_DisplayOptions);
jPanel_DisplayOptions.setLayout(jPanel_DisplayOptionsLayout);
jPanel_DisplayOptionsLayout.setHorizontalGroup(jPanel_DisplayOptionsLayout.createParallelGroup(
org.jdesktop.layout.GroupLayout.LEADING).add(
jPanel_DisplayOptionsLayout
.createSequentialGroup()
.addContainerGap()
.add(jPanel_DisplayOptionsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jCheckBox_SystemLookAndFeel).add(jCheckBox_ShowTestOutput).add(jCheckBox_ShowTranscription)
.add(jCheckBox_ShowPromptCount).add(jCheckBox_RedAlertMode))
.addContainerGap(162, Short.MAX_VALUE)));
jPanel_DisplayOptionsLayout.setVerticalGroup(jPanel_DisplayOptionsLayout.createParallelGroup(
org.jdesktop.layout.GroupLayout.LEADING).add(
jPanel_DisplayOptionsLayout.createSequentialGroup().addContainerGap().add(jCheckBox_SystemLookAndFeel)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(jCheckBox_ShowTestOutput)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(jCheckBox_ShowTranscription)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(jCheckBox_ShowPromptCount)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(jCheckBox_RedAlertMode)
.addContainerGap(207, Short.MAX_VALUE)));
jTabbedPane_Options.addTab("Display", jPanel_DisplayOptions);
jTabbedPane_Options.getAccessibleContext().setAccessibleName("Timing");
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
layout.createSequentialGroup()
.addContainerGap()
.add(layout
.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(org.jdesktop.layout.GroupLayout.LEADING,
layout.createSequentialGroup().add(jButton_SaveOptions)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jButton_CancelOptions))
.add(org.jdesktop.layout.GroupLayout.LEADING, jTabbedPane_Options,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 581,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)).addContainerGap(13, Short.MAX_VALUE)));
layout.linkSize(new java.awt.Component[] { jButton_CancelOptions, jButton_SaveOptions },
org.jdesktop.layout.GroupLayout.HORIZONTAL);
layout.setVerticalGroup(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
layout.createSequentialGroup()
.addContainerGap()
.add(jTabbedPane_Options, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 317,
org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE).add(jButton_SaveOptions)
.add(jButton_CancelOptions)).addContainerGap(17, Short.MAX_VALUE)));
pack();
}// </editor-fold>//GEN-END:initComponents
private void bDisplayActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_bDisplayActionPerformed
try {
AudioInputStream audio = AudioSystem.getAudioInputStream(new File(testPlaybackPathString));
if (audio.getFormat().getChannels() > 1) {
audio = new MonoAudioInputStream(audio, getInputMode());
}
MultiDisplay d = new MultiDisplay(audio, "Test recording", false);
} catch (Exception e) {
e.printStackTrace();
}
}// GEN-LAST:event_bDisplayActionPerformed
private void formWindowOpened(java.awt.event.WindowEvent evt) {// GEN-FIRST:event_formWindowOpened
this.read(); // Load options from resource path
}// GEN-LAST:event_formWindowOpened
private void cbSamplingRateActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_cbSamplingRateActionPerformed
}// GEN-LAST:event_cbSamplingRateActionPerformed
private void cbSpeakerOutputActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_cbSpeakerOutputActionPerformed
}// GEN-LAST:event_cbSpeakerOutputActionPerformed
private void cbExpertOutputActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_cbExpertOutputActionPerformed
}// GEN-LAST:event_cbExpertOutputActionPerformed
private void jCheckBox_ShowTranscriptionActionPerformed(java.awt.event.ActionEvent evt) {
adminWindow.setShowTranscription(jCheckBox_ShowTranscription.isSelected());
}
private void jCheckBox_ShowPromptCountActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jCheckBox_ShowPromptCountActionPerformed
}// GEN-LAST:event_jCheckBox_ShowPromptCountActionPerformed
private void jCheckBox_RedAlertModeActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jCheckBox_RedAlertModeActionPerformed
adminWindow.setRedAlertMode(jCheckBox_RedAlertMode.isSelected());
}// GEN-LAST:event_jCheckBox_RedAlertModeActionPerformed
private void jButton_PlayActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jButton_PlayActionPerformed
if (this.playingStatus) {
stopPlayback(); // Stop playback if underway
this.stopPressed = true;
toggleStopToRecord(); // Needed if Play/Stop is pressed during continuous record mode
this.jButton_Record.setEnabled(true);
toggleStopToPlay();
}
// Otherwise play the recording
else {
togglePlayToStop();
new Thread() {
public void run() {
playRecording();
}
}.start();
}
}// GEN-LAST:event_jButton_PlayActionPerformed
private void jButton_RecordActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jButton_RecordActionPerformed
if (this.playingStatus) {
stopRecord(); // Stop recording if underway
this.stopPressed = true;
this.playingStatus = false; // PRI3 Can we combine these two flags or is stopPressed needed for setupRecording()?
toggleStopToRecord();
toggleStopToPlay();
// Disable Record button so that user can't press it while waiting to stop
this.jButton_Record.setEnabled(false);
// Re-enabled at end of manageRecording();
// Temporary solution until method implemented to stop actual recording
String message = "Please wait for mic to close...";
showMessage(message);
}
// Otherwise make the recording
else {
// Don't toggle yet if playing synthesized prompt first
new Thread() {
public void run() {
makeRecording();
}
}.start();
Test.output("Dispatched setup recording");
}
}// GEN-LAST:event_jButton_RecordActionPerformed
private void jCheckBox_ShowTestOutputActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jCheckBox_ShowTestOutputActionPerformed
this.printTestOutput = !this.printTestOutput; // Toggle setting
Test.setDebugMode(this.printTestOutput); // PRI3 Consolidate these fields
}// GEN-LAST:event_jCheckBox_ShowTestOutputActionPerformed
private void jCheckBox_SystemLookAndFeelActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jCheckBox_SystemLookAndFeelActionPerformed
this.systemLookAndFeel = !this.systemLookAndFeel; // Toggle setting
}// GEN-LAST:event_jCheckBox_SystemLookAndFeelActionPerformed
private void cbAudioSourceActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_cbAudioSourceActionPerformed
}// GEN-LAST:event_cbAudioSourceActionPerformed
/**
* Populate the spin controls with values loaded from the options properties file
*
* @param evt
* A window event
*/
private void formWindowActivated(java.awt.event.WindowEvent evt) {// GEN-FIRST:event_formWindowActivated
}// GEN-LAST:event_formWindowActivated
/**
* Closes Options dialog without saving changes
*
* @param evt
* An action event
**/
private void jButton_CancelOptionsActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jButton_CancelOptionsActionPerformed
// Close dialog without saving changes
this.read(); // Re-instate option values prior to any changes made
this.setVisible(false);
this.dispose();
}// GEN-LAST:event_jButton_CancelOptionsActionPerformed
/**
* Writes options to a properties file
*
* @param evt
* An action event
**/
private void jButton_SaveOptionsActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jButton_SaveOptionsActionPerformed
write(); // Save options to user.options file
// Hide or show prompt count in Speaker Window, accordingly
adminWindow.getSpeakerWindow().setShowPromptCount(getShowPromptCount());
// Hide Options dialog
this.setVisible(false);
}// GEN-LAST:event_jButton_SaveOptionsActionPerformed
private void loadOptionValues() {
// Use read() to fill the pause duration instance fields
this.read();
// TESTCODE
Test.output("|Options.loadOptionValues()| Buffer To Add: " + this.bufferToAdd);
Test.output("|Options.loadOptionValues()| Pause After Synthesis: " + this.pauseAfterSynth);
Test.output("|Options.loadOptionValues()| Time per Character: " + this.timePerChar);
Test.output("|Options.loadOptionValues()| Silence Duration Before Recording: " + this.silenceDuration);
}
public String getOptionsPathString() {
return optionsPathString;
}
private void stopRecord() {
// PRI3
// Stop recording (not yet implemented)
}
private void toggleStopToRecord() {
jButton_Record.setEnabled(true);
jButton_Record.setText("Record");
jButton_Record.setIcon(IconSet.REC_16X16);
this.playingStatus = false;
}
private void toggleStopToPlay() {
jButton_Play.setText("Play");
jButton_Play.setIcon(IconSet.PLAY_16X16);
this.playingStatus = false;
}
private void showMessage(String message) {
jLabel_Message.setText(message);
}
private void makeRecording() {
// Disable the Play/Stop button so that user can't accidentally begin playing the file we're overwriting
this.jButton_Play.setEnabled(false);
// Update button text (change from "Record" to "Stop")
toggleRecordToStop();
try {
// Play beep to indicate microphone is open
playOpenBeep();
String message = "Recording...";
showMessage(message);
// Get the recording
int micOpenTime = 3000;
testRecording.timedRecord(getTargetDataLine(), getInlineFilter(), micOpenTime);
playClosedBeep(); // Mic closed
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(this, ex.toString());
String message = "Recording error. See console for details.";
showMessage(message);
}
// Determine whether recording involved amplitude clipping (saturated)
testRecording.checkForAmpClipping();
testRecording.checkForTempClipping();
// Re-enable the Play/Stop button
this.jButton_Play.setEnabled(true);
// Update button text (change from "Stop" to "Record")
toggleStopToRecord();
// Check for amplitude clipping
checkAmpClipping(testRecording);
}
private void togglePlayToStop() {
jButton_Play.setText("Stop");
jButton_Play.setIcon(IconSet.STOP_16X16);
this.playingStatus = true;
}
private void stopPlayback() {
Speech.stopPlaying(); // Immediately stop any playback
stopPressed = true;
}
private void playRecording() {
// Disable the Record/Stop button so that user can't accidentally begin a recording
this.jButton_Record.setEnabled(false);
// Now play the test file
SourceDataLine expertOutput = getExpertOutputLine();
Speech.play(testPlaybackPathString, expertOutput, getExpertOutputMode());
toggleStopToPlay(); // Update button text (change from "Stop" to "Play")
this.jButton_Record.setEnabled(true); // Re-enable the Record/Stop button
}
long getSilenceDuration() {
return this.silenceDuration.intValue();
}
private void toggleRecordToStop() {
jButton_Record.setText("Stop");
jButton_Record.setIcon(IconSet.STOP_16X16);
this.playingStatus = true;
}
private void checkAmpClipping(Recording testRecording) {
String message;
testRecording.checkForAmpClipping();
int db = (int) testRecording.getPeakAmplitude();
// Determine colour of bar in amplitude meter
Color barColor = Color.GREEN; // Set to default (green)
// If amplitude clipping occurred, then bar colour is red
if (testRecording.isAmpClipped) {
barColor = Color.RED;
message = "Amplitude clipping detected: " + db + " dB";
}
// Otherwise if within the warning threshold, bar colour is yellow
else if (testRecording.isAmpWarning) {
barColor = Color.YELLOW;
message = "Near clipping threshold: " + db + " dB";
} else {
// Else the bar remains green
message = "No clipping detected:" + db + " dB";
}
// Display results of check for amplitude clipping
this.jProgressBar_Amplitude.setForeground(barColor); // PRI2 Doesn't seem to have any effect
this.jProgressBar_Amplitude.setValue(db);
// Update the message bar with the appropriate message
this.showMessage(message);
}
private void populateAudioCombo() {
Mixer.Info[] mixerInfos = AudioSystem.getMixerInfo();
// audio input:
cbAudioSource.addItem("AudioSystem");
for (int i = 0; i < mixerInfos.length; i++) {
Mixer mixer = AudioSystem.getMixer(mixerInfos[i]);
boolean hasTargetLine = false;
Line.Info[] lines = mixer.getTargetLineInfo();
for (int j = 0; j < lines.length; j++) {
if (lines[j] instanceof DataLine.Info) {
hasTargetLine = true;
break;
}
}
if (hasTargetLine)
cbAudioSource.addItem(mixerInfos[i]);
}
// Speaker and expert audio output:
for (int i = 0; i < mixerInfos.length; i++) {
Mixer mixer = AudioSystem.getMixer(mixerInfos[i]);
boolean hasSourceLine = false;
Line.Info[] lines = mixer.getSourceLineInfo();
for (int j = 0; j < lines.length; j++) {
if (lines[j] instanceof DataLine.Info) {
hasSourceLine = true;
break;
}
}
if (hasSourceLine) {
cbExpertOutput.addItem(mixerInfos[i]);
cbSpeakerOutput.addItem(mixerInfos[i]);
}
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton bDisplay;
private javax.swing.JComboBox cbAudioSource;
private javax.swing.JComboBox cbBitsPerSample;
private javax.swing.JComboBox cbExpertBitsPerSample;
private javax.swing.JComboBox cbExpertMonoStereo;
private javax.swing.JComboBox cbExpertOutput;
private javax.swing.JComboBox cbMonoStereo;
private javax.swing.JComboBox cbSamplingRate;
private javax.swing.JComboBox cbSpeakerBitsPerSample;
private javax.swing.JComboBox cbSpeakerMonoStereo;
private javax.swing.JComboBox cbSpeakerOutput;
private javax.swing.JButton jButton_CancelOptions;
private javax.swing.JButton jButton_Play;
private javax.swing.JButton jButton_Record;
private javax.swing.JButton jButton_SaveOptions;
private javax.swing.JCheckBox jCheckBox_ShowPromptCount;
private javax.swing.JCheckBox jCheckBox_RedAlertMode;
private javax.swing.JCheckBox jCheckBox_ShowTestOutput;
private javax.swing.JCheckBox jCheckBox_ShowTranscription;
private javax.swing.JCheckBox jCheckBox_SystemLookAndFeel;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel_AudioMixer;
private javax.swing.JLabel jLabel_BufferAdded;
private javax.swing.JLabel jLabel_ExpertOutput;
private javax.swing.JLabel jLabel_Message;
private javax.swing.JLabel jLabel_PauseAfterSynth;
private javax.swing.JLabel jLabel_PauseAfterSynthUnits;
private javax.swing.JLabel jLabel_PauseBetweenrecUnits;
private javax.swing.JLabel jLabel_PauseBufferAddedUnits;
private javax.swing.JLabel jLabel_SilenceDuration;
private javax.swing.JLabel jLabel_SilenceDurationBeforeRecUnits;
private javax.swing.JLabel jLabel_SpeakerOutput;
private javax.swing.JLabel jLabel_Status;
private javax.swing.JLabel jLabel_TimePerChar;
private javax.swing.JLabel jLabel_dBMax;
private javax.swing.JLabel jLabel_dBMin;
private javax.swing.JPanel jPanel_AudioOptions;
private javax.swing.JPanel jPanel_DisplayOptions;
private javax.swing.JPanel jPanel_TimingOptions;
private javax.swing.JProgressBar jProgressBar_Amplitude;
private javax.swing.JSpinner jSpinner_BufferAdded;
private javax.swing.JSpinner jSpinner_PauseAfterSynth;
private javax.swing.JSpinner jSpinner_SilenceDuration;
private javax.swing.JSpinner jSpinner_TimePerChar;
private javax.swing.JTabbedPane jTabbedPane_Options;
// End of variables declaration//GEN-END:variables
}