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 条评论

发表回复

您的电子邮箱地址不会被公开。