https://www.jb51.net/program/299902krd.htm
https://blog.csdn.net/weixin_34275246/article/details/109015201
头文件:#include <QTimer>
,否则报错:invalid use of incomplete type 'class timer'
注意事项
-
QTimer会自动回收对象和变量
必须通过this引用对象,或者引用const修饰常量。否则对象会调用析构函数,再调用对象的方法会导致崩溃,变量的值也会和定义的不一样。this->output = new QAudioOutput(format, qApp); this->device = this->output->start(); QTimer *timer_play = new QTimer(); this->timer_play = timer_play; timer_play->setTimerType(Qt::PreciseTimer); QObject::connect(timer_play, &QTimer::timeout, this, [=](){ CZLogUtil::getInstance().mprintf("pcm_size :%d\n",pcm_size); if (pcm_size > 0) { this->output->setVolume(20); int readSize = this->output->periodSize(); int chunks = this->output->bytesFree() / readSize; CZLogUtil::getInstance().mprintf("chunks %d\n",chunks); while (chunks) { QByteArray samples = pcm_arr.mid(0, readSize); int len = samples.size(); pcm_arr.remove(0, len); CZLogUtil::getInstance().mprintf("write samples\n"); if (len) this->device->write(samples); if (len != readSize) break; chunks--; } } });
0 条评论