#include #include #include "zlinuxcomponents/zmainhelper.hpp" // #include "configs/gconfig.hpp" #include "iflytopcpp/core/spdlogfactory/logger.hpp" #include "iflytopcpp/core/thread/thread.hpp" #include "spdlog/spdlog.h" #include "version.hpp" #include "zlinuxcomponents/rootfs_auto_update/rootfs_auto_update.hpp" #include "zservice_container/zservice_container.hpp" // #include "service/device_io_service.hpp" #include "service/device_io_service_mock.hpp" #include "service/light_control_service.hpp" #include "service/report_service.hpp" #include "zlinuxcomponents/aiui_ws/aiui_service.hpp" // #include "zlinuxcomponents/aiui_ws/aiui.h" // #include "audio_process_api.h" ZMAIN(); #define LEN 128 // Process Length Should Be 128 ,Do not Modify #define MIC_CH 4 void Main::onSIGINT() { exit(0); } int Main::main(int argc, char *argv[]) { FILE *mic_fd = NULL; FILE *ref_fd = NULL; FILE *out_fd1 = NULL; FILE *out_fd2 = NULL; short aecout_buff[LEN * MIC_CH]; short mic_buff[LEN * MIC_CH]; short ref_buff[LEN]; short asr_buf[LEN]; // 6mic // float coord_data[18] = {0.04,0,0, 0.02,-0.0346,0, -0.02,-0.0346,0, -0.04,0,0, -0.02,0.0346,0, 0.02,0.0346,0}; // 4mic float coord_data[18] = {0.038, 0, 0, 0, -0.038, 0, -0.038, 0, 0, 0, 0.038, 0, 0, 0, 0, 0, 0, 0}; // 2mic // float coord_data[18] = {0.038,0,0, -0.038,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0}; int aec_state = 1; int aec_farend = 1; int vad_state = 1; float doa1, doa2, doa3; if (argc != 5) { printf("usage:audio_test mic_file ref_file asr_file1 wkp_file2\n"); return -1; } mic_fd = fopen(argv[1], "rb"); // mic_fd = fopen("zero.pcm","rb"); if (mic_fd == NULL) { printf("open mic file failed!\n"); return -1; } ref_fd = fopen(argv[2], "rb"); // ref_fd = fopen("zero.pcm","rb"); if (ref_fd == NULL) { printf("open ref file failed!\n"); fclose(mic_fd); mic_fd = 0; return -1; } out_fd1 = fopen(argv[3], "wb"); // out_fd1 = fopen("asr.pcm","wb"); if (out_fd1 == NULL) { printf("open output file1 failed!\n"); fclose(mic_fd); fclose(ref_fd); mic_fd = 0; ref_fd = 0; return -1; } out_fd2 = fopen(argv[4], "wb"); // out_fd2 = fopen("wkp.pcm","wb"); if (out_fd2 == NULL) { printf("open output file2 failed!\n"); fclose(mic_fd); fclose(ref_fd); fclose(out_fd1); mic_fd = 0; ref_fd = 0; out_fd1 = 0; return -1; } float *audio_aec_obj = audio_aec_init(MIC_CH); if (audio_aec_obj == NULL) { printf("Audio Aec Init Error\n"); fclose(mic_fd); fclose(ref_fd); fclose(out_fd1); fclose(out_fd2); return -1; } float *audio_doa_obj = audio_doa_init(MIC_CH, coord_data, 0, 360); if (audio_doa_obj == NULL) { printf("Audio doa Init Error\n"); fclose(mic_fd); fclose(ref_fd); fclose(out_fd1); fclose(out_fd2); return -1; } float *audio_gsc_obj = audio_gsc_init(MIC_CH, coord_data); if (audio_gsc_obj == NULL) { printf("Audio gsc Init Error\n"); fclose(mic_fd); fclose(ref_fd); fclose(out_fd1); fclose(out_fd2); return -1; } float *audio_agc_obj = audio_agc_init(128, 1, 24000.0); int frame = 0; int doavad; while (1) { if (fread(mic_buff, sizeof(short), LEN * MIC_CH, mic_fd) <= 0) break; if (fread(ref_buff, sizeof(short), LEN, ref_fd) <= 0) break; if (audio_aec_process(audio_aec_obj, mic_buff, ref_buff, aecout_buff, &aec_state, &aec_farend)) break; if (audio_doa_process(audio_doa_obj, aecout_buff, aec_state, aec_farend, &doa1, &doa2, &doa3, &vad_state)) break; doavad = vad_state; // printf("doa:%d,%d,%d\n",(short)doa1, (short)doa2, (short)doa3); if (audio_gsc_fixed(audio_gsc_obj, aecout_buff, aec_state, aec_farend, 0.0, 180.0, asr_buf, &vad_state)) break; printf("doa:%5d,%5d,%5d vad:%d,%d\n", (short)doa1, (short)doa2, (short)doa3, doavad, vad_state); if (audio_agc_process(audio_agc_obj, asr_buf, asr_buf, vad_state, aec_state)) break; // printf("frame:%d\n",frame++); fwrite(asr_buf, sizeof(short), LEN, out_fd1); fwrite(aecout_buff, sizeof(short), LEN * MIC_CH, out_fd2); } audio_aec_uninit(audio_aec_obj); audio_doa_uninit(audio_doa_obj); audio_gsc_uninit(audio_gsc_obj); audio_agc_uninit(audio_agc_obj); fclose(mic_fd); fclose(ref_fd); fclose(out_fd1); fclose(out_fd2); return 0; }