QT 6.6.0 中SDL2库的基本使用以及利用SDL2库创建的界面实现音频播放(过程详解)

B站视频讲解

键盘事件案例GitHub源码

SDL2实现音频播放GitHub源码

目录

实现思路

一个键盘事件案例基础 

问题1:SDL_CreateWindowAndRenderer和SDL_CreateWindow的区别?

SDL2_ttf和SDL2_image库使用方式

问题2:SDL_CreateTextureFromSurface的作用?(网上查询结果)

问题三:从网上下载的图像,加载图像的过程报错误,

SDL2实现的音频播放


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音频格式的播放(过程详解)

上一篇博文主要是讲解了SDL2库播放音频 ,本文才进入主题,主要是对SDL2库的基本使用,了解了SDL2的使用基础上之后,后期对其进行拓展使用将会快速的上手,并且可以了解到SDL2的应用非常广泛。而且使用起来也比较灵活,在某些应用上和OpenCV有类似之处。

实现思路

  1. 创建窗口和渲染器,用于显示图像或者其他画面;
  2. 事件处理(比如按下鼠标键盘事件加载图像,显示图像,矩形等操作);
  3. 渲染器渲染图像,矩形等内容。
  4. 显示结果(SDL_RenderPresent)。

一个键盘事件案例基础 

问题1:SDL_CreateWindowAndRenderer和SDL_CreateWindow的区别?

SDL_CreateWindow

  • 只创建一个窗口。创建窗口后,如果需要进行渲染,开发者必须手动使用 SDL_CreateRenderer 来创建一个渲染器。

SDL_CreateWindowAndRenderer

  • 一次性创建一个窗口和与之关联的渲染器。这个函数同时创建了这两个对象,简化了窗口和渲染器的获取过程。

注:SDL_CreateWindow只是创建了一个窗口,如果要显示图像等内容的话,需要创建一个渲染器。

以下是一个键盘按下的响应案例:

https://github.com/KeepTryingTo/QT_Learning/tree/main/QtSDL_Application/QtSDL_KEYDOWN

SDL2实现一个简单的键盘按下事件


SDL2_ttf和SDL2_image库使用方式

① 由于需要渲染绘制文字,因此SDL2_ttf需要单独下载,关于SDL2_ttf库的使用方式和使用SDL2方式一样,下载链接:https://github.com/libsdl-org/SDL_ttf/releases

② 渲染图像也是一样的道理,下载编译好的库文件SDL2_image,然后加载库文件,下载链接:https://github.com/libsdl-org/SDL_image/releases

注:由于SDL2_ttf和SDL2_image库中的依赖库和头文件都很少,建议直接复制到之前配置的库路径下即可。

可以加载Windows中自带的字体:C:\\Windows\\Fonts\\Times New Roman.ttf

   

问题2:SDL_CreateTextureFromSurface的作用?(网上查询结果)
  • SDL_Surface 通常用于存储图像的像素数据和信息(如宽度、高度、格式等),而 SDL_Texture 是更高效的图像表示形式,适合在 GPU 上进行渲染。
  • 纹理 (SDL_Texture) 通常位于 GPU 内存中,能够比在 CPU 内存中的表面更高效地进行渲染。使用纹理来绘制图像可以显著提高绘制性能,尤其是在需要频繁更新屏幕内容的场景中。

绘制本文的SDL2_ttf库初始化:

绘制图像的SDL_image库初始化子系统:

 * - `IMG_INIT_JPG`
 * - `IMG_INIT_PNG`
 * - `IMG_INIT_TIF`
 * - `IMG_INIT_WEBP`
 * - `IMG_INIT_JXL`
 * - `IMG_INIT_AVIF`

PNG(便携式网络图形格式): 具有无损压缩、透明支持。
JPEG(联合图像专家组格式):适用于照片和复杂图像,采用有损压缩。
BMP(位图文件格式):      对于基本图像格式,通常没有压缩。
GIF(图形交换格式):      支持动图和透明色,但采用8位色彩。
TGA(TARGA格式):         支持图像的无损压缩和透明度。
WEBP(谷歌的图像格式):   支持无损和有损压缩。
问题三:从网上下载的图像,加载图像的过程报错误,

如果从网上下载的图像并且加载图像的过程中报以下错误的话,那么需要到libwebp动态库 下载libwebp源码,由于官方并没有提供编译好的源码,因此需要自己编译,关于编译源码的过程请看:https://mydreamambitious.blog.csdn.net/article/details/141427212 (加载本地相册的图像应该不会报这个错误)。  

   其次进入命令行对图像进行解码操作:dwebp [输入图像] -o [输出图像]

  

注:经过解码得到的output.jpg图像可以用于IMG_LoadTexture函数加载了,可能也许会有人问了,是不是在初始化IMG_Init的时候把IMG_INIT_JPG放在了最前面,不是的,读者可以尝试一下调换位置还是会报这个错误,主要还是因为直接从网上下载的图像编码格式可能存在问题,需要使用libwebp进行转换。

SDL2实现的音频播放

关于使用SDL2实现的音频播放界面代码,请看链接:https://github.com/KeepTryingTo/QT_Learning/tree/main/QtSDL_Application/QtSDL_AudioPlayer_v2

SDL2利用自带窗口实现音频播放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值