尊敬的開發者朋友,歡迎您選擇科大訊飛開放平臺。本文檔旨在幫助HarmonyOS 應用開發者在程序中快速接入AIKit HarmonyOS SDK。作為開發者,您只需要進行簡單配置,就可以在您的應用中使用AIKit提供的各種AI能力。
關于SDK的具體使用方法,請仔細閱讀下面的文檔。
http://teknisi-computer.com/
中注冊成為開發者并創建一款應用,您將獲得標識您應用的唯一ID。depedencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
}
權限 | 用途 |
---|---|
INTERNET | 允許程序聯網的權限 |
MICROPHONE | 允許應用檢測網絡連接狀態 |
"reqPermissions": [
{
"name": "harmonyos.permission.INTERNET",
"reason": "the app need internet"
},
{
"name": "harmonyos.permission.MICROPHONE",
"reason": "the app need microphone",
"usedScene": {
"ability": [
"ccom.iflytek.aiaa.MainAbility"
],
"when": "always"
}
}
]
// 初始值化時 將 appid、apikey 和 apisecret 傳到
SpeechUtility.getInstance().init(getContext(),
"xxxxx", // appid
"xxxxx", // apikey
"xxxxx" // apisecret
);
參數Key | 名稱 | 是否必傳 |
---|---|---|
context | 鴻蒙系統的 Context | Y |
APPID | 應用id | Y |
APIKEY | API Key | Y |
APISERCET | API密鑰 | Y |
使用SpeechUtility.getInstance().voiceRecognize()
方法,參考代碼如下:
/**
* 音頻視頻文書轉文案 將開放包中的mp3轉成文
*/
private void audioFiles2String() {
try {
// 獲取一個工程中的 檢驗的音頻軟件
String mp3Path = "resources/rawfile/test.mp3";
RawFileEntry rawFileEntry = getContext().getResourceManager().getRawFileEntry(mp3Path);
Resource resource = rawFileEntry.openRawFile();
// 組建微信語音聽寫基本參數類:IatParam
IatParam iatParam = new IatParam();
// 設定雙聲道文件目錄的格式文件
iatParam.setEncoding(IatParam.Encoding.lame);
SpeechUtility instance = SpeechUtility.getInstance();
// 開使語音說話自動識別
instance.voiceRecognize(iatParam, resource, new ResultCallBack<IatResult>() {
@Override
public void onResult(IatResult result) {
// 得到 數據資料回掉 需要注意 選股在子線程制定
handler.postTask(() -> {
String s = CommonResultParser.parseIatResult(result.getData());
textField.append(s);
});
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
使用錄音功能需要先在Ability
類中動態申請"harmonyos.permission.MICROPHONE"
權限,參考代碼如下:
if (verifySelfPermission("harmonyos.permission.MICROPHONE") != IBundleManager.PERMISSION_GRANTED) {
// 廣泛應用未被獲取管理員權限
if (canRequestPermission("harmonyos.permission.MICROPHONE")) {
// 能不能需要申批彈框代理權(第一次 申批并且用戶賬戶未選擇阻止且不需要顯示系統)
requestPermissionsFromUser(new String[]{"harmonyos.permission.MICROPHONE"},
REQUEST_MICROPHONE);
} else {
// 顯視軟件應用都要權限管理的緣由,顯示信息用戶名進去設備權限
}
} else {
// 授權已被發放
}
/**
* 逐漸開始錄音功能
*/
private void startRecord() {
// 使用語音說話聽寫性能類:IatParam
IatParam iatParam = new IatParam();
iatParam.setEncoding(IatParam.Encoding.raw);
SpeechUtility.getInstance().startRecord(iatParam, new ResultCallBack<IatResult>() {
@Override
public void onResult(IatResult result) {
// 添加資料回掉 還要注意 乖離率指標在子線程制定
handler.postTask(() -> {
String s = CommonResultParser.parseIatResult(result.getData());
textField.append(s);
});
}
});
}
/**
* 終止通話錄音
*/
private void stopRecord() {
SpeechUtility.getInstance().stopRecord();
}
語音聽寫參數類 IatParam
支持設置的參數見下表:
參數名稱 | 數據類型 | 名稱 | 是否必須 | 說明 |
---|---|---|---|---|
encoding | string | 音頻格式 | Y | 目前僅支持“ lame” 、“raw ”,mp3文件請使用“ lame”,pcm輸入時使用 “raw ” |
ptt | int | 是否開啟標點識別 | N | 0:不開啟標點識別, 1:開啟標點識別,默認不開啟 |
nunum | int | 是否把中文數字轉換成阿拉伯數字 | N | 0:關閉, 1:開啟 默認關閉 |
dwa | string | pgs | N | 最小長度:0, 最大長度:10 |
evl | int | engine vad link | N | 0:關, 1:開啟 |
proc | int | 是否使用后處理 | N | 0:關, 1:開 |
nbest | int | 句子級別多候選個數 | N | 最小值:0, 最大值:5 |
wbest | int | 詞級別多候選個數 | N | 最小值:0, 最大值:5 |
pvinfo | int | 在 pgs 結果中展示vad信息 | N | 0:關, 1:開 |
aqc | int | aqc | N | 0:關, 1:開 |
ltc | int | 中英文篩選功能 | N | 最小值:0, 最大值:3 |
vad_enable | bool | 使能VAD | N | true/false |
vad_eos | int | 后端點 | N | 最小值:0, 最大值:60000,當vad_enable為true時有效 |
vrto | int | vad前置端點超時時間 | N | 最小值:0, 最大值:60000 |
JSON字段 | 英文全稱 | 類型 | 說明 |
---|---|---|---|
sn | sentence | number | 第幾句 |
ls | last sentence | boolean | 是否最后一句 |
bg | begin | number | 保留字段,無需關注 |
ed | end | number | 保留字段,無需關注 |
ws | words | array | 詞 |
cw | chinese word | array | 中文分詞 |
w | word | string | 單字 |
sc | score | number | 分數 |
{
"sn": 1,
"ls": true,
"bg": 0,
"ed": 0,
"ws": [
{
"bg": 0,
"cw": [
{
"w": "這里",
"sc": 0
}
]
},
{
"bg": 0,
"cw": [
{
"w": "的",
"sc": 0
}
]
},
{
"bg": 0,
"cw": [
{
"w": "氣溫",
"sc": 0
}
]
},
{
"bg": 0,
"cw": [
{
"w": "咋個樣",
"sc": 0
}
]
},
{
"bg": 0,
"cw": [
{
"w": "。",
"sc": 0
}
]
}
]
}
與語音聽寫相反,語音合成是將一段文字轉換為語音,可根據需要合成出不同音色、語速和語調的聲音,讓機器像人一樣開口說話。文字格式為“utf8”。
語音合成使用SpeechSynthesizer
接口,示例代碼如下
/**
* 就開始制成
*/
private void startTts() {
String stringSource = "那段話將被分解為語音聊天";
// 保持個臨時檔案檔案保持分解的信息
File externalCacheDir = getContext().getExternalCacheDir();
File file = new File(externalCacheDir, "tts_test.mp3");
if (file.exists()) {
file.delete();
}
SpeechUtility instance = SpeechUtility.getInstance();
TtsParam ttsParam = new TtsParam();
instance.voiceSynthesise(ttsParam, stringSource, new ResultCallBack<TtsResult>() {
@Override
public void onResult(TtsResult result) {
// 提高數據資料回掉 要留意 乖離率指標在子線程審理
// result.getData() 為提煉的語音聊天數值
FileUtil.append(file, result.getData());
// 合并之后
if (result.getStatus() == SpeechUtility.StatusCode.END) {
handler.postTask(() -> showToast("合并之后"));
// 已經錄制
playMp3(file);
}
}
}
);
}
/**
* 播放軟件音視頻
*
* @param file 源zip文件
*/
private void playMp3(File file) {
try {
Player player = new Player(getContext());
FileInputStream in = new FileInputStream(file);
// 從設置流調用FD的對象
FileDescriptor fd = in.getFD();
Source source = new Source(fd);
player.setSource(source);
player.prepare();
player.play();
} catch (Exception e) {
e.printStackTrace();
}
}
語音合成參數類 TtsParam
支持設置的參數見下表:
參數名稱 | 數據類型 | 名稱 | 是否必須 | 說明 |
---|---|---|---|---|
encoding | string | 輸出音頻格式 | N | 目前僅支持“ lame” (mp3文件) |
speed | int | 合成語速 | N | 默認50,取值范圍:[0-100] |
volume | int | 合成音量 | N | 默認50,取值范圍:[0-100] |
pitch | int | 合成語調 | N | 默認50,取值范圍:[0-100] |
sample_rate | int | 采樣率 | N | 暫時只支持16000 |
channels | int | 聲道數 | N | 可選值1,2.默認值1 |
bit_depth | int | 位深 | N | 8,16默認值16 |
vcn | string | 發音人 | N | 可選值x2_lzy:x2_lzy, x2_chongchong:x2_chongchong, x2_yifei:x2_yifei, x2_xiaopei:x2_xiaopei, x2_xiaoyuan:x2_xiaoyuan |
public static SpeechUtility getInstance()
返回:
SpeechUtilitypublic void init(harmonyos.app.Context context,
java.lang.String appId,
java.lang.String apiKey,
java.lang.String apiSecret)
參數:
context
- context
appId
- appId
apiKey
- apiKey
apiSecret
- apiSecret
public void voiceRecognize(com.iflytek.cloud.param.IatParam param,
com.iflytek.cloud.result.ResultCallBack<com.iflytek.cloud.result.IatResult> callBack)
參數:
param
- 語音識別入參
callBack
- ResultCallBack
public void voiceRecognize(com.iflytek.cloud.param.IatParam param,
java.io.InputStream resource,
com.iflytek.cloud.result.ResultCallBack<com.iflytek.cloud.result.IatResult> callBack)
參數:
param
- 語音轉寫的參數
resource
- 語音流
callBack
- 回調
public void startRecord(com.iflytek.cloud.param.IatParam iatParam,
com.iflytek.cloud.result.ResultCallBack<com.iflytek.cloud.result.IatResult> callBack)
參數:
iatParam
- IatParam
callBack
- ResultCallBack
public boolean isRecording()
返回:
booleanpublic void stopRecord()
public void voiceSynthesise(com.iflytek.cloud.param.TtsParam param,
java.lang.String stringSource,
com.iflytek.cloud.result.ResultCallBack<com.iflytek.cloud.result.TtsResult> callBack)
參數:
param
- TtsParam 參數
stringSource
- 待合成的內容
callBack
- 合成回調
public void writeData(java.io.InputStream resource)
參數:
resource
- 數據源
public void writeData(java.io.File file)
throws java.io.FileNotFoundException
參數:
file
- 數據源
拋出:
java.io.FileNotFoundException
- FileNotFoundException
public void writeData(byte[] inData)
參數:
inData
- 數據源
public void writeData(byte[] inData,
int dataStatus)
參數:
inData
- 數據源
dataStatus
- 寫入的狀態碼
public void writeDataEnd()
public destroy()
說明:語音轉寫的入參封裝類, 可通過該類的set
方法設置參數,也可以通過put(key,value)
方式設置參數。
說明:語音合成的入參封裝類, 可通過該類的set
方法設置參數,也可以通過put(key,value)
方式設置參數。
答:的標準應用 HarmonyOS 1.0的華為手機版本的。
答:巧用 Version.getVersion()可有 SDK 型號號。
答:SDK不不認多路請求。