QT 6.6.0 + SDL2 + SDL2_mixer实现音频播放器(改进)

B站视频讲解

GitHub源码下载地址

目录

实现思路

问题答疑1:为什么通过Mix_GetMusicPosition时刻获取播放音频的进度时,需要在while循环中使用SDL_PollEvent(&e)函数才能保证程序正常运行?


QT初学案例教程
QT6.6.0实现打开电脑摄像头或其他的外接摄像头(实现拍照功能)
QT6.6.0实现简单的录音器
QT6.6.0实现一个简单的视频和音频播放器
QT6.6.0实现简单的视频录制(包含语音录制)器
QT6.6.0关于QMediaMetaData功能以及列子说明使用方法
QT6.6.0实现QtCamera功能(拍照,录像以及图像和视频的相关配置)
T6.6.0实现更好的视频播放器(前期改进)
QT6.6.0实现图表如饼图,柱状图,散点图以及盒图等的基本使用
QT6.6.0实现客户端Socket编程以及socket测试软件通信
QT6.6.0 实现服务端Server和多个客户端Client通信以及socket测试软件通信
QT6.6.0 实现QNetworkAccessManager的基本应用以及其拓展使用
QT6.6.0 实现服务端Server和多个客户端Client互相发送文件信息
QT6.6.0和QT6.0以下的版本实现FTP文件上传和下载(过程详解)
QT6.6.0实现QNetworkInterface网络接口,QHostAddress网络地址IP以及域名解析等相关信息查询。
QT6.6.0基于QTcpSocket和QTcpServer实现多个客户端群聊
QT6.6.0实现基于UDP协议的简单通信(过程详解)
QT 6.6.0基于UDP协议实现广播和多播机制(过程详解)
QT 6.6.0基于UDP协议实现群聊功能(过程详解)
QT 6.6.0中OpenCV两种环境的配置方法以及基本使用例子
QT 6.6.0 中基于OpenCV的图像变换以及基于鼠标点击移动事件的图像绘制
QT 6.6.0 基于OpenCV对图像进行旋转,缩放和裁剪等操作
QT 6.6.0 基于OpenCV实现图像风格的改变(add和subtract)
PyTorch 训练之后的网络模型.pth转.onnx文件并对图像进行预测
QT 6.6.0 基于OpenCV加载.pth模型文件转换之后的ONNX模型文件,并且实现图像分类
QT 6.6.0 基于OpenCV中的cv::dnn::ClassificationModel实现图像分类
yolov5目标检测和QT 6.6.0 基于OpenCV加载yolov5.onnx模型文件实现目标检测
FCN图像分割和QT 6.6.0 加载分割FCN_Resnet50.ONNX模型文件进行图像分割(过程详解)
QT 6.6.0 中基于SDL2库实现WAV音频格式的播放(过程详解)
QT 6.6.0 中SDL2库的基本使用以及利用SDL2库创建的界面实现音频播放(过程详解)
QT 6.6.0 中基于SDL2,SDL2_ttf,SDL2_image,SDL2_mixer实现音频播放器(改进版)

        上一篇博文利用基于SDL2,SDL2_ttf,SDL2_image,SDL2_mixer实现音频播放器,可以看到上次我们实现不仅仅是加载WAV格式的音频文件,还可以加载MP3等格式的音频文件呢,因此本文主要是QT 6.6.0 + SDL2 + SDL2_mixer继续改进音频播放器,建议读者先去看前面几篇篇博文的内容,然后来看本文也需要会更好理解。

        从最初使用QT中mediamulti的模块实现了一个简单的额音频播放器,到现在使用相关的SDL库实现了音频播放器,然后再反过来将QT 6.6.0和SDL2_mixer + SDL2进一步结合得到更加晚上的音频播放器,整个过程都是清晰和比较完整的,我相信坚持到这里的小伙伴一定有了不少的收获,也感谢大家的观看。

        现在来绘制一下已经实现了的音频播放器案例的学习路线(后期的学习计算未给出):

实现思路

  1. 初始化SDL2以及SDL2_mixer子系统,加载CSS文件渲染界面控件;

  1. 选择音频文件并加载音频文件;

  1. 点击播放,暂停播放,快进和后退,重置播放,静音播放(播放时间进度显示);音量调整;(仅仅只是列举出了核心部分)

  1. 显示播放列表;任意选择播放列表中的音频文件进行播放;

  1. 关闭程序并释放申请的资源和关闭音频设备。

问题答疑1:为什么通过Mix_GetMusicPosition时刻获取播放音频的进度时,需要在while循环中使用SDL_PollEvent(&e)函数才能保证程序正常运行?

  1. 事件处理:SDL 是基于事件驱动的框架。SDL_PollEvent(&e) 用于处理事件,比如窗口关闭、鼠标点击等。如果不调用该函数来处理事件,SDL 的事件队列可能会阻塞或者导致程序没有机会处理用户输入或其他系统事件。因此这可能导致程序在某些情况下不响应。

  2. 避免主线程阻塞:如果程序在一个循环中只进行音频播放,而不处理任何事件,可能会导致主线程被阻塞。通过调用 SDL_PollEvent(),能够确保主线程仍然能够处理中断、刷新UI等操作,在大多数情况下保持程序的响应性。

  3. 时间同步:在 while 循环中,通常会有一个延时(如使用 SDL_Delay(),但是我们整个程序中并没有使用),以控制检查音频进度的频率。这期间调用 SDL_PollEvent() 可以确保程序在空闲时间仍然能处理中断并执行其他任务,而不会消耗过多的 CPU 资源。

注:其实关于这个SDL_PollEvent(&e) 的使用之前的程序实现中也有,只不过是没有做出解释,看到这里大家应该能够大致明白为什么要这么做了。

QT 6.6.0 + SDL2_mixer实现音频播放器

mp3音乐音频文件下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值