package edu.cmu.sphinx.frontend;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.instanceOf;
import static org.testng.Assert.assertFalse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URISyntaxException;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import edu.cmu.sphinx.frontend.util.AudioFileDataSource;
import edu.cmu.sphinx.frontend.util.AudioFileProcessListener;
import edu.cmu.sphinx.frontend.util.ConcatAudioFileDataSource;
import edu.cmu.sphinx.util.props.ConfigurationManager;
import edu.cmu.sphinx.util.props.PropertyException;
import edu.cmu.sphinx.util.props.PropertySheet;
/**
* Some small unit tests to check whether the AudioFileDataSource and the
* ConcatAudioFileDataSource are working properly.
*/
public class AudioDataSourcesTest {
private int numFileStarts;
private int numFileEnds;
@BeforeMethod
public void setUp() {
numFileStarts = 0;
numFileEnds = 0;
}
@Test
public void testSimpleFileSources() throws DataProcessingException,
URISyntaxException {
// TODO: test.ogg
runAssert("test.wav");
runAssert("test.aiff");
runAssert("test.au");
}
@Test
public void test8KhzSource() throws DataProcessingException,
URISyntaxException {
AudioFileDataSource dataSource = ConfigurationManager
.getInstance(AudioFileDataSource.class);
// Test simple WAV.
File file = new File(getClass().getResource("test8k.wav").toURI());
dataSource.setAudioFile(file, null);
assertThat(dataSource.getData(), instanceOf(DataStartSignal.class));
Data d = dataSource.getData();
assertThat(dataSource.getData(), instanceOf(DoubleData.class));
assertThat(((DoubleData) d).getSampleRate(), equalTo(8000));
while ((d = dataSource.getData()) instanceof DoubleData);
assertThat(d, instanceOf(DataEndSignal.class));
}
@Test
public void testConcatDataSource() throws DataProcessingException,
IOException, URISyntaxException {
ConcatAudioFileDataSource dataSource = ConfigurationManager
.getInstance(ConcatAudioFileDataSource.class);
dataSource.addNewFileListener(new AudioFileProcessListener() {
public void audioFileProcStarted(File audioFile) {
numFileStarts++;
}
public void audioFileProcFinished(File audioFile) {
numFileEnds++;
}
public void newProperties(PropertySheet ps)
throws PropertyException {
}
});
File tmpFile = File.createTempFile(getClass().getName(), ".drv");
tmpFile.deleteOnExit();
PrintWriter pw = new PrintWriter(tmpFile);
String path = new File(getClass().getResource("test.wav").toURI()).getPath();
pw.println(path);
pw.println(path);
pw.print(path);
assertFalse(pw.checkError());
pw.close();
dataSource.setBatchFile(tmpFile);
assertThat(dataSource.getData(), instanceOf(DataStartSignal.class));
assertThat(dataSource.getData(), instanceOf(DoubleData.class));
Data d;
while ((d = dataSource.getData()) instanceof DoubleData);
assertThat(d, instanceOf(DataEndSignal.class));
assertThat(numFileStarts, equalTo(3));
assertThat(numFileEnds, equalTo(3));
}
private void runAssert(String fileName) throws DataProcessingException,
URISyntaxException {
AudioFileDataSource dataSource = ConfigurationManager
.getInstance(AudioFileDataSource.class);
File file = new File(getClass().getResource(fileName).toURI());
dataSource.setAudioFile(file, null);
assertThat(dataSource.getData(), instanceOf(DataStartSignal.class));
assertThat(dataSource.getData(), instanceOf(DoubleData.class));
Data d;
while ((d = dataSource.getData()) instanceof DoubleData);
assertThat(d, instanceOf(DataEndSignal.class));
}
}