我们正在使用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();
}
;
}
}
正如CMUSphinx论坛上所解释的那样,您有多个问题:
-
你需要添加
bb.order(ByteOrder.LITTLE_ENDIAN);
描述给一个文件作为输入到Pocketsphinx on Android -
您的输入文件应该有PCM格式16khz 16位单声道。如果您想提交一些编码文件,您需要首先将其解码为原始数据。