【QT项目——视频播放器——音频录制】6.1QAudioFormat音频播放

基于QT的音频录制(三个类)

6.1QAudioFormat 记录格式

setSampleRate;   // 样本率
setSampleSize;    // 样本大小
setChannelCount setCodec("sudio/pcm")   // 通道数,左右声道
setByteOrder(QaudioFormat::LittleEndian)  // 字节序,采用默认小端(低位低字节,高位高字节)
ps:大端就是低位高字节,高位低字节
setSampleType(QAudioFormat::UnsignedInt)  //  样本类型

QAudioOutput 打开播放设备

QIODevice * start();  // 打开成功,返回QIODevice 
suspend();   // 暂停
resume();  // 恢复
bufferSize();  // 做缓冲的大小
bytesFree();   // 判断缓冲有无数据,大于一帧时开始写
periodSize();  // 时期size,检测bytesFree小于多少,写入多少。读取periodSize进行播放

QIODevice

qint64 write(const char *data, qint64 len) ; 从ffmpeg解码出来的音频经过重采样后用write写给QT

音频播放演示代码

#include <QtCore/QCoreApplication>
#include <QAudioFormat>
#include <QAudioOutput>
#include <QThread>
//准备好pcm数据
//ffmpeg -i 1080.mp4 -f s16le out.pcm
// 准备好pcm数据
// ffmpeg - i WeChat_2022.mp4 - f s16le out.pcm 
//    - f 指定格式 s16le shortint 16位(2个字节)(little end 小端)  输出out.pcm
int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);

	QAudioFormat fmt;
	fmt.setSampleRate(22050);   // 设置样本率
	fmt.setSampleSize(16);    // 设置样本大小  S16
	fmt.setChannelCount(2);   //  默认双通道
	fmt.setCodec("audio/pcm");
	fmt.setByteOrder(QAudioFormat::LittleEndian);  // 字节序,小端模式
	fmt.setSampleType(QAudioFormat::UnSignedInt);
	// 格式设置好了再将对象传给QAudioOutput
	QAudioOutput *out = new QAudioOutput(fmt);  // 音频输出
	QIODevice *io = out->start(); //开始播放 
	

	int size = out->periodSize();
	char *buf = new char[size];

	FILE *fp = fopen("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;

	return a.exec();
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值