linchunsheng

linchunsheng

0个粉丝

31

问答

0

专栏

1

资料

linchunsheng  发布于  2016-07-09 17:01:41
采纳率 0%
31个问答
6250

请教此参数怎么理解

 
请问下此参数如何设置的,没有看懂海思的意思,因为先前的wav文件是8K的采样率,len的长度为640,现在将wav文件采样率提高到了24K,但播放声音变慢了,这个len我应该要设多少?是根据什么来定的?先谢大伙了:)
我来回答
回答10个
时间排序
认可量排序

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-10 05:07:38
认可0
没搞过海斯的声音部分呢,帮你頂

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-11 07:57:26
认可0
这个不需要改变

声音变慢和adec没有关系, 是和ao有关, 原来楼主是8k采样播放的,现在是24K采样,所以要把ao设置为24K采样即可

linchunsheng

0个粉丝

31

问答

0

专栏

1

资料

linchunsheng 2016-07-11 09:05:07
认可0
我更改这个len参数播放速率是有变化的,我的AO采样是有设置24K的,请帮忙看看
HI_S32 SAMPLE_AUDIO_AiAenc(int vqe_flags)
{
    HI_S32 i, s32Ret;
    AUDIO_DEV   AiDev = SAMPLE_AUDIO_AI_DEV;
    AI_CHN      AiChn;
    AUDIO_DEV   AoDev = SAMPLE_AUDIO_AO_DEV;
    AO_CHN      AoChn = 0;
    ADEC_CHN    AdChn = 0;
    HI_S32      s32AiChnCnt;
        HI_S32      s32AoChnCnt;
    HI_S32      s32AencChnCnt;
    AENC_CHN    AeChn;
    HI_BOOL     bSendAdec = HI_TRUE;
    FILE        *pfd = NULL;
    AIO_ATTR_S stAioAttr;
    AI_VQE_CONFIG_S stAiVqeAttr;

        /* Enable AI VQE */
        stAiVqeAttr.s32WorkSampleRate         = AUDIO_SAMPLE_RATE_16000;
        stAiVqeAttr.s32FrameSample                 = 2048;//SAMPLE_AUDIO_PTNUMPERFRM;
        stAiVqeAttr.enWorkstate                  = VQE_WORKSTATE_COMMON;
        stAiVqeAttr.bAecOpen                         = HI_TRUE;
        stAiVqeAttr.stAecCfg.bUsrMode         = HI_FALSE;
        stAiVqeAttr.stAecCfg.s8CngMode         = 0;
        stAiVqeAttr.bAgcOpen                         = HI_TRUE;
        stAiVqeAttr.stAgcCfg.bUsrMode         = HI_TRUE;
        stAiVqeAttr.stAgcCfg.s8TargetLevel = -1;
        stAiVqeAttr.stAgcCfg.s8NoiseFloor = -65;
        //stAiVqeAttr.stAgcCfg.s8MaxGain = 16; //OK
        stAiVqeAttr.stAgcCfg.s8MaxGain = 18;
        stAiVqeAttr.stAgcCfg.s8AdjustSpeed = 10;
        stAiVqeAttr.stAgcCfg.s8ImproveSNR = 0;
        stAiVqeAttr.stAgcCfg.s8UseHighPassFilt = 5;
        stAiVqeAttr.stAgcCfg.s8OutputMode = 0;
        stAiVqeAttr.stAgcCfg.s16NoiseSupSwitch = 0;
        stAiVqeAttr.bAnrOpen = HI_TRUE;
        stAiVqeAttr.stAnrCfg.bUsrMode = HI_FALSE;
        stAiVqeAttr.stAnrCfg.s16NrIntensity = 25;
        stAiVqeAttr.stAnrCfg.s16NoiseDbThr = 30;
        stAiVqeAttr.stAnrCfg.s8SpProSwitch = 1;

        stAiVqeAttr.bHpfOpen                         = HI_TRUE;
        stAiVqeAttr.stHpfCfg.bUsrMode         = HI_TRUE;
        stAiVqeAttr.stHpfCfg.enHpfFreq         = AUDIO_HPF_FREQ_80;
        stAiVqeAttr.bRnrOpen                         = HI_FALSE;
        stAiVqeAttr.bEqOpen                          = HI_FALSE;
        stAiVqeAttr.bHdrOpen                         = HI_FALSE;

    stAioAttr.enSamplerate   = AUDIO_SAMPLE_RATE_24000;
    stAioAttr.enBitwidth     = AUDIO_BIT_WIDTH_16;
    stAioAttr.enWorkmode     = AIO_MODE_I2S_MASTER;
    stAioAttr.enSoundmode    = AUDIO_SOUND_MODE_MONO;
    stAioAttr.u32EXFlag      = 0;
    stAioAttr.u32FrmNum      = 50;//30;
    stAioAttr.u32PtNumPerFrm = SAMPLE_AUDIO_PTNUMPERFRM;
    stAioAttr.u32ChnCnt      = 1;
    stAioAttr.u32ClkSel      = 0;

    gs_bAioReSample = HI_FALSE;
    enInSampleRate  = AUDIO_SAMPLE_RATE_BUTT;
    enOutSampleRate = AUDIO_SAMPLE_RATE_BUTT;
        u32AencPtNumPerFrm = stAioAttr.u32PtNumPerFrm;
               
    /********************************************
      step 1: config audio codec
    ********************************************/
    s32Ret = SAMPLE_COMM_AUDIO_CfgAcodec(&stAioAttr);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }

    /********************************************
      step 2: start Ai
    ********************************************/
    s32AiChnCnt = stAioAttr.u32ChnCnt;
    s32Ret = SAMPLE_COMM_AUDIO_StartAi(AiDev, s32AiChnCnt, &stAioAttr, enOutSampleRate, gs_bAioReSample, vqe_flags?&stAiVqeAttr:NULL);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }

    /********************************************
      step 3: start Aenc
    ********************************************/
    s32AencChnCnt = 1;
    s32Ret = SAMPLE_COMM_AUDIO_StartAenc(s32AencChnCnt, u32AencPtNumPerFrm, gs_enPayloadType);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }

    /********************************************
      step 4: Aenc bind Ai Chn
    ********************************************/
    for (i=0; i     {
        AeChn = i;
        AiChn = i;

        if (HI_TRUE == gs_bUserGetMode)
        {
            s32Ret = SAMPLE_COMM_AUDIO_CreatTrdAiAenc(AiDev, AiChn, AeChn);
            if (s32Ret != HI_SUCCESS)
            {
                SAMPLE_DBG(s32Ret);
                return HI_FAILURE;
            }
        }
    }

    /********************************************
      step 5: start Adec & Ao. ( if you want )
    ********************************************/
    if (HI_TRUE == bSendAdec)
        {
                s32Ret = SAMPLE_COMM_AUDIO_StartAdec(AdChn, gs_enPayloadType);
                if (s32Ret != HI_SUCCESS)
                {
                        SAMPLE_DBG(s32Ret);
                        return HI_FAILURE;
                }

                s32AoChnCnt = stAioAttr.u32ChnCnt;

#if 0
                AO_VQE_CONFIG_S stAoVqeAttr;
                memset(&stAoVqeAttr, 0, sizeof(stAoVqeAttr));

                stAoVqeAttr.bAgcOpen = HI_TRUE;
                stAoVqeAttr.bAnrOpen = HI_TRUE;
                stAoVqeAttr.bEqOpen = HI_TRUE;
                stAoVqeAttr.bHpfOpen = HI_OPEN;
                stAoVqeAttr.enWorkstate = VQE_WORKSTATE_COMMON;

                stAoVqeAttr.stHpfCfg.bUsrMode = HI_FALSE;
                stAoVqeAttr.stHpfCfg.enHpfFreq = AUDIO_HPF_FREQ_120; //80|120|150

                stAoVqeAttr.stAnrCfg.bUsrMode = HI_FALSE;
                   stAoVqeAttr.stAnrCfg.s16NrIntensity = 10; //0~25
                   stAoVqeAttr.stAnrCfg.s16NoiseDbThr = 50; //30~60
                   stAoVqeAttr.stAnrCfg.s8SpProSwitch = 0; //0|1

                stAoVqeAttr.stAgcCfg.bUsrMode = HI_FALSE;
                stAoVqeAttr.stAgcCfg.s8TargetLevel = -1; //-40~-1 dB
                stAoVqeAttr.stAgcCfg.s8MaxGain = 10; //0~30 dB
                stAoVqeAttr.stAgcCfg.s8AdjustSpeed = 1; //0~10 dB/s
                stAoVqeAttr.stAgcCfg.s8ImproveSNR = 1;
                stAoVqeAttr.stAgcCfg.s8UseHighPassFilt = 0;
                stAoVqeAttr.stAgcCfg.s8NoiseFloor = -30; //-65~-20 dB
                stAoVqeAttr.stAgcCfg.s8OutputMode = 1; //depracate noise below NoiseFloor
                stAoVqeAttr.stAgcCfg.s16NoiseSupSwitch = 1;

                stAoVqeAttr.EqCfg.;
#endif
                s32Ret = SAMPLE_COMM_AUDIO_StartAo(AoDev, s32AoChnCnt, &stAioAttr, enInSampleRate, gs_bAioReSample, NULL/*&stAoVqeAttr*/);
                if (s32Ret != HI_SUCCESS)
                {
                        SAMPLE_DBG(s32Ret);
                        return HI_FAILURE;
                }

                s32Ret = SAMPLE_COMM_AUDIO_AoBindAdec(AoDev, AoChn, AdChn);
                if (s32Ret != HI_SUCCESS)
                {
                        SAMPLE_DBG(s32Ret);
                        return HI_FAILURE;
                }
        }

    return HI_SUCCESS;
}

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-11 11:30:22
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33655&ptid=11896]linchunsheng 发表于 2016-7-11 09:05[/url]
我更改这个len参数播放速率是有变化的,我的AO采样是有设置24K的,请帮忙看看
HI_S32 SAMPLE_AUDIO_AiAenc ...[/quote]

