博客
关于我
【专题3:电子工程师 之 上位机】 之 【46.QT音频接口】
阅读量:534 次
发布时间:2019-03-09

本文共 1861 字,大约阅读时间需要 6 分钟。

1.相关的结构体和函数

QAudioFormat:音频格式

(1)setSampleRate:设置样本率/采样率。 (2)setSampleSize:设置样本大小(位数),设置一个采样点用多少bit来表示。 (3)setChannelCount:设置通道数量。 (4)setCodec:设置编码器,目前仅仅支持:setCodec(“audio/pcm”)。 (5)setByteOrder(QAudioFormat::LittleEndian):设置是字节序,使用默认的小端格式,低位在低字节,高位在高字节。 (6)setSampleType:设置采样类型,setSampleType(QAudioFormat::UnSignedInt)。

QAudioOutput:播放设置

(1)QIODevice* start():用于获取音频输出设备的引用。 (2)suspend():暂停播放。 (3)resume():恢复播放。 (4)bufferSize():用来做缓存/缓冲的空间的大小。音频播放和视频播放不同,视频播放中间少几十毫秒的数据基本不会有太大的问题;但音频播放少了几十毫秒的数据,就会明显的听出卡顿的感觉,所以音频播放需要做缓存,将很多的音频数据直接先缓存起来,播放时,直接播放缓存里面的数据即可。 (5)bytesFree():用来判断缓冲/缓存里面有没有空余空间。往缓存里面写数据之前,需要先判断缓存是否有足够的空间来存放当前需要存放的数据。 (6)periodSize():指内部硬件一次播放多大的数据,声卡不会一次性就把缓存里面的数据都读完了。

QIODevice:

代码示例: ```cpp qint64 write(const char *data, qint64 len) ```通过ffmpeg解码出来的音频,将重采样之后的数据写给QT,QT就会播放。其返回值是真正写进去的大小。

2.示例代码

(1)需要在工程.pro文件中加入多媒体模块:multimedia。 ```cpp QT += core gui multimedia ```

代码:

#include "widget.h"  #include 
#include
#include
#include
int main(int argc, char *argv[]) { QApplication a(argc, argv); QAudioFormat fmt; fmt.setSampleRate(44100); fmt.setSampleSize(16); fmt.setChannelCount(2); fmt.setCodec("audio/pcm"); fmt.setByteOrder(QAudioFormat::LittleEndian); fmt.setSampleType(QAudioFormat::UnSignedInt); QAudioOutput *out = new QAudioOutput(fmt); QIODevice *io = out->start(); int size = out->periodSize(); char *buf = new char[size]; FILE *fp = fopen("debug/out.pcm", "rb"); while (!feof(fp)) { if (out->bytesFree() < size) { QThread::msleep(1); continue; } int len = fread(buf, 1, size, fp); if (len <= 0) break; io->write(buf, len); } fclose(fp); delete buf; buf = 0; Widget w; w.show(); return a.exec(); }

转载地址:http://kkisz.baihongyu.com/

你可能感兴趣的文章
模拟集成:MOS管的工作区小误区(简单版)
查看>>
Android AIDL了解多少
查看>>
[20210506]LeetCode每日一题 - 1720. 解码异或后的数组
查看>>
2.基于yolov的行人进出双向计数
查看>>
TensorFlow 框架学习资源
查看>>
python的GUI编程(wxpython)
查看>>
flink启动(二)
查看>>
Istio服务网格实践指南 学习笔记(二) Istio架构
查看>>
SVG 入门指南(看完,对SVG结构不在陌生)
查看>>
27.HTML+CSS3 实现长阴影网页特效
查看>>
29.HTML+CSS3 实现酷炫 Loading 特效
查看>>
前端开发进阶手册.pdf
查看>>
41.clip-path 滚动特效
查看>>
【第 242 期】小智在这3年开发中遇到的 CSS 问题及解决方案,有大佬帮他总结好了 !...
查看>>
45.菜单悬停滑动特效
查看>>
73.使用HTML CSS和jQuery进行水平页面滚动
查看>>
103.3D书籍模型
查看>>
110.无限叠卡特效
查看>>
117.纯CSS 和 JS 实现泡泡特效
查看>>
面试官:为什么 Promise 比setTimeout() 快?
查看>>