找回密码
 立即注册
收起左侧

QT 连续录音时,会丢失1s

0
回复
5036
查看
[复制链接]
累计签到:7 天
连续签到:1 天
来源: 2019-4-2 11:01:58 显示全部楼层 |阅读模式
2Qter豆
本帖最后由 dai410257573 于 2019-4-2 11:08 编辑

场景应用,实时麦克风录音,按照设定时间10s自动保存1次,连续保存。
现象:自动保存的时候,会丢失约1s的语音数据。
现阶段的写法:
初始化QAudioDeviceInfo,QAudioFormat,QAudioInput,然后start后往raw里面写入文件,但是在定时保存的时候,如果我close mpOutputFile,再重新open,中间肯定会丢失1s,保存文件的时间长大概1ms样子。
如果不close,则raw里面的内容就会一直存在。
如果 这个时候是 mpAudioInputFile->start(mpOutputFile2);,也是一样的会丢失大概1s。我是想自动保存的文件要连续起来,但是raw文件每自动保存1次就会清理一次,这样就不占用太大的空间。
请问各位大佬,我该怎么做
QAudioDeviceInfo  m_device;
        QAudioFormat      mFormatFile;
        QAudioInput       *mpAudioInputFile;        
        QIODevice         *mpInputDevSound;
 
 
mpOutputFile = new QFile();
mpOutputFile->setFileName(tr("record.raw"));
    
void AudioRecorder::OnRecordStart()
{
    mpOutputFile->open(QIODevice::WriteOnly | QIODevice::Truncate);
    mpAudioInputFile = new QAudioInput(m_device,mFormatFile, this);
    mpAudioInputFile->start(mpOutputFile);
}

    
struct timeval tpstart,tpend;
float timeuse;
gettimeofday(&tpstart,NULL);

if(AddWavHeader(fileNameStrBuffer.toLatin1().data())>0)
{

//            mpOutputFile->close();
//            mpOutputFile->open(QIODevice::WriteOnly |QIODevice::Truncate);//每次录音大概有1s左右的间隙

    gettimeofday(&tpend,NULL);
    timeuse=(1000000*(tpend.tv_sec-tpstart.tv_sec) + tpend.tv_usec-tpstart.tv_usec)/1000000.0;

    qDebug()<<timeuse<<"s";
    return filename;
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了