Package edu.cmu.sphinx.frontend

Source Code of edu.cmu.sphinx.frontend.FrontendElementTest

package edu.cmu.sphinx.frontend;

import static java.lang.Double.parseDouble;
import static java.lang.Float.parseFloat;
import static java.lang.Integer.parseInt;
import static java.lang.Math.abs;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.closeTo;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.instanceOf;

import java.io.*;
import java.net.URL;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import edu.cmu.sphinx.frontend.endpoint.SpeechEndSignal;
import edu.cmu.sphinx.frontend.endpoint.SpeechStartSignal;
import edu.cmu.sphinx.frontend.util.AudioFileDataSource;
import edu.cmu.sphinx.util.props.ConfigurationManager;


public class FrontendElementTest {

    @DataProvider(name = "frontendProvider")
    public Object[][] provide() {
        return new Object[][] {
            {
                "preempTest",
                "after-preemp.dump"},
            {
                "windowTest",
                "after-window.dump"},
            {
                "fftTest",
                "after-fft.dump"},
            {
                "melTest",
                "after-mel.dump"},
            {
                "dctTest",
                "after-dct.dump"},
            {
                "cmnTest",
                "after-cmn.dump"},
            {
                "feTest",
                "after-feature.dump"}};
    }

    @Test(dataProvider = "frontendProvider")
    public void testElement(String frontendName, String name)
            throws IOException {
        URL url = getClass().getResource("frontend.xml");
        ConfigurationManager cm = new ConfigurationManager(url);

        AudioFileDataSource ds = cm.lookup("audioFileDataSource");
        ds.setAudioFile(getClass().getResource("test-feat.wav"), null);

        FrontEnd frontend = cm.lookup(frontendName);
        compareDump(frontend, name);
    }

    private void compareDump(FrontEnd frontend, String name)
            throws NumberFormatException, DataProcessingException, IOException {
        InputStream stream = getClass().getResource(name).openStream();
        Reader reader = new InputStreamReader(stream);
        BufferedReader br = new BufferedReader(reader);
        String line;
       
        while (null != (line = br.readLine())) {
            Data data = frontend.getData();

            if (line.startsWith("DataStartSignal"))
                assertThat(data, instanceOf(DataStartSignal.class));
            if (line.startsWith("DataEndSignal"))
                assertThat(data, instanceOf(DataEndSignal.class));
            if (line.startsWith("SpeechStartSignal"))
                assertThat(data, instanceOf(SpeechStartSignal.class));
            if (line.startsWith("SpeechEndSignal"))
                assertThat(data, instanceOf(SpeechEndSignal.class));

            if (line.startsWith("Frame")) {
                assertThat(data, instanceOf(DoubleData.class));

                double[] values = ((DoubleData) data).getValues();
                String[] tokens = line.split(" ");

                assertThat(values.length, equalTo(parseInt(tokens[1])));

                for (int i = 0; i < values.length; i++)
                    assertThat(values[i],
                               closeTo(parseDouble(tokens[2 + i]),
                                       abs(0.01 * values[i])));
            }

            if (line.startsWith("FloatFrame")) {
                String[] tokens = line.split(" ");
                Assert.assertTrue(data instanceof FloatData);
                float[] values = ((FloatData) data).getValues();
                Assert.assertEquals(values.length,
                                    (int) Integer.valueOf(tokens[1]));
                for (int i = 0; i < values.length; i++)
                    assertThat(Double.valueOf(values[i]),
                               closeTo(parseFloat(tokens[2 + i]),
                                       abs(0.01 * values[i])));
            }
        }
    }
}
TOP

Related Classes of edu.cmu.sphinx.frontend.FrontendElementTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.