项目演示
平台:windows或者ubuntu
要求:平台需要支持音频播放功能
文件格式:.wav 可以使用剪映生成,音频部分,我这里是简短的音乐
Qt 多媒体简介
Qt QSound是Qt框架中的一个类,用于播放音频文件。它可以在Qt应用程序中实现简单的音频播放功能,包括播放、暂停和停止音频。QSound支持常见的音频文件格式,如WAV、MP3等。
使用QSound非常简单,只需提供音频文件的路径,然后调用相应的函数即可实现音频的播放和控制。可以通过调用QSound类的静态函数来访问该功能,如play()函数用于播放音频,pause()函数用于暂停音频,stop()函数用于停止音频等。
除了基本的音频播放功能,QSound还具有一些其他的特性。例如,可以设置音量、循环播放音频、获取音频的持续时间等。可以通过调用相应的函数来控制这些功能。
Qt QSound适用于简单的音频播放需求,比如在图形界面应用程序中播放提示音、音效等。然而,如果需要更复杂的音频处理功能,例如音频编辑、音频特效等,可能需要使用更专业的音频处理库或框架。
总的来说,Qt QSound是Qt框架提供的一个轻量级的音频播放类,适用于简单的音频播放需求。它可以方便地实现音频的播放和控制,并扩展了一些额外的功能。
Qt 从 4.4 版本开始提供的一套多媒体框架,提供多媒体回放的功能。在 Qt 4.6 中实现多媒体播放图形界面主要依赖 phonon 框架。phonon 最初是 一个 源于 KDE 的项目,为使用音频和视频的应用程序开发提供的一个框架。应用程序不用去管多媒体播放是通过什么实现的(如gstreamer、xine),只需调用相应的接口就行,但这中间需要一个中转,被称为 backend。Qt 也是通过 phonon 来实现跨平台的多媒体播放。
从 Qt5 开始,Qt 就弃用了 phonon,直接使用 Qt Multimedia 模块。我们可以 Qt Multimedia模块来提供的类实现跨平台的多媒体播放了。使用 Qt Multimedia 就不需要中转了,但是底层还是需要多媒体插件实现的。Qt 只是提供多媒体接口,播放多媒体实际上是通过多媒体插件实现的,我们不需要管这些插件是什么,Qt 在不同平台使用的多媒体插件不同。本章将会介绍如何在 Windows 和 Linux 安装多媒体插件,Mac 系统不考虑,笔者条件有限!Qt 多媒体模块提供了很多类,主要有 QMediaPlayer,QSound、QSoundEffect、QAudioOutput、QAudioInput、QAudioRecorder、QVideoWidget 等等。类太多了不一一作解释,可以直接复制名字到 Qt 的帮助文档里查看该解释。可以从名称大概了解它们是什么意思,具体类的使用直接看本章的例子。
想要在 Qt 里使用使用 Qt 多媒体模块,需要在 pro 项目文件里添加如下语句。
QT += multimedia
注意:Qt 中的音乐播放器与视频播放器需要在 Ubuntu 里安装媒体解码器才能实现播放。
Ubuntu16 / Ubuntu18,需要安装以下插件。播放音乐需要安装 Gst 解码插件。需要在终端输入如下指令,注意不要复制错误了,下面指令已经在 Ubuntu16/Ubuntu18 测试成功,如果读者 Ubuntu 没有配置网络与源服务器,这些导致安装不成功与本教程无关,确实需要读者好好打下 Ubuntu 操作的基础了!
sudo apt-get install gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-plugins-good
gstreamer1.0-plugins-ugly gstreamer1.0-pulseaudio gstreamer1.0-libav
Windows 需要安装如 LAVFilters 解码器,只需要百度 LAVFilters,找到 LAVFilters 官网下载此软件即可,当然本教程的资料会提供一份 LAVFilters 的安装包。点击页脚下方的程序下载链接跳转到下载本教程所有资料下载地址处,在顶层目录下。
音效文件播放
播放音效文件,比如简短的提示音(按键音等),可以使用 Qt 的 QSoundEffect 和 QSound类来播放。Qt 的 QSoundEffect 和 QSound 类主要区别是 QSound(异步方式播放)只能播放本地的 WAV音效文件(WAV 音效文件是 PC 机上最为流行的声音文件格式,但其文件尺寸较大,多用于存储简短的声音片段,具有低延时性,不失真的特点),QSoundEffect 不仅可以播放网络文件,也可以播放本地音效文件,播放网络的文件一般使用到 QUrl 链接。
应用实例
本例目的:了解 QSound 类的使用。例 13_button_sound,按钮音效测试(难度:一般)。项目路径为 Qt/2/13_button_sound。本例大体流程,通过点击一个按钮,然后使用 QSound 来播放音效文件,模仿按键按下的声音。项目文件 13_button_sound.pro 文件第一行添加的代码部分如下。
.pro
QT += core gui multimedia
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
audio.qrc
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
/* Sound是一种立体声虚拟化技术,旨在通过模拟声音的位置和空间感,为音频表现增加立体声效果。
* 它可以通过对音频信号的处理,将声音从单声道源分发到多个扬声器上,并通过改变每个扬声器的音量、相位和延迟,
* 以创造出一种声音在听众周围环绕的感觉。QSound可以应用于音乐、影视制作、游戏等领域,为听众提供更真实、沉浸式的音频体验。*/
#include <QSound>
#include <QPushButton>
#include <QLabel>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
/* 按钮 */
QPushButton *pushButton;
QLabel *status;
private slots:
/* 按钮点击槽函数 */
void pushButtonClicked();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
/* 设置主窗体的位置与大小 */
this->setGeometry(0, 0, 800, 480);
/* 实例化按钮 */
pushButton = new QPushButton(this);
status = new QLabel(this);
status->setGeometry(340, 250, 120, 40);
/* 设置按钮文本 */
pushButton->setText("按钮音效测试");
/* 设置按钮的位置与大小 */
pushButton->setGeometry(340, 220, 120, 40);
/* 信号槽连接 */
connect(pushButton, SIGNAL(clicked()),
this, SLOT(pushButtonClicked()));
}
MainWindow::~MainWindow()
{
}
void MainWindow::pushButtonClicked()
{
qDebug()<<"music";
/* 异步的方式播放 */
QSound::play(":/audio/music.WAV");// 必须是wav格式 是音频不是视频
status->setText("正在播放音频music.WAV");
}
程序运行效果
单击按钮后,可以听到播放 1 秒左右的叮咚声,用此方法来模拟单击按钮声音效果。
作者:Qt历险记
原文:https://mp.weixin.qq.com/s/GO8cT7Nmle8ZhokpwcYOZQ
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。