add 2mic and 4mic res toghter, thus support 2mic and 4mic at the same time

This commit is contained in:
wangzijiao 2019-01-11 16:07:33 +08:00
parent 5fa5110f62
commit a2ebc69e64
13 changed files with 88 additions and 4 deletions

View File

@ -47,10 +47,10 @@ start_voice() {
echo $DBUS_SESSION_BUS_ADDRESS >> $LOG
procd_open_instance
procd_set_param oom_adj $OOM_ADJ
procd_set_param command $PROG_VOICE --work-mode=2
procd_set_param command $PROG_VOICE --work-mode=3
procd_set_param respawn
procd_append_param limits core=unlimited
procd_set_param env DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS --work-mode=2
procd_set_param env DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS --work-mode=3
procd_close_instance
}

View File

@ -62,6 +62,7 @@ typedef enum {
WorkMode_R311_PV1 = 0,
WorkMode_R311_PV1_CES = 1,
WorkMode_R311_C1_EVB = 2,
WorkMode_R311_C1_EVB_2MIC = 3,
} WorkMode;
void setVss(VoiceSessionStatus st);

View File

@ -568,7 +568,8 @@ static void usage() {
"-l, --list-devices list all soundcards and digital audio "
"devices\n"
"-L, --list-pcms list device names\n"
"-w, --work-mode=# work mode: 0: r311_pv1(dmic) 1:r311_pv1_ces(nmic) 2: r311_c1evb\n"
"-w, --work-mode=# work mode: 0: r311_pv1(dmic) 1:r311_pv1_ces(nmic) 2: r311_c1evb_4mic\n"
" 3:r311_c1evb_2mic\n"
"-f, --list-format list all format in alsa\n"
"-r, --just-record Only record voice to file\n"
"-t, --type=# sample format (case insensitive): raw,wav\n"

View File

@ -299,6 +299,33 @@ int Netease_nduilite_init(duilite_callback wakeup_callback,
char *vad_cfg;
switch (getWorkMode()) {
case WorkMode_R311_C1_EVB_2MIC:
auth_cfg = "{\"appKey\":\"15205715844583be\",\"secretKey\":"
"\"e3eee41c3276bd027f2814f6cf3b8991\",\"deviceId\": \"28ede0d08139\","
"\"provision\":\"/usr/share/netease/duilite/auth/"
"aiengine-2.9.5-15205715844583be.provision\", "
"\"serialNumber\":\"/mnt/UDISK/device.number\"}";
///*初始化时默认采用夜间唤醒阈值thresh=0.59;major=0;thresh2=0.36
///时间同步成功后再根据实际时间来切换阈值*/
cfg = "{\"aecBinPath\": "
"\"/usr/share/netease/duilite/fespa/"
"AEC_ch4-2-ch2_1ref_common_20180731_v0.9.4.bin\", "
"\"wakeupBinPath\": "
"\"/usr/share/netease/duilite/fespa/"
"wakeup_aifar_comm_20180104.bin\", "
"\"beamformingBinPath\": "
"\"/usr/share/netease/duilite/fespa/"
"UDA_asr_ch2_2_ch2_30mm_20181129_v1.1.0.8_asrpost0.bin\", "
"\"env\": \"words=di da di da;thresh=0.05;major=0;dcheck=0;thresh2=0.05;\", "
"\"rollBack\": 0}";
#if USED_NETEASE_DUILITE_VAD
vad_cfg = "{\"resBinPath\": "
"\"/usr/share/netease/duilite/vad/"
"vad_aihome_v0.8.bin\",\"pauseTime\": 500}";
#endif
break;
case WorkMode_R311_C1_EVB:
auth_cfg = "{\"appKey\":\"15205715844583be\",\"secretKey\":"
"\"e3eee41c3276bd027f2814f6cf3b8991\",\"deviceId\": \"28ede0d08139\","

View File

@ -453,6 +453,18 @@ static void *RecordThread(void *param) {
exit(1);
}
break;
case WorkMode_R311_C1_EVB_2MIC:
#define ADC_CH_NUM 4
#define VIRTUAL_CH 0
#define BIT_PER_CH 16
tmpbufsize = record->chunk_size * (ADC_CH_NUM + VIRTUAL_CH) * BIT_PER_CH/8;
tmpbuf = (char *)calloc(1, tmpbufsize);
if (!tmpbuf) {
n_error("Can not malloc space for tmpbuf,exit!\n");
exit(1);
}
break;
}
if (record->backupfilefd > 0 &&
@ -466,6 +478,47 @@ static void *RecordThread(void *param) {
n_toast("Running:%d, work mode:%d\n", record->runing, getWorkMode());
while (!!record->runing) {
switch (getWorkMode()) {
case WorkMode_R311_C1_EVB_2MIC:
if (pcm_read(record->pcm_cfg->adc) ==
record->pcm_cfg->adc->chunk_size) {
if (pcm_read(record) == record->chunk_size) {
short *mic = (short *)record->buffer;
short *resample = (short *)record->pcm_cfg->adc->buffer;
short *p = (short *)tmpbuf;
for (i = 0; i < record->chunk_size; i++) {
//mic
// mic no, actual sofware no
p[1 - 1] = mic[2 -1];
p[2 - 1] = mic[3 - 1];
//resample
p[3 - 1] = resample[0];
p[4 - 1] = resample[1];
resample += 2;
p += 4;
mic += 4;
}
if (record->backupfilefd > 0) {
xwrite(record->backupfilefd, tmpbuf,
tmpbufsize);
fdcount += tmpbufsize;
}
queue_write(record->queue, tmpbuf,
tmpbufsize);
memset(tmpbuf, 0, tmpbufsize);
} else {
fprintf(stderr, "short read, read %d frames/n", ret);
LOG_EX(LOG_Error, "ALSA Short Read, Read %d Frames: %d\n",
ret);
}
} else {
// read dmic data and throw
pcm_read(record);
printf("Read adc codec error!\n");
}
break;
case WorkMode_R311_C1_EVB:
if (pcm_read(record->pcm_cfg->adc) ==
record->pcm_cfg->adc->chunk_size) {
@ -646,6 +699,7 @@ static void *RecordThread(void *param) {
//exit, clear
switch (getWorkMode()) {
case WorkMode_R311_C1_EVB_2MIC:
case WorkMode_R311_C1_EVB:
if (tmpbuf) {
free(tmpbuf);
@ -714,7 +768,7 @@ int Neteasae_record_start(struct pcm_config *pcm_cfg) {
QueueReadThread, (void *)pcm_cfg->recordata);
break;
case WorkMode_R311_C1_EVB_2MIC:
case WorkMode_R311_C1_EVB:
// sndes7210.0-0040 for 4 mic
pcm_cfg->device_name = "hw:1,0";

View File

@ -0,0 +1 @@
毻氏茲咸挝葯茪湚任葹仙浫茩炍螢湚毴蓹褪认勢憺嫋墯稇墣敋紣崥珕彋屳扭轀懷垶敋姀萦轀懷槏瀿萦轀懷瀸嵮崥溳虞湋褕灁殜弽殰萦轀懷洆槏殞咻虞湋褜殤嬔寙戄虞湋褜泴茛虞墯崒枑戄泡灃殤槚憵彝哑咽萦輿殙枩毉殬枌媿嗇泡棆嫃牛校袨妺椦瀼栄灃審殮湕褱悞洑墫湚萦輿殙枩毝洬啅気泡挒溳虞殗彇崥菖萃鲜弦瓮姨陷虞瀼彺殕菖菸释鲜任是怂是虧気<EFBFBD>