cloud39_V2.1.00 + PATCH2 pcm格式音频播放过快的问题

1480阅读 0评论2015-04-13 longjiacheng
分类:LINUX


音源用cooledit放了,双通道放的听不清,但是单通道就能听出来正常的声音,虽然杂音大
问题基本是确定是他们没有用decode的问题,decode里面用了转换了
送DA的数据一定要双通道
他们送单通道数据进da,结果:假设1兆的文件10秒播完(双通道源数据),这个时候你送单通道的源数据,1兆,结果DA用双通道播,就变快了而且声音有问题
参考audio_decode_decode 这个函数里面   if(nSize > 0) 开始的通道转换的,把数据转成双通道再送DA
        else
        {
            int i;
            uint16 *in , *out;
            in = (uint16 *)pdecode_handle->out_buf;
            out = (uint16 *) out_buf;
 
            for(i = 0; i < (nSize >> 1); i ++, in++, out++)
            {
                *out = *in ;
out++;
                *out = *in ;
            }
nSize = nSize *2;
        }
就是这个地方
        out_sz = audio_decode_decode(paudio_talk->decode_handle, paudio_talk->decode_buf + cur_size, 2);
这个是我们在audio_talk里面调用的,最后参数是2,所有打开paudio_talk->decode_handle设置的不是2,就会走下面,把数据转成双通道再送DA

下面是修改后播放正常的源码:
#if 1    

    int len = 0 ;
    int i = 0 ;
    char *pOut = bufOut ;
    if(fdTalkTest < 0)
    {
        //fdTalkTest=open("/mnt/audio3.g711",O_RDONLY) ;
        fdTalkTest=open("/mnt/dana.pcm",O_RDONLY) ;
        if(fdTalkTest < 0 )
        {
            ERR("open file\n") ;
        }
    }
    if(fdTalkTest > 0 )
    {
        len = read(fdTalkTest,bufRead,sizeof(bufRead));
        LOG("read len=%d\n",len) ;
    }
    if(len > 0)
    {
        for(i = 0 ;i < len;i++) //后+
        {
            *pOut = bufRead[i] ;
            pOut ++ ;
            *pOut = bufRead[i] ;
            pOut ++ ;
        }
        talk_data.buf = bufOut ; //之前 bufRead
        talk_data.size = len *2;  //后+  *2
        //int sleepCount = len *1000 / (16 *1024) ;
        //usleep(sleepCount * 1000) ;
        return &talk_data ;
    }
#endif   
上一篇:Aimer39 V4L2关闭再打开camera
下一篇:Cloud39平台nt99141的视频画面是黑白的,如何处理?