本帖最后由 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;
}
|