抱歉,没看清楚, 原来楼主是直接发数据去Ao

那么Ao的设置 stAioAttr.u32PtNumPerFrm = SAMPLE_AUDIO_PTNUMPERFRM决定了每帧的长度
由于每个采样点是16bits的所以长度为SAMPLE_AUDIO_PTNUMPERFRM * 2

linchunsheng

0个粉丝

31

问答

0

专栏

1

资料

linchunsheng 2016-07-11 11:52:22
认可0
此参数我目前设定480,我刚试了下将len设为900播放声音还是很慢,但如果我将声音提到2400播放是正常的,但播文件时最开始会有啪的一声,文件在PC上播放没有任何问题的。真不清楚是那里的问题

dwt_guard

0个粉丝

9

问答

0

专栏

0

资料

dwt_guard 2016-07-11 11:56:13
认可0
帮你顶,不懂得路过!

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-11 12:22:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33684&ptid=11896]linchunsheng 发表于 2016-7-11 11:52[/url]
此参数我目前设定480,我刚试了下将len设为900播放声音还是很慢,但如果我将声音提到2400播放是正常的,但播 ...[/quote]

wav文件是不是有头, 当数据播放了,导致开始声音不正常

linchunsheng

0个粉丝

31

问答

0

专栏

1

资料

linchunsheng 2016-07-11 13:33:12
认可0
是有头的,但为什么在电脑上播放没有问题了?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-11 14:21:25
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33688&ptid=11896]linchunsheng 发表于 2016-7-11 13:33[/url]
是有头的,但为什么在电脑上播放没有问题了?[/quote]


PC上播放是楼主自己写的代码,还是播放器

如果是播放器, 那么真正送出去的数据也是裸流,头被去掉了,如果是楼主自己写的而且播放正常,那也不用我罗嗦了

wav文件的头是用来描述其中的音频数据的格式等参数, 对解释其数据非常重要,但他不是音频数据,海思不认这文件格式, 海思只认裸数据


linchunsheng

0个粉丝

31

问答

0

专栏

1

资料

linchunsheng 2016-07-11 14:45:01
认可0
是PC播放器来播的,其实这个wav文件是用科大讯飞的语音合成SDK做的,以前wav文件是8K的,设备端/PC播放都没有异常,因为后来采样率提高到24K,科大讯飞语音合成的SDK不支持24K的采样率,所以后来使用linux自带的命令做的转换:
sox 8k.wav -r 24000 24.wav
再次在设备端播最开始就有啪的一声,我不清楚是不是这样转会有问题,但在PC上播也没有任何问题啊。希望大神帮帮忙!
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区