yangjking

yangjking

0个粉丝

8

问答

0

专栏

2

资料

yangjking  发布于  2016-11-02 16:36:14
采纳率 0%
8个问答
5420

【结帖】3516a+外接audio codec 播放出来的声音噪音很大

 

[i=s] 本帖最后由 yangjking 于 2016-11-10 17:11 编辑 [/i]

大家好,

这个问题是接着这个帖子的 [=3516a+外部auido codec输出语音有很大的噪声 http://ebaina.com/bbs/forum.php?mod=viewthread&tid=13186&fromuid=15343(出处: 易百纳论坛)]3516a+外部auido codec输出语音有很大的噪声 http://ebaina.com/bbs/forum.php?mod=viewthread&tid=13186&fromuid=15343出处: 易百纳论坛)

现在可以确定的是i2s rx得到的音频数据没有问题,但是再i2s tx输出后就会含有很大的噪音, 不知道大家有没有碰见过类似的问题,是如何解决的>.< i2s rx 收到数据后是直接丢到i2s tx的,相依的代码设置为: printf("------test 9--------\n"); / set the ai attr / stAiAttr.enSamplerate = AUDIO_SAMPLE_RATE_16000; stAiAttr.enBitwidth = AUDIO_BIT_WIDTH_16; stAiAttr.enWorkmode = AIO_MODE_I2S_SLAVE; stAiAttr.enSoundmode = AUDIO_SOUND_MODE_MONO; stAiAttr.u32EXFlag = 0; stAiAttr.u32FrmNum = 30; stAiAttr.u32PtNumPerFrm = SAMPLE_AUDIO_PTNUMPERFRM; stAiAttr.u32ChnCnt = 1; stAiAttr.u32ClkSel = 0;

/* set the ao attr */
stAoAttr = stAiAttr;
stAoAttr.enWorkmode = AIO_MODE_I2S_MASTER; 

附件是播放的声音文件,录制的是“喂喂喂”三个字。

原因, 海思的i2s设置为1bit delay,海思这边改不了,只能在audio codec那边改。

  1. 输入输出为左右声道都有声音,所以应该是AUDIO_SOUND_MODE_STERO u32ChnCnt=2。 其他无,就可以输出正常了。
易百纳技术社区文件: ai0_chn0.zip
下载
我来回答
回答7个
时间排序
认可量排序

yang1372073

0个粉丝

19

问答

0

专栏

2

资料

yang1372073 2016-11-02 17:16:39
认可0
我用cool edit pro查看了下文件属性,这应该不是你需要的吧


不确定是音频本身就这样,还是因为你在加wav头的时候加的有问题导致的,你可以存个裸流试一下,不加wav头

yangjking

0个粉丝

8

问答

0

专栏

2

资料

yangjking 2016-11-02 17:25:40
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=40727&ptid=13230]yang1372073 发表于 2016-11-2 17:16[/url]
我用cool edit pro查看了下文件属性,这应该不是你需要的吧


[/quote]

这个wav是用audacity工具导出来的。所以不是这个的问题。应该有听到“喂喂喂”吧?
当然我从Ai后录下的音频就没这种噪音。

yang1372073

0个粉丝

19

问答

0

专栏

2

资料

yang1372073 2016-11-02 17:41:10
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=40728&ptid=13230]yangjking 发表于 2016-11-2 17:25[/url]
这个wav是用audacity工具导出来的。所以不是这个的问题。应该有听到“喂喂喂”吧?
当然我从Ai后录下的 ...[/quote]

对,能听到。伴随有很多噪音,现在不好判断,你可以说下你的流程吗?比如:AI-AENC-ADEC-AO这样子,检查还是得逐步来,一步步存文件,PC播放,来确定问题在哪个环节

yangjking

0个粉丝

8

问答

0

专栏

2

资料

yangjking 2016-11-02 18:05:37
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=40731&ptid=13230]yang1372073 发表于 2016-11-2 17:41[/url]
对,能听到。伴随有很多噪音,现在不好判断,你可以说下你的流程吗?比如:AI-AENC-ADEC-AO这样子,检查 ...[/quote]

整个构架是这样的:
第一种我可以不加3516a
------------------  i2s_tx         i2s_rx  ------------------------  usb        ----------------------
| 语音采集soc | ---------------------> | 扬声器控制soc    | <-------->| pc -Audacity    |
------------------                             -------------------------              ----------------------
这样是没有问题的,录音,播放声音OK。
现在是我正在做的,第二种加入3516a
------------------ i2s_tx           i2s_rx -------------- i2s_tx     i2s_rx ---------------------  usb    --------------------
| 语音采集soc |----------------------->| 3516a    |------------------>| 扬声器控制soc |<------>| pc - Audacity |
------------------                              --------------                       ---------------------           ---------------------
这样用Audacity收集到的音频文件就有问题了,会伴随很大的噪声。
中间3516a只是做了Ai-Ao 直接绑没有用到Aenc和Adec。
录制Ai后的音频原始数据,也只是直接get后存储。代码如下:
SAMPLE_AUDIO_AiAo();
-->
        gs_bUserGetMode = HI_TRUE;
        /* bind AI to AO channel */
        if (HI_TRUE == gs_bUserGetMode)
        {
        s32Ret = SAMPLE_COMM_AUDIO_CreatTrdAiAo(AiDev, AiChn, AoDev, AoChn);
        if (s32Ret != HI_SUCCESS)
        {
            SAMPLE_DBG(s32Ret);
            return HI_FAILURE;
                }
        }
        else
        {
                s32Ret = SAMPLE_COMM_AUDIO_AoBindAi(AiDev, AiChn, AoDev, AoChn);
                if (s32Ret != HI_SUCCESS)
                {
                        SAMPLE_DBG(s32Ret);
                        return HI_FAILURE;
                }
        }
