package com.iflytek.speech.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONObject;
import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechUtility;
import android.content.Context;
/**
* 功能性函数扩展类
*/
public class FucUtil {
/**
* 读取asset目录下文件。
* @return content
*/
public static String readFile(Context mContext,String file,String code)
{
int len = 0;
byte []buf = null;
String result = "";
try {
InputStream in = mContext.getAssets().open(file);
len = in.available();
buf = new byte[len];
in.read(buf, 0, len);
result = new String(buf,code);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 将字节缓冲区按照固定大小进行分割成数组
* @param buffer 缓冲区
* @param length 缓冲区大小
* @param spsize 切割块大小
* @return
*/
public ArrayList<byte[]> splitBuffer(byte[] buffer,int length,int spsize)
{
ArrayList<byte[]> array = new ArrayList<byte[]>();
if(spsize <= 0 || length <= 0 || buffer == null || buffer.length < length)
return array;
int size = 0;
while(size < length)
{
int left = length - size;
if(spsize < left)
{
byte[] sdata = new byte[spsize];
System.arraycopy(buffer,size,sdata,0,spsize);
array.add(sdata);
size += spsize;
}else
{
byte[] sdata = new byte[left];
System.arraycopy(buffer,size,sdata,0,left);
array.add(sdata);
size += left;
}
}
return array;
}
/**
* 获取语记是否包含离线听写资源,如未包含跳转至资源下载页面
*1.PLUS_LOCAL_ALL: 本地所有资源
2.PLUS_LOCAL_ASR: 本地识别资源
3.PLUS_LOCAL_TTS: 本地合成资源
*/
public static String checkLocalResource(){
String resource = SpeechUtility.getUtility().getParameter(SpeechConstant.PLUS_LOCAL_ASR);
try {
JSONObject result = new JSONObject(resource);
int ret = result.getInt(SpeechUtility.TAG_RESOURCE_RET);
switch (ret) {
case ErrorCode.SUCCESS:
JSONArray asrArray = result.getJSONObject("result").optJSONArray("asr");
if (asrArray != null) {
int i = 0;
// 查询否包含离线听写资源
for (; i < asrArray.length(); i++) {
if("iat".equals(asrArray.getJSONObject(i).get(SpeechConstant.DOMAIN))){
//asrArray中包含语言、方言字段,后续会增加支持方言的本地听写。
//如:"accent": "mandarin","language": "zh_cn"
break;
}
}
if (i >= asrArray.length()) {
SpeechUtility.getUtility().openEngineSettings(SpeechConstant.ENG_ASR);
return "没有听写资源,跳转至资源下载页面";
}
}else {
SpeechUtility.getUtility().openEngineSettings(SpeechConstant.ENG_ASR);
return "没有听写资源,跳转至资源下载页面";
}
break;
case ErrorCode.ERROR_VERSION_LOWER:
return "语记版本过低,请更新后使用本地功能";
case ErrorCode.ERROR_INVALID_RESULT:
SpeechUtility.getUtility().openEngineSettings(SpeechConstant.ENG_ASR);
return "获取结果出错,跳转至资源下载页面";
case ErrorCode.ERROR_SYSTEM_PREINSTALL:
//语记为厂商预置版本。
default:
break;
}
} catch (Exception e) {
SpeechUtility.getUtility().openEngineSettings(SpeechConstant.ENG_ASR);
return "获取结果出错,跳转至资源下载页面";
}
return "";
}
/**
* 读取asset目录下音频文件。
*
* @return 二进制文件数据
*/
public static byte[] readAudioFile(Context context, String filename) {
try {
InputStream ins = context.getAssets().open(filename);
byte[] data = new byte[ins.available()];
ins.read(data);
ins.close();
return data;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}