• 计算Qt中的QAudioOutput缓冲区未播放的音频字节数对应时长


    计算 QAudioOutput 缓冲区中实时播放的数据的时间长度,可以使用 QAudioOutput 提供的方法来确定缓冲区中还未播放的字节数,然后根据当前的音频格式将这些字节转换成时间长度。

    这里是如何计算的步骤:

    1. 使用 QAudioOutput::bufferSize() 方法获取整个缓冲区的大小。
    2. 使用 QAudioOutput::bytesFree() 方法获取缓冲区中未使用的字节数。
    3. 用缓冲区总大小减去未使用的字节数,得到缓冲区中正在使用(即未播放)的字节数。
    4. 根据音频格式(采样率、采样大小、通道数)将这些字节转换成时间长度。

    以下是相应的示例代码

    // 假设 audioOutput 是一个已经配置好的 QAudioOutput 对象
    QAudioOutput *audioOutput; 
    QAudioFormat format = audioOutput->format();
    
    // 计算缓冲区中未播放的字节数
    qint64 bytesPending = audioOutput->bufferSize() - audioOutput->bytesFree();
    
    // 计算每个样本的字节数(采样大小 / 8 * 通道数)
    int bytesPerSample = (format.sampleSize() / 8) * format.channelCount();
    
    // 计算未播放数据的时间长度(毫秒)
    int durationMs = (bytesPending / bytesPerSample) * 1000 / format.sampleRate();
    
    std::cout << "Duration of unplayed data in buffer: " << durationMs << " ms" << std::endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    代码计算了缓冲区中尚未播放的音频数据所对应的时间长度。这个信息对于理解音频播放的实时状态和处理音频流非常有用。可以用来同步音频播放与其他事件,或者调整缓冲区大小以控制延迟。

  • 相关阅读:
    剑指 Offer 61. 扑克牌中的顺子
    SQL server 根据子级查询根父级
    AMI MDS安装
    闲置手机电脑流量变现项目
    WebAssembly开启的微服务新时代
    MySQL 数据库设计范式
    评比无代码低代码平台时,可以考虑以下几个方面
    8. Go实现Gin服务优雅关机与重启
    关于 Flink 状态与容错机制
    LNK2001 无法解析的外部符号 cuGetErrorName解决
  • 原文地址:https://blog.csdn.net/weixin_44328568/article/details/134467497