1

我们正在使用 pocketsphinx 来帮助我们将 .wav 文件转换为文本文件。我们不知道为什么它给我们一个奇怪的输出,因为它只给我们<s>并且</s>在转换之后。我们使用 cmusphinx 社区提供的默认字典、语言模型和声学模型。

这是我们用于转换的代码:

package com.example.saling_wika.saling_wika;


import android.app.Activity;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

import edu.cmu.pocketsphinx.Assets;
import edu.cmu.pocketsphinx.Config;
import edu.cmu.pocketsphinx.Decoder;
import edu.cmu.pocketsphinx.Segment;

import static android.support.v7.widget.StaggeredGridLayoutManager.TAG;
import static junit.framework.Assert.fail;





public class ConversionModule extends Activity {
    static {
        System.loadLibrary("pocketsphinx_jni");
    }
    Config c;
    Decoder ps;
    FileInputStream stream;

    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        setContentView(R.layout.main);

        c = Decoder.defaultConfig();

    /*Configuring decoder object*/
        c.setString("-hmm", new File(Environment.getExternalStorageDirectory() + "/Android/data/com.example.saling_wika.saling_wika/files/sync", "en-us-ptm").getPath());
        c.setString("-dict", new File(Environment.getExternalStorageDirectory() + "/Android/data/com.example.saling_wika.saling_wika/files/sync", "cmudict-en-us.dict").getPath());
        c.setString("-lm", new File(Environment.getExternalStorageDirectory() + "/Android/data/com.example.saling_wika.saling_wika/files/sync", "weather.dmp").getPath());
        c.setBoolean("-allphone_ci", true);


        ps = new Decoder(c);


        try {
            final File file = new File(AudioToConvert.pathko);
            Uri uri = Uri.fromFile(file);
            File auxFile = new File(uri.getPath());
            stream = new FileInputStream(auxFile);


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }




        ps.startUtt();
        byte[] b = new byte[4096];
        try {
            int nbytes;
            while ((nbytes = stream.read(b)) >= 0) {
                ByteBuffer bb = ByteBuffer.wrap(b, 0, nbytes);
                short[] s = new short[nbytes / 2];
                bb.asShortBuffer().get(s);
                ps.processRaw(s, nbytes / 2, false, false);
            }
        } catch (IOException e) {

        }
        ps.endUtt();
        //  System.out.println(ps.hyp().getHypstr());
        Toast.makeText(getApplicationContext(), ps.hyp().getHypstr(), Toast.LENGTH_LONG).show();
        for (Segment seg : ps.seg()) {
            //  System.out.println(seg.getWord());
            Toast.makeText(getApplicationContext(),seg.getWord(), Toast.LENGTH_LONG).show();
        }
        ;


    }
}
4

1 回答 1

0

正如CMUSphinx 论坛上所解释的,您有多个问题:

  1. 您需要按照将文件作为输入添加到 Android 上的 Pocketsphinx 中bb.order(ByteOrder.LITTLE_ENDIAN);所述添加

  2. 您的输入文件应具有 PCM 格式 16khz 16 位单声道。如果您想提交一些编码文件,您需要先将其解码为原始数据。

于 2016-10-17T11:26:35.163 回答