-----------------------------------------------------------
/******************************************************************************
* function : Create the thread to get frame from ai and send to ao
******************************************************************************/
HI_S32 SAMPLE_COMM_AUDIO_CreatTrdAiAo(AUDIO_DEV AiDev, AI_CHN AiChn, AUDIO_DEV AoDev, AO_CHN AoChn)
{
    SAMPLE_AI_S* pstAi = NULL;

    pstAi = &gs_stSampleAi[AiDev * AIO_MAX_CHN_NUM + AiChn];
    pstAi->bSendAenc = HI_FALSE;
    pstAi->bSendAo = HI_TRUE;
    pstAi->bStart = HI_TRUE;
    pstAi->AiDev = AiDev;
    pstAi->AiChn = AiChn;
    pstAi->AoDev = AoDev;
    pstAi->AoChn = AoChn;

    pthread_create(&pstAi->stAiPid, 0, SAMPLE_COMM_AUDIO_AiProc, pstAi);

    return HI_SUCCESS;
}
--------------------------------------------------------------------------
void* SAMPLE_COMM_AUDIO_AiProc(void* parg)
-->

        if (FD_ISSET(AiFd, &read_fds))
        {
            /* get frame from ai chn */
            memset(&stAecFrm, 0, sizeof(AEC_FRAME_S));
            s32Ret = HI_MPI_AI_GetFrame(pstAiCtl->AiDev, pstAiCtl->AiChn, &stFrame, &stAecFrm, HI_FALSE);
            if (HI_SUCCESS != s32Ret )
            {
#if 0
                printf("%s: HI_MPI_AI_GetFrame(%d, %d), failed with %#x!\n", \
                       __FUNCTION__, pstAiCtl->AiDev, pstAiCtl->AiChn, s32Ret);
                pstAiCtl->bStart = HI_FALSE;
                return NULL;
#else
                continue;
#endif
            }
#if 1
            fwrite(stFrame.pVirAddr[0], 1, stFrame.u32Len, pfd);
#endif
            /* send frame to encoder */
            if (HI_TRUE == pstAiCtl->bSendAenc)
            {
                s32Ret = HI_MPI_AENC_SendFrame(pstAiCtl->AencChn, &stFrame, &stAecFrm);
                if (HI_SUCCESS != s32Ret )
                {
                    printf("%s: HI_MPI_AENC_SendFrame(%d), failed with %#x!\n", \
                           __FUNCTION__, pstAiCtl->AencChn, s32Ret);
                    pstAiCtl->bStart = HI_FALSE;
                    return NULL;
                }
            }

            /* send frame to ao */
            if (HI_TRUE == pstAiCtl->bSendAo)
            {
                s32Ret = HI_MPI_AO_SendFrame(pstAiCtl->AoDev, pstAiCtl->AoChn, &stFrame, 1000);
                if (HI_SUCCESS != s32Ret )
                {
                    printf("%s: HI_MPI_AO_SendFrame(%d, %d), failed with %#x!\n", \
                           __FUNCTION__, pstAiCtl->AoDev, pstAiCtl->AoChn, s32Ret);
                    pstAiCtl->bStart = HI_FALSE;
                    return NULL;
                }

            }
------------------------------------------------------------------------------------------
所以数据是从Ai直接丢给Ao了。然后Ao直接到扬声器soc。
对于语音采集soc的i2s的参考是:采样率16kHz,Master,16bit宽度,0-bit-delay,左对齐,LR高时为左声道,bclk频率是512kHz.

yangjking

0个粉丝

8

问答

0

专栏

2

资料

yangjking 2016-11-02 18:08:21
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=40731&ptid=13230]yang1372073 发表于 2016-11-2 17:41[/url]
对,能听到。伴随有很多噪音,现在不好判断,你可以说下你的流程吗?比如:AI-AENC-ADEC-AO这样子,检查 ...[/quote]

在Ai后抓取的音频文件就没问题,然后Audacity录得的声音就带噪音了。

yang1372073

0个粉丝

19

问答

0

专栏

2

资料

yang1372073 2016-11-03 11:39:46
认可0
看样子在AO那部分了,你再看看吧。AO这条路我没走过,没什么经验

willzhang121

0个粉丝

8

问答

0

专栏

0

资料

willzhang121 2019-09-18 19:54:42
认可0
楼主,请问你的噪音“突突突”的问题解决了么?我也遇到同样的问题了,AI-AENC,用AAC格式声音正常,用G711A格式,就会出现严重的噪音。抓取AI的音频,用PCM播放器播放,声音是正常的。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区