概述
文章目录
- 【1】mplayer
- 【2】科大讯飞离线语音包
【1】mplayer
1.将mplayer放到开发板的bin目录下
system(“mplayer 1.avi &”); // &为后台播放视频
播放音乐
system(“madplay -a -10 xxx.mp3”);//-a 音量控制 范围(-175~+18)
暂停播放
system(“killall -STOP madplay &”);
恢复播放
system(“killall -CONT madplay &”);
停止
system(“killall madplay”);
madplay终止
system(“killall -9 madplay”);
思路 :如何保证将电脑的音频或视频传输给开发板,保持数据完整
1.先发送文件大小
2.再发送数据内容
3.检测发送的数据与接收的数据大小是否一致
【2】科大讯飞离线语音包
链接:https://pan.baidu.com/s/1Dgo8HGs3_Bfw05M0dCbS4A?pwd=vxpz
提取码:vxpz
README文件
README for Linux_aitalk
bin:
|-- msc
|-- msc.cfg(作用:msc调试、生成msc日志)
|-- res
|-- asr(资源文件)
|-- wav
|-- ddhghlj.pcm
|-- ddhgdw.pcm
|-- call.bnf
doc:
|-- readme.txt
include:调用SDK所需头文件
libs:
|-- x86
|-- libmsc.so(32位动态库)
|-- x64
|-- libmsc.so(64位动态库)
samples:
|-- asr_sample
|-- asr_sample.c
|-- Makefile
|-- 32bit_make.sh
|-- 64bit_make.sh
|-- asr_record_sample
|-- formats.h
|-- linuxrec.h
|-- linuxrec.c
|-- speech_recognizer.h
|-- speech_recognizer.c
|-- asr_record_sample.c
|-- Makefile
|-- 32bit_make.sh
|-- 64bit_make.sh
asr_offline_sample.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include "../../include/qisr.h"
#include "../../include/msp_cmn.h"
#include "../../include/msp_errors.h"
#define SAMPLE_RATE_16K (16000)
#define SAMPLE_RATE_8K (8000)
#define MAX_GRAMMARID_LEN (32)
#define MAX_PARAMS_LEN (1024)
const char * ASR_RES_PATH = "fo|res/asr/common.jet"; //离线语法识别资源路径
const char * GRM_BUILD_PATH = "res/asr/GrmBuilld"; //构建离线语法识别网络生成数据保存路径
const char * GRM_FILE = "call.bnf"; //构建离线识别语法网络所用的语法文件
const char * LEX_NAME = "contact"; //更新离线识别语法的contact槽(语法文件为此示例中使用的call.bnf)
typedef struct _UserData {
int build_fini; //标识语法构建是否完成
int update_fini; //标识更新词典是否完成
int errcode; //记录语法构建或更新词典回调错误码
char grammar_id[MAX_GRAMMARID_LEN]; //保存语法构建返回的语法ID
}UserData;
const char *get_audio_file(void); //选择进行离线语法识别的语音文件
int build_grammar(UserData *udata); //构建离线识别语法网络
int update_lexicon(UserData *udata); //更新离线识别语法词典
int run_asr(UserData *udata); //进行离线语法识别
const char* get_audio_file(void)
{
char key = 0;
while(key != 27) //按Esc则退出
{
printf("请选择音频文件:n");
printf("1.打电话给丁伟n");
printf("2.打电话给黄辣椒n");
key = getchar();
getchar();
switch(key)
{
case '1':
printf("n1.打电话给丁伟n");
return "wav/ddhgdw.pcm";
case '2':
printf("n2.打电话给黄辣椒n");
return "wav/ddhghlj.pcm";
default:
continue;
}
}
exit(0);
return NULL;
}
int build_grm_cb(int ecode, const char *info, void *udata)
{
UserData *grm_data = (UserData *)udata;
if (NULL != grm_data) {
grm_data->build_fini = 1;
grm_data->errcode = ecode;
}
if (MSP_SUCCESS == ecode && NULL != info) {
printf("构建语法成功! 语法ID:%sn", info);
if (NULL != grm_data)
snprintf(grm_data->grammar_id, MAX_GRAMMARID_LEN - 1, info);
}
else
printf("构建语法失败!%dn", ecode);
return 0;
}
int build_grammar(UserData *udata)
{
FILE *grm_file = NULL;
char *grm_content = NULL;
unsigned int grm_cnt_len = 0;
char grm_build_params[MAX_PARAMS_LEN] = {NULL};
int ret = 0;
grm_file = fopen(GRM_FILE, "rb");
if(NULL == grm_file) {
printf("打开"%s"文件失败![%s]n", GRM_FILE, strerror(errno));
return -1;
}
fseek(grm_file, 0, SEEK_END);
grm_cnt_len = ftell(grm_file);
fseek(grm_file, 0, SEEK_SET);
grm_content = (char *)malloc(grm_cnt_len + 1);
if (NULL == grm_content)
{
printf("内存分配失败!n");
fclose(grm_file);
grm_file = NULL;
return -1;
}
fread((void*)grm_content, 1, grm_cnt_len, grm_file);
grm_content[grm_cnt_len] = '