package com.tlabs.labeltool.gui;
import javax.sound.sampled.AudioFormat;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.text.DateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.event.*;
import com.felix.util.AudioUtil;
import com.felix.util.FileUtil;
import com.felix.util.KeyValues;
import com.felix.util.NumberToWord;
import com.felix.util.StringUtil;
import com.felix.util.SwingUtil;
import com.felix.util.Util;
import com.tlabs.labeltool.Analyser;
import com.tlabs.labeltool.ClassificationResult;
import com.tlabs.labeltool.Constants;
import com.tlabs.labeltool.Dialog;
import com.tlabs.labeltool.EvaluateThread;
import com.tlabs.labeltool.GetAnswerThread;
import com.tlabs.labeltool.IRecorder;
import com.tlabs.labeltool.InterfaceServer;
import com.tlabs.labeltool.JudgeThread;
import com.tlabs.labeltool.PlayThread;
import com.tlabs.labeltool.RecognitionThread;
import com.tlabs.labeltool.RecordThread;
import com.tlabs.labeltool.Recording;
import com.tlabs.labeltool.RecordingTable;
import com.tlabs.labeltool.ResetThread;
import com.tlabs.labeltool.SendMessageThread;
import com.tlabs.labeltool.SendTranscriptionThread;
import com.tlabs.labeltool.SetFileEmotionThread;
import com.tlabs.labeltool.UndoThread;
import com.tlabs.labeltool.ClassificationResult.ClassResult;
/**
* The main class for the webrecorder-client. Usable as an applet or
* application. Every communication with the server is implemented as a thread,
* so that the window won't freeze if the connection takes time.
*
* @version 1.0
* @author Felix Burkhardt
*/
public class Recorder extends JApplet implements ActionListener, IRecorder {
private static final long serialVersionUID = 1L;
private RecordThread recThread;
private JudgeThread judgeThread;
private UpdateFileListThread updateThread;
private UndoThread undoThread;
private PlayThread playThread;
private InterfaceServer interfaceServer;
private int lastBytesPlayed = 0;
private JLabel neutralLab, haLab, configlabel, emoConfigLabel;
private JPanel pane;
private JSlider wavPositionSlider;
boolean showTranscript = true;
private String servername, _audioType;
private RecordingsTableModel recordings;
protected JTable _table;
private int selectedRow;
private int tableheight;
private int _samplerate;
private JTextArea transField;
private HashMap<String, String> _charReplacements, _classes, _abbreviations, _prefixes;
private JButton _record, _play, _stop, _refresh, _exec, _open, _resume,
_judge, _train, judgeAll, _delete, statistics, _transcribe,
evaluate, recognize, recognizeAll, removeUntagged, delAllPreds,
toggleTranscript, copyRecognition, _synthesize, _synthesizeAll,
_normalize, _normalizeAll, _wer, _export, _import, setNA,
removeLastLabel, removePred, _rename;
private JCheckBox fastModeCheck, fastPlayModeCheck, extractFeaturesCheck,
numberToWordCheck, _openDirectory, _openModel, _evalFiles,
_checkSpelling, _ttsSexFemale;
private JLabel fastModeLabel, fastPlayModeLabel, extractFeaturesLabel,
numberToWordLabel, _titleLabel;
private AudioFormat _formatPCM;
private JSpinner _classifierSpinner, _srSpinner, _afSpinner, _ttsLanguages;
private String _dataDescription = "";
private boolean numberToWord = false;
private String _fileDir = "";
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#init()
*/
public void init() {
try {
try {
servername = getParameter("url");
_samplerate = Integer.parseInt(getParameter("sampleRate"));
_formatPCM = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
_samplerate, 16, 1, 2, _samplerate, false);
numberToWord = Boolean
.parseBoolean(getParameter("numberToWord"));
} catch (Exception e) {
System.err.println("Kein URL Parameter");
}
try {
tableheight = Integer.parseInt(getParameter("tableheight"));
} catch (Exception e) {
tableheight = 300;
}
getContentPane().add(makeContentPane());
interfaceServer = new InterfaceServer(servername, Integer
.parseInt(getParameter("port")));
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* designs the main drawing area as a combination nof three panes: <br>
* header pane - for the logo <br>
* table pane - to show the recordings in a table <br>
* button pane - for the buttons.
*
* @return The main pane
*/
public Container makeContentPane() {
pane = new JPanel();
pane.add(makeHeaderPane());
pane.add(makeTablePane());
pane.add(makeRecorderButtonPane());
pane.add(makeControlButtonPane());
if (!Boolean.parseBoolean(getParameter("transcribeOnly"))) {
pane.add(makeJudgeButtonPane());
}
if (Boolean.parseBoolean(getParameter("withTranscribe"))) {
pane.add(makeTranscriptionPane());
}
if (Boolean.parseBoolean(getParameter("classification"))) {
pane.add(makeResultPane());
}
if (Boolean.parseBoolean(getParameter("withRecognizer"))) {
pane.add(makeRecognitionPane());
}
if (Boolean.parseBoolean(getParameter("withSynthesizer"))) {
pane.add(makeSynthesizerPane());
}
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
return (pane);
}
public void repaintView() {
System.out.println("refreshing view, recordings no: "
+ recordings.getRowCount());
this.setNrOfRecordings();
// if (recordings.getRowCount()>0) {
lastSelectedRow = 0;
setFocusTable();
// }
//
// this.recordings.fireTableDataChanged();
// this.repaint();
}
/**
* Designs the header pane showing a centered logo. Expects an image called
* "webRecorderLogo.gif" in the html directory.
*
* @return The header pane.
*/
public Container makeHeaderPane() {
_titleLabel = new JLabel(Constants.title + ", version: "
+ Constants.version, JLabel.CENTER);
JPanel pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));
pane.setPreferredSize(new Dimension(600, 50));
pane.add(_titleLabel);
return pane;
}
public void setServerVersion(String version) {
_titleLabel = new JLabel(Constants.title + ", version: "
+ Constants.version + " (server version: " + version + ")");
// @todo: doesn't work
}
/**
* Designs the pane to Vshow the result from emotion-judgement.
*
* @return The pane.
*/
JLabel emoResultNeutralLab;
JProgressBar emoResultNeutralPG;
JLabel emoResultColdAngerLab;
JProgressBar emoResultColdAngerPG;
JLabel emoResultHotAngerLab;
JTextArea _nrOfRecordingsLab;
JProgressBar emoResultHotAngerPG;
int lastSelectedRow = 0;
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#setNrOfRecordings()
*/
public void setNrOfRecordings() {
_nrOfRecordingsLab.setText("no. of recordings: "
+ recordings.getRowCount());
}
public boolean showTranscript() {
return showTranscript;
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#analyse()
*/
public void analyse() {
_nrOfRecordingsLab.setText(_dataDescription);
}
public Container makeResultPane() {
neutralLab = new JLabel(getParameter("noAnger.label"));
haLab = new JLabel(getParameter("anger.label"));
emoResultNeutralLab = new JLabel("");
emoResultNeutralPG = new JProgressBar(0, 100);
emoResultNeutralPG.setForeground(Color.green);
emoResultColdAngerLab = new JLabel("");
emoResultColdAngerPG = new JProgressBar(0, 100);
emoResultColdAngerPG.setForeground(Color.red);
emoResultHotAngerLab = new JLabel("");
emoResultHotAngerPG = new JProgressBar(0, 100);
emoResultHotAngerPG.setForeground(Color.red);
JPanel pane = new JPanel();
pane.setBackground(new Color(210, 210, 210));
pane.setBorder(BorderFactory.createMatteBorder(1, 1, 2, 2, Color.CYAN));
pane.add(neutralLab);
pane.add(emoResultNeutralLab);
pane.add(emoResultNeutralPG);
pane.add(haLab);
pane.add(emoResultHotAngerLab);
pane.add(emoResultHotAngerPG);
configlabel = new JLabel("Konfiguration: ");
emoConfigLabel = new JLabel("");
pane.add(configlabel);
pane.add(emoConfigLabel);
return pane;
}
/**
* Designs a pane to draw the table with recordings. The behaviour of the
* table depends on its tablemodel.
*
* @return The table pane.
*/
public Container makeTablePane() {
recordings = new RecordingsTableModel(this, Boolean
.parseBoolean(getParameter("classification")), Boolean
.parseBoolean(getParameter("audioFormatAlaw")));
_table = new JTable(recordings);
_table.setPreferredScrollableViewportSize(new Dimension(400,
tableheight));
TableColumn col = null;
_table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
_table.getColumnModel().getColumn(0).setPreferredWidth(2);
_table.getColumnModel().getColumn(1).setPreferredWidth(50);
_table.getColumnModel().getColumn(2).setPreferredWidth(100);
_table.getColumnModel().getColumn(3).setPreferredWidth(5);
_table.getColumnModel().getColumn(4).setPreferredWidth(100);
_table.getColumnModel().getColumn(5).setPreferredWidth(5);
if (Boolean.parseBoolean(getParameter("classification"))) {
_table.getColumnModel().getColumn(6).setPreferredWidth(5);
}
JPanel pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
_nrOfRecordingsLab = new JTextArea();
JScrollPane scrollPane = new JScrollPane(_table);
if (Boolean.parseBoolean(getParameter("markAngerInTable"))) {
TableCellRenderer customRenderer = new CustomTableCellRenderer();
try {
_table.setDefaultRenderer(Class.forName("java.lang.String"),
customRenderer);
} catch (Exception e) {
e.printStackTrace();
}
}
pane.add(scrollPane);
pane.add(_nrOfRecordingsLab);
wavPositionSlider = new JSlider(JSlider.HORIZONTAL, 0, 1000, 0);
wavPositionSlider.setMajorTickSpacing(200);
wavPositionSlider.setMinorTickSpacing(20);
wavPositionSlider.setEnabled(false);
wavPositionSlider.setBackground(new Color(150, 150, 150));
pane.add(wavPositionSlider);
return pane;
}
public String getDataDescription() {
return _dataDescription;
}
public void setDataDescription(String dataDescription) {
_dataDescription = dataDescription;
}
/**
* Designs the pane for the buttons as a horizontal row. Sets keyboard
* shortcuts and tooltips.
*
* @return pane The button pane.
*/
public Container makeRecorderButtonPane() {
Color recorderButtonsBGColor = Color.BLACK;
/**
* For each Feature: create a new button with the appropriate label.
* Generate a keyboard shortcut: <alt><mnemonic key>. Set a tool-tip
* text. Set an action listener.
*/
_record = initButton("record");
_record.setIcon(new ImageIcon(Recorder.class
.getResource("images/record.gif")));
_record.setBackground(recorderButtonsBGColor);
// sets keyboard alternative
_play = initButton("play");
_play.setIcon(new ImageIcon(Recorder.class
.getResource("images/play.gif")));
_play.setBackground(recorderButtonsBGColor);
_stop = initButton("stop");
_stop.setIcon(new ImageIcon(Recorder.class
.getResource("images/stop.gif")));
_stop.setBackground(recorderButtonsBGColor);
_resume = initButton("resume");
_resume.setIcon(new ImageIcon(Recorder.class
.getResource("images/resume.gif")));
_resume.setBackground(recorderButtonsBGColor);
_delete = initButton("delete");
_delete.setMnemonic(getParameter("delete.short").charAt(0));
_delete.setIcon(new ImageIcon(Recorder.class
.getResource("images/delete.gif")));
_delete.setBackground(recorderButtonsBGColor);
_rename = initButton("rename");
_rename.setMnemonic(getParameter("rename.short").charAt(0));
_rename.setIcon(new ImageIcon(Recorder.class
.getResource("images/rename.gif")));
_rename.setBackground(recorderButtonsBGColor);
_refresh = initButton("refresh");
_refresh.setIcon(new ImageIcon(Recorder.class
.getResource("images/refresh.gif")));
_refresh.setBackground(recorderButtonsBGColor);
_exec = initButton("exec");
_exec.setIcon(new ImageIcon(Recorder.class
.getResource("images/exec.gif")));
_exec.setBackground(recorderButtonsBGColor);
_open = initButton("open");
_open.setIcon(new ImageIcon(Recorder.class
.getResource("images/open.gif")));
_open.setBackground(recorderButtonsBGColor);
_openDirectory = new JCheckBox();
_openDirectory.setToolTipText(getParameter("openDirectory.tooltip"));
JLabel openDirectoryL = new JLabel(getParameter("openDirectory.label"));
openDirectoryL.setToolTipText(getParameter("openDirectory.tooltip"));
openDirectoryL.setForeground(Color.white);
String[] srArray = StringUtil
.stringToArray(getParameter("sampleRate.values"));
SpinnerListModel srModel = new SpinnerListModel(srArray);
srModel.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
changeSampleRate((String) _srSpinner.getValue());
}
});
_srSpinner = new JSpinner(srModel);
_srSpinner.setValue(String.valueOf(_samplerate));
_srSpinner.setPreferredSize(new Dimension(60, 20));
String[] afArray = StringUtil
.stringToArray(getParameter("audioFormat.values"));
SpinnerListModel afModel = new SpinnerListModel(afArray);
afModel.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
changeAudioFormat((String) _afSpinner.getValue());
}
});
_afSpinner = new JSpinner(afModel);
_afSpinner.setPreferredSize(new Dimension(45, 20));
_audioType = (String) _afSpinner.getValue();
JPanel pane = new JPanel();
pane.setBackground(new Color(80, 80, 80));
pane.setBorder(BorderFactory.createMatteBorder(1, 1, 2, 2, Color.blue));
if (!Boolean.parseBoolean(getParameter("transcribeOnly"))) {
pane.add(_record);
}
pane.add(_play);
pane.add(_stop);
if (!Boolean.parseBoolean(getParameter("transcribeOnly"))) {
pane.add(_delete);
pane.add(_rename);
}
pane.add(_refresh);
pane.add(_exec);
pane.add(_open);
pane.add(openDirectoryL);
pane.add(_openDirectory);
_openModel = new JCheckBox();
if (Boolean.parseBoolean(getParameter("classification"))) {
_openModel.setToolTipText(getParameter("openModel.tooltip"));
JLabel openModelL = new JLabel(getParameter("openModel.label"));
openModelL.setToolTipText(getParameter("openModel.tooltip"));
openModelL.setForeground(Color.white);
pane.add(openModelL);
pane.add(_openModel);
}
JLabel srLab = new JLabel(getParameter("sampleRate.label"));
srLab.setForeground(Color.white);
pane.add(srLab);
pane.add(_srSpinner);
JLabel afLab = new JLabel(getParameter("audioFormat.label"));
afLab.setForeground(Color.white);
pane.add(afLab);
pane.add(_afSpinner);
pane.setBackground(new Color(150, 150, 150));
pane
.setBorder(BorderFactory.createMatteBorder(1, 1, 2, 2,
Color.black));
_record.setEnabled(true);
_delete.setEnabled(false);
_play.setEnabled(false);
return pane;
}
public Container makeControlButtonPane() {
JPanel pane = new JPanel();
_judge = initButton("judge");
_train = initButton("train");
judgeAll = initButton("judgeAll");
evaluate = initButton("evaluate");
delAllPreds = initButton("deleteAllPredictions");
if (Boolean.parseBoolean(getParameter("classification"))) {
pane.add(_judge);
pane.add(_train);
pane.add(judgeAll);
pane.add(delAllPreds);
pane.add(evaluate);
_evalFiles = new JCheckBox();
_evalFiles.setToolTipText(getParameter("evalFiles.tooltip"));
JLabel evalFilesLabel = new JLabel(getParameter("evalFiles.label"));
evalFilesLabel.setForeground(Color.white);
evalFilesLabel.setToolTipText(getParameter("evalFiles.tooltip"));
pane.add(evalFilesLabel);
pane.add(_evalFiles);
}
pane.setBackground(new Color(150, 150, 150));
pane
.setBorder(BorderFactory.createMatteBorder(1, 1, 2, 2,
Color.black));
fastModeCheck = new JCheckBox();
fastModeCheck
.setToolTipText(getParameter("fastTranscritpionMode.tooltip"));
fastModeLabel = new JLabel(getParameter("fastTranscritpionMode.label"));
fastModeLabel
.setToolTipText(getParameter("fastTranscritpionMode.tooltip"));
fastModeLabel.setForeground(Color.white);
fastPlayModeCheck = new JCheckBox();
fastPlayModeCheck.setToolTipText(getParameter("fastPlayMode.tooltip"));
fastPlayModeLabel = new JLabel(getParameter("fastPlayMode.label"));
fastPlayModeLabel.setToolTipText(getParameter("fastPlayMode.tooltip"));
fastPlayModeLabel.setForeground(Color.white);
numberToWordCheck = new JCheckBox();
numberToWordCheck.setToolTipText(getParameter("numberToWord.tooltip"));
numberToWordLabel = new JLabel(getParameter("numberToWord.label"));
numberToWordLabel.setToolTipText(getParameter("numberToWord.tooltip"));
numberToWordLabel.setForeground(Color.white);
if (Boolean.parseBoolean(getParameter("classification"))) {
extractFeaturesCheck = new JCheckBox();
extractFeaturesCheck
.setToolTipText(getParameter("extractFeatures.tooltip"));
extractFeaturesCheck.setSelected(true);
extractFeaturesLabel = new JLabel(
getParameter("extractFeatures.label"));
extractFeaturesLabel
.setToolTipText(getParameter("extractFeatures.tooltip"));
extractFeaturesLabel.setForeground(Color.white);
String[] modelArray = new String[] { Constants.TYPE_SMO,
Constants.TYPE_NAIVE_BAYEYS, Constants.TYPE_J48 };
SpinnerListModel classifierTypeModel = new SpinnerListModel(
modelArray);
classifierTypeModel.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
changeClassifierType((String) _classifierSpinner.getValue());
}
});
_classifierSpinner = new JSpinner(classifierTypeModel);
_classifierSpinner.setPreferredSize(new Dimension(90, 20));
}
// pane.add(transcribe);
pane.add(fastModeLabel);
pane.add(fastModeCheck);
pane.add(fastPlayModeLabel);
pane.add(fastPlayModeCheck);
pane.add(numberToWordLabel);
pane.add(numberToWordCheck);
if (Boolean.parseBoolean(getParameter("classification"))) {
pane.add(extractFeaturesLabel);
pane.add(extractFeaturesCheck);
pane.add(_classifierSpinner);
}
numberToWordCheck.setSelected(numberToWord);
return pane;
}
public Container makeRecognitionPane() {
JPanel pane = new JPanel();
pane.setBackground(new Color(40, 40, 40));
pane
.setBorder(BorderFactory.createMatteBorder(1, 1, 2, 2,
Color.GREEN));
recognizeAll = initButton("recognizeAll");
recognize = initButton("recognize");
toggleTranscript = initButton("toggleTranscript");
copyRecognition = initButton("copyRecognition");
_normalize = initButton("normalize");
_normalizeAll = initButton("normalizeAll");
_wer = initButton("wer");
pane.add(recognizeAll);
pane.add(recognize);
pane.add(toggleTranscript);
pane.add(copyRecognition);
pane.add(_normalize);
pane.add(_normalizeAll);
pane.add(_wer);
return pane;
}
public Container makeSynthesizerPane() {
JPanel pane = new JPanel();
pane.setBackground(new Color(110, 110, 110));
pane.setBorder(BorderFactory.createMatteBorder(1, 1, 2, 2,
Color.magenta));
_synthesize = initButton("synthesize");
_synthesizeAll = initButton("synthesizeAll");
pane.add(_synthesizeAll);
pane.add(_synthesize);
_ttsSexFemale = new JCheckBox();
_ttsSexFemale.setToolTipText(getParameter("ttsSexFemale.tooltip"));
JLabel label = new JLabel(getParameter("ttsSexFemale.label"));
label.setToolTipText(getParameter("ttsSexFemale.tooltip"));
label.setForeground(Color.white);
pane.add(label);
pane.add(_ttsSexFemale);
String[] afArray = StringUtil
.stringToArray(getParameter("ttsLanguages.values"));
SpinnerListModel model = new SpinnerListModel(afArray);
_ttsLanguages = new JSpinner(model);
_ttsLanguages.setPreferredSize(new Dimension(60, 20));
_ttsLanguages.setToolTipText(getParameter("ttsLanguages.tooltip"));
JLabel label2 = new JLabel(getParameter("ttsLanguages.label"));
label2.setToolTipText(getParameter("ttsLanguages.tooltip"));
label2.setForeground(Color.white);
pane.add(label2);
pane.add(_ttsLanguages);
return pane;
}
public Container makeTranscriptionPane() {
// Add Components to a JPanel, using the default FlowLayout.
JPanel pane = new JPanel();
if (Boolean.parseBoolean(getParameter("withTranscribe"))) {
if (Boolean.parseBoolean(getParameter("transcriptionFieldInline"))) {
KeyListener transFieldListener = new KeyListener() {
NumberToWord numberToWordTool = new NumberToWord();
public void keyPressed(KeyEvent evt) {
}
public void keyReleased(KeyEvent evt) {
if (evt.getKeyChar() == '\n') {
label();
}
// check for shortcuts
if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
int caretPos = transField.getCaretPosition() - 1;
for (Iterator<String> iterator = _charReplacements
.keySet().iterator(); iterator.hasNext();) {
String key = ((String) iterator.next());
// System.err.println("key: >"+key+"<");
String text = transField.getText();
try {
String lastChar = text.substring(caretPos,
caretPos + 1);
// System.err.println("lastChar: >"+lastChar+"<");
if (lastChar.compareTo(key) == 0) {
// System.err.println("yep");
text = text.substring(0, caretPos)
+ _charReplacements.get(key)
+ text.substring(caretPos + 1,
text.length());
transField.setText(text);
transField.setCaretPosition(caretPos
+ _charReplacements.get(key)
.length());
break;
}
} catch (Exception e) {
System.err
.println("problem to set auto text: "
+ text);
}
}
}
// check for class annotations
if (evt.getKeyCode() == KeyEvent.VK_CONTROL) {
int caretPos = transField.getCaretPosition() - 1;
for (Iterator<String> iterator = _classes.keySet()
.iterator(); iterator.hasNext();) {
String key = ((String) iterator.next());
// System.err.println("key: >"+key+"<");
String text = transField.getText();
try {
String lastChar = text.substring(
caretPos - 1, caretPos + 1);
// System.err.println("lastChar: >"+lastChar+"<");
if (lastChar.compareTo(key) == 0) {
int start = StringUtil.lastPositionOf(
text, " ", caretPos);
String classExp = text.substring(start,
caretPos - 1);
String elemName = _classes.get(key);
classExp = StringUtil.tagString(
classExp, elemName);
text = text.substring(0, start)
+ classExp
+ " "
+ text.substring(caretPos + 1,
text.length());
transField.setText(text);
transField.setCaretPosition(caretPos
+ classExp.length() - 3);
break;
}
} catch (Exception e) {
System.err
.println("problem to set auto text: "
+ text);
}
}
}
// check for prefixes
if (evt.getKeyCode() == KeyEvent.VK_F1) {
int caretPos = transField.getCaretPosition() - 1;
for (String key : _prefixes.keySet()) {
// System.err.println("key: >"+key+"<");
String text = transField.getText();
try {
String lastChar = text.substring(
caretPos, caretPos + 1);
// System.err.println("lastChar: >"+lastChar+"<");
if (lastChar.compareTo(key) == 0) {
int start = StringUtil.lastPositionOf(
text, " ", caretPos);
String word = text.substring(start,
caretPos);
String prefix = _prefixes.get(key);
// System.err.println("prefix: >"+prefix+"<");
word = prefix+word;
text = text.substring(0, start)
+ word;
transField.setText(text);
transField.setCaretPosition(caretPos
+ word.length() - 4);
break;
}
} catch (Exception e) {
e.printStackTrace();
System.err
.println("problem to set auto text: "
+ text);
}
}
}
// check last word
if (evt.getKeyCode() == KeyEvent.VK_SPACE) {
int caretPos = transField.getCaretPosition() - 1;
String text = transField.getText();
try {
int start = StringUtil.lastPositionOf(text,
" ", caretPos);
String test = text.substring(start, caretPos);
// search for abbreviations
for (Iterator<String> iterator = _abbreviations
.keySet().iterator(); iterator
.hasNext();) {
String key = ((String) iterator.next());
if (key.compareTo(test) == 0) {
String newtext = _abbreviations.get(key);
text = text.substring(0, start)
+ newtext
+ " "
+ text.substring(caretPos + 1,
text.length());
transField.setText(text);
transField.setCaretPosition(caretPos
+ newtext.length());
}
}
// convert numbers automatically
if (numberToWordCheck.isSelected()) {
String newtext = numberToWordTool
.filtNum(test);
if (newtext.compareTo(test) != 0) {
newtext = newtext.trim();
// System.err.println("#### test = [" +
// test
// + "] newtext = [" + newtext + "]");
text = text.substring(0, start)
+ newtext
+ " "
+ text.substring(caretPos + 1,
text.length());
transField.setText(text);
transField.setCaretPosition(caretPos
+ newtext.length());
}
}
// check spelling
if (_checkSpelling.isSelected()) {
boolean hasPunctuationMark = false;
if (test.endsWith("?")
|| test.endsWith(",")
|| test.endsWith(".")
|| test.endsWith("!")) {
hasPunctuationMark = true;
}
String answer = interfaceServer.getAnswer(
"check;" + test).trim();
if (answer.compareTo("ok") != 0) {
Vector<String> suggestions = StringUtil
.stringToVector(answer);
Object[] options = new Object[suggestions
.size() + 2];
int i = 0;
for (String s : suggestions) {
options[i++] = s;
}
options[i++] = Constants.CMD_ADD;
options[i++] = Constants.CMD_IGNORE;
int n = JOptionPane
.showOptionDialog(
null,
"unknown word",
"Spellchecker",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, options,
options[0]);
String choice = (String) options[n];
if (choice.compareTo(Constants.CMD_ADD) == 0) {
// add the word to dictionary
interfaceServer
.sendMessage("addWord;"
+ test);
} else if (choice
.compareTo(Constants.CMD_IGNORE) != 0) {
text = text.substring(0, start)
+ choice
+ " "
+ text.substring(
caretPos + 1, text
.length());
transField.setText(text);
transField
.setCaretPosition(caretPos
+ choice.length());
}
}
}
} catch (Exception e) {
System.err.println("problem to set auto text: "
+ text);
}
}
}
public void keyTyped(KeyEvent evt) {
}
};
transField = new JTextArea();
transField.addKeyListener(transFieldListener);
JScrollPane transFieldScroll = new JScrollPane(transField);
transField.setLineWrap(true);
transFieldScroll
.setPreferredSize(new Dimension(
Integer
.parseInt(getParameter("transcriptionField.width")),
Integer
.parseInt(getParameter("transcriptionField.height"))));
pane.add(transFieldScroll);
} else {
_transcribe = new JButton(getParameter("transcribe.label"));
_transcribe.setActionCommand("transcribe");
_transcribe.setToolTipText(getParameter("transcribe.tooltip"));
_transcribe.addActionListener(this);
_transcribe.setMnemonic(getParameter("transcribe.short")
.charAt(0));
pane.add(_transcribe);
}
}
_export = initButton("export");
_import = initButton("import");
_checkSpelling = new JCheckBox();
_checkSpelling.setToolTipText(getParameter("checkSpelling.tooltip"));
JLabel label = new JLabel(getParameter("checkSpelling.label"));
label.setForeground(Color.white);
label.setToolTipText(getParameter("checkSpelling.tooltip"));
JPanel butPane = new JPanel();
butPane.setBackground(new Color(25, 25, 25));
butPane.add(_import);
butPane.add(_export);
JPanel checkPane = new JPanel();
checkPane.setBackground(new Color(25, 25, 25));
checkPane.setLayout(new BoxLayout(checkPane, BoxLayout.Y_AXIS));
checkPane.add(label);
checkPane.add(_checkSpelling);
pane.add(checkPane);
butPane.setLayout(new BoxLayout(butPane, BoxLayout.Y_AXIS));
pane.add(butPane);
pane.setBackground(new Color(25, 25, 25));
pane
.setBorder(BorderFactory.createMatteBorder(1, 1, 2, 2,
Color.black));
return pane;
}
private class CustomActionLister implements ActionListener {
Vector<String> _names;
ValueReturnFrameButtonPanel _vrfbp;
public CustomActionLister(Vector<String> names,
ValueReturnFrameButtonPanel vrfbp) {
_names = names;
_vrfbp = vrfbp;
}
public void actionPerformed(ActionEvent e) {
for (String s : _names) {
if (e.getActionCommand().equals(s)) {
_vrfbp.returnValue(s);
}
}
}
}
private class ValueReturnFrameButtonPanel extends JFrame {
ActionListener _ac;
public String returnValue(String val) {
this.dispose();
return val;
}
public void setActionlistener(ActionListener ac, Vector<String> names) {
_ac = ac;
JPanel pane = new JPanel();
for (String s : names) {
JButton b = SwingUtil.makeButton(s, _ac);
pane.add(b);
}
setContentPane(pane);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
pack();
setVisible(true);
}
}
public Container makeJudgeButtonPane() {
JPanel pane = new JPanel();
String[] buttonNames = StringUtil
.stringToArray(getParameter("buttons"));
for (int i = 0; i < buttonNames.length; i++) {
JButton act = initButton(buttonNames[i]);
pane.add(act);
}
setNA = initButton("na");
removeLastLabel = initButton("removeLastLabel");
removePred = initButton("removePred");
removeUntagged = initButton("removeUntagged");
statistics = initButton("statistics");
pane.add(setNA);
pane.add(removeLastLabel);
pane.add(removeUntagged);
if (Boolean.parseBoolean(getParameter("classification"))) {
pane.add(removePred);
pane.add(statistics);
}
pane.setBackground(new Color(20, 20, 20));
pane
.setBorder(BorderFactory.createMatteBorder(1, 1, 2, 2,
Color.black));
return pane;
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#start()
*/
public void start() {
KeyValues kv = new KeyValues(getParameter("replacements"), ",", ":");
_charReplacements = kv.getHashMap();
kv = new KeyValues(getParameter("classes"), ",", ":");
_classes = kv.getHashMap();
kv = new KeyValues(getParameter("prefixes"), ",", ":");
_prefixes = kv.getHashMap();
kv = new KeyValues(getParameter("abbreviations"), ",", ":");
_abbreviations = kv.getHashMap();
// setting up the table's listener (for row-selection)
// _table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionModel rowSM = _table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
// Ignore extra messages.
if (e.getValueIsAdjusting())
return;
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
if (lsm.isSelectionEmpty()) {
} else {
selectedRow = lsm.getMinSelectionIndex();
_play.setEnabled(true);
if (Boolean.parseBoolean(getParameter("classification"))) {
_judge.setEnabled(true);
_train.setEnabled(true);
}
_delete.setEnabled(true);
wavPositionSlider.setModel(new DefaultBoundedRangeModel());
if (Boolean
.parseBoolean(getParameter("transcriptionFieldInline"))) {
transField.setText(recordings
.getRecordingAtRow(selectedRow).words);
}
}
}
});
// looking for recordings at server
updateThread = new UpdateFileListThread(servername, Integer
.parseInt(getParameter("port")), this, false,
getParameter("charEnc"),Boolean
.parseBoolean(getParameter("sortRecordings")), Boolean
.parseBoolean(getParameter("sortOrderAscending")));
updateThread.start();
}
/**
* , Listens for Button-Click and determines what to do.
*
* @param the
* actionEvent fired by the button.
*/
public void actionPerformed(ActionEvent e) {
String[] buttonNames = StringUtil
.stringToArray(getParameter("buttons"));
for (int i = 0; i < buttonNames.length; i++) {
if (e.getActionCommand().equals(buttonNames[i])) {
setEmotion(getParameter(buttonNames[i] + ".value"));
}
}
if (e.getActionCommand().equals("record")) {
record();
} else if (e.getActionCommand().equals("play")) {
_stop.setIcon(new ImageIcon(Recorder.class
.getResource("images/stop.gif")));
play();
} else if (e.getActionCommand().equals("stop")) {
if (!Boolean.parseBoolean(getParameter("audioFormatAlaw"))) {
if (playThread != null || recThread != null) {
_stop.setIcon(new ImageIcon(Recorder.class
.getResource("images/resume.gif")));
_stop.setToolTipText(getParameter("resume.tooltip"));
stopRecordingPlayback();
} else {
_stop.setIcon(new ImageIcon(Recorder.class
.getResource("images/stop.gif")));
_stop.setToolTipText(getParameter("stop.tooltip"));
resume();
}
} else {
stopRecordingPlayback();
}
} else if (e.getActionCommand().equals("resume")) {
resume();
} else if (e.getActionCommand().equals("open")) {
open();
} else if (e.getActionCommand().equals("rename")) {
rename();
} else if (e.getActionCommand().equals("exec")) {
exec();
} else if (e.getActionCommand().equals("export")) {
export();
} else if (e.getActionCommand().equals("import")) {
importFile();
} else if (e.getActionCommand().equals("refresh")) {
refresh();
} else if (e.getActionCommand().equals("judge")) {
_table.requestFocus();
judge();
} else if (e.getActionCommand().equals("deleteAllPredictions")) {
_table.requestFocus();
deleteAllPredictions();
} else if (e.getActionCommand().equals("train")) {
_table.requestFocus();
train();
} else if (e.getActionCommand().equals("synthesize")) {
_table.requestFocus();
synthesize();
} else if (e.getActionCommand().equals("synthesizeAll")) {
_table.requestFocus();
synthesizeAll();
} else if (e.getActionCommand().equals("wer")) {
_table.requestFocus();
wer();
} else if (e.getActionCommand().equals("normalize")) {
_table.requestFocus();
normalize();
} else if (e.getActionCommand().equals("normalizeAll")) {
_table.requestFocus();
normalizeAll();
} else if (e.getActionCommand().equals("judgeAll")) {
_table.requestFocus();
judgeAll();
} else if (e.getActionCommand().equals("recognizeAll")) {
_table.requestFocus();
recognizeAll();
} else if (e.getActionCommand().equals("evaluate")) {
_table.requestFocus();
evaluate();
} else if (e.getActionCommand().equals("delete")) {
deleteFile();
} else if (e.getActionCommand().equals("na")) {
setEmotion("0");
} else if (e.getActionCommand().equals("removeLastLabel")) {
removeLastLabel();
} else if (e.getActionCommand().equals("removeUntagged")) {
removeUntagged();
} else if (e.getActionCommand().equals("removePred")) {
removePred();
} else if (e.getActionCommand().equals("statistics")) {
analyse();
} else if (e.getActionCommand().equals("transcribe")) {
label();
} else if (e.getActionCommand().equals("recognize")) {
recognize();
} else if (e.getActionCommand().equals("toggleTranscript")) {
toggleTranscript();
} else if (e.getActionCommand().equals("copyRecognition")) {
copyRecognition();
}
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#setEmoResult(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String)
*/
public void setEmoResult(String prediction, String configString) {
try {
emoConfigLabel.setText(configString);
ClassificationResult cr = new ClassificationResult(prediction);
String neutralS = "na";
ClassResult neutralR = cr.getResultForName("N");
if (neutralR != null) {
neutralS = String.valueOf(neutralR.getProbability());
}
String angerS = "na";
ClassResult angerR = cr.getResultForName("A");
if (angerR != null) {
angerS = String.valueOf(angerR.getProbability());
}
emoResultNeutralLab.setText(neutralS);
double dNeutral = Double.parseDouble(neutralS);
int iNeutral = (int) (dNeutral * 100.0);
emoResultNeutralPG.setValue(iNeutral);
emoResultHotAngerLab.setText(angerS);
double dHotAnger = Double.parseDouble(angerS);
int iHotAnger = (int) (dHotAnger * 100.0);
emoResultHotAngerPG.setValue(iHotAnger);
if (dNeutral == 1) {
neutralLab.setForeground(Color.red);
haLab.setForeground(Color.black);
} else if (dHotAnger == 1) {
haLab.setForeground(Color.red);
neutralLab.setForeground(Color.black);
}
} catch (Exception e) {
e.printStackTrace();
}
_table.requestFocus();
setFocusTable();
}
public void refresh() {
updateThread = new UpdateFileListThread(servername, Integer
.parseInt(getParameter("port")), this, Boolean
.parseBoolean(getParameter("refreshFromHardDisc")),
getParameter("charEnc"),Boolean
.parseBoolean(getParameter("sortRecordings")), Boolean
.parseBoolean(getParameter("sortOrderAscending")));
updateThread.start();
}
public void open() {
JFileChooser chooser = new JFileChooser();
if (_fileDir.length() == 0) {
_fileDir = FileUtil.getCurrentDirPath();
}
chooser.setCurrentDirectory(new java.io.File(_fileDir));
if (_openDirectory.isSelected()) {
chooser.setDialogTitle(getParameter("diropen.question"));
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
_fileDir = file.getParent();
SendMessageThread sendMessageThread = new SendMessageThread(
"openDir;" + file.getAbsolutePath(), servername,
Integer.parseInt(getParameter("port")), this);
sendMessageThread.start();
} else {
return;
}
} else if (_openModel.isSelected()) {
chooser.setDialogTitle(getParameter("open.question"));
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
_fileDir = file.getParent();
SendMessageThread sendMessageThread = new SendMessageThread(
"openModel;" + file.getAbsolutePath(), servername,
Integer.parseInt(getParameter("port" + "")), this);
sendMessageThread.start();
} else {
return;
}
} else {
chooser.setDialogTitle(getParameter("open.question"));
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
_fileDir = file.getParent();
SendMessageThread sendMessageThread = new SendMessageThread(
"open;" + file.getAbsolutePath(), servername, Integer
.parseInt(getParameter("port" + "")), this);
sendMessageThread.start();
} else {
return;
}
}
}
public void export() {
JFileChooser chooser = new JFileChooser();
if (_fileDir.length() == 0) {
_fileDir = FileUtil.getCurrentDirPath();
}
chooser.setCurrentDirectory(new java.io.File(_fileDir));
chooser.setDialogTitle(getParameter("export.question"));
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
_fileDir = file.getParent();
SendMessageThread sendMessageThread = new SendMessageThread(
"exportTranscriptsToFile;" + file.getAbsolutePath(),
servername, Integer.parseInt(getParameter("port" + "")),
this);
sendMessageThread.start();
} else {
return;
}
}
public void importFile() {
JFileChooser chooser = new JFileChooser();
if (_fileDir.length() == 0) {
_fileDir = FileUtil.getCurrentDirPath();
}
chooser.setCurrentDirectory(new java.io.File(_fileDir));
chooser.setDialogTitle(getParameter("import.question"));
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
_fileDir = file.getParent();
SendMessageThread sendMessageThread = new SendMessageThread(
"importTranscriptsFromFile;" + file.getAbsolutePath(),
servername, Integer.parseInt(getParameter("port" + "")),
this);
sendMessageThread.start();
} else {
return;
}
}
private void rename() {
String fileName = JOptionPane
.showInputDialog(getParameter("rename.question"));
if (fileName != null) {
fileName = FileUtil.enforceExtension(fileName, _audioType);
Recording recording = recordings.getRecordingAtRow(selectedRow);
SendMessageThread sendMessageThread = new SendMessageThread(
"rename;" + recording.path + ";" + fileName, servername,
Integer.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#record()
*/
public void record() {
// if a recording was started, stop it.
if (recThread != null) {
System.out.println("Stoppe Aufnahme");
recThread.stopMe();
recThread = null;
_record.setIcon(new ImageIcon(Recorder.class
.getResource("images/record.gif")));
updateThread = new UpdateFileListThread(servername, Integer
.parseInt(getParameter("port")), this, false,
getParameter("charEnc"),Boolean
.parseBoolean(getParameter("sortRecordings")), Boolean
.parseBoolean(getParameter("sortOrderAscending")));
updateThread.start();
} else {
String fileName = "_neutralPred.raw";
if (Boolean.parseBoolean(getParameter("recordingAudioAskName"))) {
// Prompt the user for a fileName.
fileName = JOptionPane
.showInputDialog(getParameter("record.question"));
if (fileName != null) {
// Wenn der User keinen Dateinamen angibt, heisst die Datei
// lokales Datum - lokale Uhrzeit
if (fileName.length() == 0) {
fileName = FileUtil.enforceExtension(Util
.getDateSortableName(), _audioType);
} else {
fileName = FileUtil.enforceExtension(fileName,
_audioType);
}
}
} else {
fileName = FileUtil.enforceExtension(
Util.getDateSortableName(), _audioType);
}
_stop.setEnabled(true);
_record.setIcon(new ImageIcon(Recorder.class
.getResource("images/stop.gif")));
recThread = new RecordThread(_formatPCM, servername, Integer
.parseInt(getParameter("port")), fileName);
recThread.start();
}
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#undo()
*/
public void undo() {
undoThread = new UndoThread(servername, Integer
.parseInt(getParameter("port")));
undoThread.start();
updateThread = new UpdateFileListThread(servername, Integer
.parseInt(getParameter("port")), this, false,
getParameter("charEnc"),Boolean
.parseBoolean(getParameter("sortRecordings")), Boolean
.parseBoolean(getParameter("sortOrderAscending")));
updateThread.start();
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#stopRecordingPlayback()
*/
public void stopRecordingPlayback() {
if (recThread != null) {
System.out.println("Stoppe Aufnahme");
recThread.stopMe();
recThread = null;
updateThread = new UpdateFileListThread(servername, Integer
.parseInt(getParameter("port")), this, false,
getParameter("charEnc"),Boolean
.parseBoolean(getParameter("sortRecordings")), Boolean
.parseBoolean(getParameter("sortOrderAscending")));
updateThread.start();
} else if (playThread != null) {
System.out.println("Stoppe Wiedergabe");
lastBytesPlayed = playThread.stopMe();
finishedPlayback();
} else {
lastBytesPlayed = 0;
System.out.println("No Process started!");
}
// stop.setEnabled(false);
_record.setEnabled(true);
_table.requestFocus();
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#play()
*/
public void play() {
if (Boolean.parseBoolean(getParameter("useExternalPlayer"))) {
exec();
} else {
// check if multiple playback should be suppresed
if (Boolean.parseBoolean(getParameter("noMultiplePlayBack"))) {
if (playThread != null) {
// there is someone playing
return;
} else {
// we can play, but don't enable for others
_play.setEnabled(false);
}
}
// check if slider was moved and resume at position
if (wavPositionSlider.getModel() instanceof CustomSliderRangeModel) {
CustomSliderRangeModel csrm = (CustomSliderRangeModel) wavPositionSlider
.getModel();
if (csrm.getSliderPosition() > 0) {
resume(csrm.getSliderPosition());
return;
}
}
// reset the resume function
lastBytesPlayed = 0;
wavPositionSlider.setValue(0);
_stop.setEnabled(true);
wavPositionSlider.setEnabled(true);
Recording recording = recordings.getRecordingAtRow(selectedRow);
AudioFormat audioFormat = null;
if (Boolean.parseBoolean(getParameter("audioFormatAlaw"))) {
audioFormat = AudioUtil.FORMAT_ALAW;
} else {
audioFormat = _formatPCM;
}
playThread = new PlayThread(audioFormat, servername, Integer
.parseInt(getParameter("port")), recording, this, 0);
prepareSlider();
playThread.start();
_play.setEnabled(false);
_record.setEnabled(false);
if (Boolean.parseBoolean(getParameter("classification"))) {
_judge.setEnabled(false);
_train.setEnabled(false);
}
_delete.setEnabled(false);
_table.requestFocus();
}
if (fastPlayModeCheck.isSelected()) {
_table
.changeSelection(_table.getSelectedRow() + 1, 0, false,
false);
_table.requestFocus();
}
if (fastModeCheck.isSelected()
&& !Boolean.parseBoolean(getParameter("fastModeSetsAnger"))) {
transField.requestFocus();
if (transField.getText().length() == 0) {
Recording recording = recordings.getRecordingAtRow(selectedRow);
recording = recordings.getRecordingAtRow(selectedRow);
transField.setText(recording.words);
transField.setSelectionStart(0);
transField.setSelectionEnd(recording.words.length());
}
}
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#resume()
*/
public void resume() {
if (playThread == null) {
_stop.setEnabled(true);
Recording recording = recordings.getRecordingAtRow(selectedRow);
AudioFormat audioFormat = null;
if (Boolean.parseBoolean(getParameter("audioFormatAlaw"))) {
audioFormat = AudioUtil.FORMAT_ALAW;
} else {
audioFormat = _formatPCM;
}
// int resumebytes = lastBytesPlayed > Constants.PREROLL ?
// lastBytesPlayed - Constants.PREROLL
// : lastBytesPlayed;
playThread = new PlayThread(audioFormat, servername, Integer
.parseInt(getParameter("port")), recording, this,
lastBytesPlayed);
prepareSlider();
playThread.start();
_play.setEnabled(false);
_record.setEnabled(false);
_judge.setEnabled(false);
_train.setEnabled(false);
_delete.setEnabled(false);
_table.requestFocus();
}
}
private void prepareSlider() {
ChangeListener[] cl = wavPositionSlider.getChangeListeners();
for (int i = cl.length; --i >= 0;) {
wavPositionSlider.removeChangeListener(cl[i]);
}
CustomSliderRangeModel sliderModel = new CustomSliderRangeModel(
playThread);
wavPositionSlider.setModel(sliderModel);
wavPositionSlider.addChangeListener(sliderModel);
}
/*
* (non-Javadoc)
*
* @see emo.recorder.IRecorder#resume(int)
*/
@Override
public void resume(int bytePos) {
lastBytesPlayed = bytePos;
resume();
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#finishedPlayback()
*/
public void finishedPlayback() {
playThread = null;
// wavPositionSlider.setValueIsAdjusting( true );
// wavPositionSlider.setValue( 0 );
// wavPositionSlider.setValueIsAdjusting( false );
_play.setEnabled(true);
_record.setEnabled(true);
if (Boolean.parseBoolean(getParameter("classification"))) {
_judge.setEnabled(true);
_train.setEnabled(true);
}
_delete.setEnabled(true);
// stop.setEnabled(false);
if (fastModeCheck.isSelected()
&& !Boolean.parseBoolean(getParameter("fastModeSetsAnger"))) {
if (Boolean.parseBoolean(getParameter("transcriptionFieldInline"))) {
transField.requestFocus();
if (transField.getText().length() == 0) {
Recording recording = recordings
.getRecordingAtRow(selectedRow);
transField.setText(recording.words);
transField.setSelectionStart(0);
transField.setSelectionEnd(recording.words.length());
}
} else {
label();
}
}
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#judge(boolean)
*/
public void judge() {
Recording recording = recordings.getRecordingAtRow(selectedRow);
judgeThread = new JudgeThread(recording, servername, Integer
.parseInt(getParameter("port")), this);
judgeThread.start();
_table.requestFocus();
lastSelectedRow = _table.getSelectedRow();
}
public void exec() {
Recording recording = recordings.getRecordingAtRow(selectedRow);
SendMessageThread sendMessageThread = new SendMessageThread("exec;"
+ recording.path, servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
public void setFocusTable() {
if (recordings.rowNum > 0) {
int recIndex = lastSelectedRow;
_table.changeSelection(recIndex, 0, false, false);
_table.scrollRectToVisible(_table.getCellRect(recIndex, 0, true));
recordings.fireTableDataChanged();
}
_table.requestFocus();
lastBytesPlayed = 0;
}
public void judgeAll() {
SendMessageThread sendMessageThread = new SendMessageThread("judgeAll",
servername, Integer.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
public void recognizeAll() {
SendMessageThread sendMessageThread = new SendMessageThread(
"recognizeAll", servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
public void changeAudioFormat(String format) {
SendMessageThread sendMessageThread = new SendMessageThread(
"audioFormat;" + format, servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
_audioType = format;
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#judgeAll()
*/
public void deleteAllPredictions() {
SendMessageThread sendMessageThread = new SendMessageThread(
"removeAllPredictions", servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
public void changeClassifierType(String type) {
SendMessageThread sendMessageThread = new SendMessageThread(
"classifierType;" + type, servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
public int getSampleRate() {
return _samplerate;
}
public void changeSampleRate(String rate) {
_formatPCM = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, Integer
.parseInt(rate), 16, 1, 2, Integer.parseInt(rate), false);
try {
_samplerate = Integer.parseInt(rate);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#judgeAll()
*/
public void train() {
SendMessageThread sendMessageThread = new SendMessageThread("train "
+ extractFeaturesCheck.isSelected(), servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
public void synthesize() {
if (JOptionPane.showConfirmDialog(this,
getParameter("synthesize.question"), "sure",
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
String recs = "";
int[] rowsI = _table.getSelectedRows();
for (int i = 0; i < rowsI.length; i++) {
Recording recording = recordings.getRecordingAtRow(rowsI[i]);
recs += recording.path + ";";
}
String ttsSexFemale = String.valueOf(_ttsSexFemale.isSelected());
String ttsLanguage = (String)_ttsLanguages.getValue();
SendMessageThread sendMessageThread = new SendMessageThread(
"synthesize;" +ttsSexFemale+";"+ttsLanguage+";"+ recs, servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
}
public void synthesizeAll() {
if (JOptionPane.showConfirmDialog(this,
getParameter("synthesizeAll.question"), "sure",
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
String ttsSexFemale = String.valueOf(_ttsSexFemale.isSelected());
String ttsLanguage = (String)_ttsLanguages.getValue();
SendMessageThread sendMessageThread = new SendMessageThread(
"synthesizeAll;" +ttsSexFemale+";"+ttsLanguage, servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
}
public void wer() {
GetAnswerThread thread = new GetAnswerThread("wer", servername, Integer
.parseInt(getParameter("port")), this);
thread.start();
}
public void normalize() {
Recording recording = recordings.getRecordingAtRow(selectedRow);
SendMessageThread sendMessageThread = new SendMessageThread(
"normalize;" + recording.path, servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
public void normalizeAll() {
SendMessageThread sendMessageThread = new SendMessageThread(
"normalizeAll", servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#resetRatings()
*/
public void resetRatings() {
ResetThread resetThread = new ResetThread(false, servername, Integer
.parseInt(getParameter("port")), this);
resetThread.start();
}
public void evaluate() {
String mode = "model";
if (_evalFiles.isSelected()) {
mode = "files";
}
EvaluateThread evaluateThread = new EvaluateThread(servername, Integer
.parseInt(getParameter("port")), this, mode,
getParameter("charEnc"));
evaluateThread.start();
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#setEmotion(java.lang.String)
*/
public void setEmotion(String emo) {
if (playThread != null) {
System.out.println("Stoppe Wiedergabe");
playThread.stopMe();
playThread = null;
_play.setEnabled(true);
_record.setEnabled(true);
_judge.setEnabled(true);
_train.setEnabled(true);
_delete.setEnabled(true);
_stop.setEnabled(false);
}
Recording recording = recordings.getRecordingAtRow(selectedRow);
recording.addAngerLab(Double.parseDouble(emo));
int recIndex = selectedRow;
SetFileEmotionThread sfe = new SetFileEmotionThread(servername, Integer
.parseInt(getParameter("port")), recording, emo);
sfe.start();
// updateThread = new UpdateFileListThread(servername,
// Integer.parseInt(getParameter("port")), this);
// updateThread.start();
_delete.setEnabled(false);
_play.setEnabled(false);
_judge.setEnabled(false);
_train.setEnabled(false);
recordings.fireTableDataChanged();
_table.changeSelection(recIndex, 0, false, false);
_table.scrollRectToVisible(_table.getCellRect(recIndex, 0, true));
_table.requestFocus();
if (fastModeCheck.isSelected() && recIndex < recordings.rowNum - 1
&& Boolean.parseBoolean(getParameter("fastModeSetsAnger"))) {
_table.changeSelection(recIndex + 1, 0, false, false);
_table.scrollRectToVisible(_table.getCellRect(recIndex, 0, true));
_table.requestFocus();
play();
}
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#removeLastLabel()
*/
public void removeLastLabel() {
Recording recording = recordings.getRecordingAtRow(selectedRow);
recording.removeLastLabel();
int recIndex = selectedRow;
SendMessageThread sendMessageThread = new SendMessageThread(
"removeLastLabel;" + recording.path, servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
recordings.fireTableDataChanged();
_table.changeSelection(recIndex, 0, false, false);
_table.scrollRectToVisible(_table.getCellRect(recIndex, 0, true));
_table.requestFocus();
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#removeLastLabel()
*/
public void removeUntagged() {
if (JOptionPane.showConfirmDialog(this,
getParameter("removeUntagged.question"), "sure",
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
SendMessageThread sendMessageThread = new SendMessageThread(
"removeUntagged;", servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#removeLastLabel()
*/
public void removePred() {
Recording recording = recordings.getRecordingAtRow(selectedRow);
recording.removePrediction();
int recIndex = selectedRow;
SendMessageThread sendMessageThread = new SendMessageThread(
"removePred;" + recording.path, servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
recordings.fireTableDataChanged();
_table.changeSelection(recIndex, 0, false, false);
_table.scrollRectToVisible(_table.getCellRect(recIndex, 0, true));
_table.requestFocus();
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#setMessage(java.lang.String)
*/
public void setMessage(String msg) {
JOptionPane.showMessageDialog(this, new JTextArea(msg));
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#transcribe()
*/
public void transcribe() {
Recording recording = recordings.getRecordingAtRow(selectedRow);
if (recording.words != null) {
transField.setText(recording.words);
}
transField.requestFocus();
}
private void toggleTranscript() {
if (showTranscript) {
showTranscript = false;
} else {
showTranscript = true;
}
int recIndex = selectedRow;
recordings.fireTableDataChanged();
_table.changeSelection(recIndex, 0, false, false);
_table.scrollRectToVisible(_table.getCellRect(recIndex, 0, true));
}
private void copyRecognition() {
Recording recording = recordings.getRecordingAtRow(selectedRow);
int recIndex = selectedRow;
recording.words = recording.recognition;
sendTranscriptToServer(recording, recIndex);
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#label()
*/
public void label() {
Recording recording = recordings.getRecordingAtRow(selectedRow);
int recIndex = selectedRow;
String transcript = "";
if (Boolean.parseBoolean(getParameter("transcriptionFieldInline"))) {
transcript = transField.getText();
transField.setText("");
} else {
// Prompt the user for a fileName.
transcript = JOptionPane.showInputDialog("transcription:",
recording.words);
}
if (transcript == null) {
return;
}
transcript = transcript.replaceAll("\n", "");
recording.setWords(transcript);
sendTranscriptToServer(recording, recIndex);
if (fastModeCheck.isSelected() && recIndex < recordings.rowNum - 1
&& !Boolean.parseBoolean(getParameter("fastModeSetsAnger"))) {
_table.changeSelection(recIndex + 1, 0, false, false);
_table.scrollRectToVisible(_table.getCellRect(recIndex, 0, true));
_table.requestFocus();
play();
}
}
private void sendTranscriptToServer(Recording recording, int recIndex) {
SendTranscriptionThread sfl = new SendTranscriptionThread(servername,
Integer.parseInt(getParameter("port")), recording,
getParameter("charEnc"));
sfl.start();
_delete.setEnabled(false);
_play.setEnabled(false);
if (Boolean.parseBoolean(getParameter("classification"))) {
_judge.setEnabled(false);
_train.setEnabled(false);
}
recordings.fireTableDataChanged();
_table.changeSelection(recIndex, 0, false, false);
_table.scrollRectToVisible(_table.getCellRect(recIndex, 0, true));
_table.requestFocus();
}
public void recognize() {
Recording recording = recordings.getRecordingAtRow(selectedRow);
RecognitionThread recThread = new RecognitionThread(servername, Integer
.parseInt(getParameter("port")), this, recording);
recThread.start();
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#deleteFile()
*/
public void deleteFile() {
if (JOptionPane.showConfirmDialog(this,
getParameter("delete.question"), "sure",
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
int[] rowsI = _table.getSelectedRows();
String recs = "";
for (int i = 0; i < rowsI.length; i++) {
Recording recording = recordings.getRecordingAtRow(rowsI[i]);
recs += recording.path + ";";
}
SendMessageThread sendMessageThread = new SendMessageThread(
"delete;" + recs, servername, Integer
.parseInt(getParameter("port")), this);
sendMessageThread.start();
}
}
/**
* Enables the programm to run as application.
*
* @param commandline
* arguments
*/
public static void main(String[] args) {
JFrame frame = new JFrame("Application version: Recorder");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Recorder applet = new Recorder();
frame.setContentPane(applet.makeRecorderButtonPane());
frame.pack();
frame.setVisible(true);
}
/*
* (non-Javadoc)
*
* @see emo.recorder.gui.IRecorder#getRecordings()
*/
public RecordingTable getRecordings() {
return recordings;
}
/*
* (non-Javadoc)
*
* @seeemo.recorder.gui.IRecorder#setRecordings(emo.recorder.gui.
* RecordingsTableModel)
*/
public void setRecordings(RecordingTable recordings) {
if (recordings instanceof RecordingsTableModel) {
this.recordings = (RecordingsTableModel) recordings;
}
}
private JButton initButton(String name) {
JButton tempButton = new JButton(getParameter(name + ".label"));
tempButton.setMnemonic(getParameter(name + ".short").charAt(0));
tempButton.setActionCommand(name);
tempButton.setToolTipText(getParameter(name + ".tooltip"));
tempButton.addActionListener(this);
return tempButton;
}
}