demo:Sample_audio.c
起初是一大堆奇奇怪怪的问题,多数原因是库加的不全。
demo跑起来起初,无论如何无声音从喇叭输出,根据测试确实录到了pcm数据,因为用pc软件播放正常,后从硬件处看到电路图,得知左声道输出回环接到了右声道输入上,左输入声道接了mic,而喇叭接在了右输出通道上,据此猜测在左输出声道上是应该有声音的,只是被回环到右输入声道上了,将喇叭接在左输出声道上测试了下,证明确实有声音了,再接回右声道又没输出了。但我们的要求是左右输出声道都有声音出来。
查看手册,看到这一段:
根据手册,在demo中Ao启动之后调用这个接口,将左右输出通道都输出左输入声道的声音 。代码段如下:
HI_S32 SAMPLE_AUDIO_AdecAo(HI_VOID)
{
HI_S32 s32Ret;
AUDIO_DEV AoDev = SAMPLE_AUDIO_AO_DEV;
AO_CHN AoChn = 0;
AO_CHN AoChn1 = 2;
ADEC_CHN AdChn = 0;
HI_S32 s32AoChnCnt;
FILE* pfd = NULL;
AIO_ATTR_S stAioAttr;
#ifdef HI_ACODEC_TYPE_TLV320AIC31
stAioAttr.enSamplerate = AUDIO_SAMPLE_RATE_8000;
stAioAttr.enBitwidth = AUDIO_BIT_WIDTH_16;
stAioAttr.enWorkmode = AIO_MODE_I2S_MASTER;
stAioAttr.enSoundmode = SOUNDMODE;
stAioAttr.u32EXFlag = 0;
stAioAttr.u32FrmNum = 30;
stAioAttr.u32PtNumPerFrm = SAMPLE_AUDIO_PTNUMPERFRM;
stAioAttr.u32ChnCnt = CHNCNT;
stAioAttr.u32ClkSel = 1;
#else
stAioAttr.enSamplerate = AUDIO_SAMPLE_RATE_8000;
stAioAttr.enBitwidth = AUDIO_BIT_WIDTH_16;
stAioAttr.enWorkmode = AIO_MODE_I2S_MASTER;
stAioAttr.enSoundmode = SOUNDMODE;
stAioAttr.u32EXFlag = 0;
stAioAttr.u32FrmNum = 30;
stAioAttr.u32PtNumPerFrm = SAMPLE_AUDIO_PTNUMPERFRM;
stAioAttr.u32ChnCnt = CHNCNT;
stAioAttr.u32ClkSel = 0;
#endif
gs_bAioReSample = HI_FALSE;
enInSampleRate = AUDIO_SAMPLE_RATE_BUTT;
enOutSampleRate = AUDIO_SAMPLE_RATE_BUTT;
s32Ret = SAMPLE_COMM_AUDIO_CfgAcodec(&stAioAttr);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_DBG(s32Ret);
return HI_FAILURE;
}
s32Ret = SAMPLE_COMM_AUDIO_StartAdec(AdChn, gs_enPayloadType);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_DBG(s32Ret);
return HI_FAILURE;
}
s32AoChnCnt = stAioAttr.u32ChnCnt;
s32Ret = SAMPLE_COMM_AUDIO_StartAo(AoDev, s32AoChnCnt, &stAioAttr, enInSampleRate, gs_bAioReSample, NULL, 0);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_DBG(s32Ret);
return HI_FAILURE;
}
//add by mrzhang
#if 1
AUDIO_TRACK_MODE_E enTrackMode = AUDIO_TRACK_BOTH_LEFT;
s32Ret = HI_MPI_AO_SetTrackMode(AoDev, enTrackMode);
if (HI_SUCCESS != s32Ret)
{
printf("Ao set track mode failure!\n");
return s32Ret;
}
printf("mrzhang audio out test!!!\n");
#endif
s32Ret = SAMPLE_COMM_AUDIO_AoBindAdec(AoDev, AoChn, AdChn);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_DBG(s32Ret);
return HI_FAILURE;
}
pfd = SAMPLE_AUDIO_OpenAdecFile(AdChn, gs_enPayloadType);
if (!pfd)
{
SAMPLE_DBG(HI_FAILURE);
return HI_FAILURE;
}
printf("open file successful*************\n");
s32Ret = SAMPLE_COMM_AUDIO_CreatTrdFileAdec(AdChn, pfd);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_DBG(s32Ret);
return HI_FAILURE;
}
printf("bind adec:%d to ao(%d,%d) ok \n", AdChn, AoDev, AoChn);
printf("\nplease press twice ENTER to exit this sample\n");
getchar();
getchar();
s32Ret = SAMPLE_COMM_AUDIO_DestoryTrdFileAdec(AdChn);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_DBG(s32Ret);
return HI_FAILURE;
}
s32Ret = SAMPLE_COMM_AUDIO_StopAdec(AdChn);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_DBG(s32Ret);
return HI_FAILURE;
}
s32Ret = SAMPLE_COMM_AUDIO_StopAo(AoDev, s32AoChnCnt, gs_bAioReSample, HI_FALSE);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_DBG(s32Ret);
return HI_FAILURE;
}
s32Ret = SAMPLE_COMM_AUDIO_AoUnbindAdec(AoDev, AoChn, AdChn);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_DBG(s32Ret);
return HI_FAILURE;
}
return HI_SUCCESS;
}
这样分别将喇叭接在左右输出声道,测试证明左右都有声音输出了。