Qt中音频的使用

2023-09-14 09:35:15

对于音频我们在使用的过程中一般是录制音频、播放音频。针对这两个需求介绍Qt中音频的使用。

Qt中音频的录制

步骤:

1、获取系统中的音频设备。

2、创建QAudioRecorder对象,指定使用的音频设备,通过QAudioRecorder的setAudioInput函数设置。

3、设置音频的保存位置,通过QAudioRecorder对象的setOutputLocation函数设置。

4、设置保存的音频格式,通过QAudioRecorder对象的setAudioSettings函数设置,设置参数为QAudioEncoderSettings。

5、设置保存音频的容器格式,通过QAudioRecorder对象的setContainerFormat。

6、以上参数设置完成之后就可以QAudioRecorder对象调用record开始录制了,如果不设置相关才是,会使用系统默认的参数。

7、AudioRecorder对象调用stop()结束录制。

8、AudioRecorder对象调用pause()暂停录制。

代码如下:

QList<QAudioDeviceInfo>  audioDevices  = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);//获取音频的输入设备
foreach (QAudioDeviceInfo device, audioDevices) {
    ui->comboBox_sound->addItem(device.deviceName());
}
......
m_audioRecorder = new QAudioRecorder(this);
QString datatime = QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss");
m_audioName = QString("%2/audio/%3").arg(savePath).arg(datatime);
m_audioRecorder->setOutputLocation(QUrl::fromLocalFile(m_audioName));
m_audioRecorder->setAudioInput(audioDeviceName);
QAudioEncoderSettings set;

set.setCodec("audio/wav");   // 这些是QAudioRecorder是设置,见名思意
set.setQuality(QMultimedia::EncodingQuality::HighQuality);
set.setEncodingMode(QMultimedia::ConstantQualityEncoding);

m_audioRecorder->setContainerFormat("audio/wav");  // 设置容器格式
m_audioRecorder->setAudioSettings(set);
m_audioRecorder->record();//开始录制
......
m_audioRecorder->pause();//暂停录制
......
m_audioRecorder->stop();//结束录制

以上可以完成最基本的音频录制,但是如果想使用更高端的录制,例如在录制的时候显示音频的想干信息。要想实现以上描述,需要使用Qt提供的QAudioProbe类来监控音频数据。

实现步骤如下:

1、创建QAudioProbe对象。

2、QAudioProbe对象通过调用setSource函数设置监控对象,传入参数为AudioRecorder对象。这里QAudioProbe对象监控的就是AudioRecorder对象对象输入的音频。

3、实现QAudioProbe::audioBufferProbed信号槽函数,这个信号是当在媒体服务中处理音频缓冲器时发出该。信号会传递一个QAudioBuffer 格式的音频数据。

4、实现槽函数接收QAudioBuffer 类型的数据,之后通过对接收到数据的计算实现频谱或者其他的显示。

代码如下:

    m_audioRecordProbe = new QAudioProbe(this);
    m_audioRecorder = new QAudioRecorder(this);

    //显示
    m_audioRecordProbe->setSource(m_audioRecorder);  // 指定声源

    connect(m_audioProbe, &QAudioProbe::audioBufferProbed, this,[=](const QAudioBuffer &buffer){
        emit audioProcessBuff(buffer);
    });

Qt中音频的播放

步骤:

1、创建一个QMediaPlayer对象。

2、创建QMediaPlaylist对象。

3、通过QMediaPlaylist对象的setPlaybackMode函数创建列表的循环模式。

ConstantValueDescription
QMediaPlaylist::CurrentItemOnce0当前项目只播放一次。
QMediaPlaylist::CurrentItemInLoop1当前项目在循环中重复播放
QMediaPlaylist::Sequential2播放从当前开始,在每个连续项目中移动,直到到达最后一个项目,然后停止。当前正在播放上一个项目时,下一个项目为空项目。
QMediaPlaylist::Loop3播放在最后一个项目播放完毕后的第一个项目处重新开始。
QMediaPlaylist::Random4按随机顺序播放项目

4、 QMediaPlayer对象通过函数setPlaylist设置播放列表,参数为QMediaPlaylist对象。

5、向播放列表中添加需要播放的音频,通过QMediaPlaylist对象addMedia函数添加音频列表。

6、在音频列表中选择需要播放的音频,使用QMediaPlaylist对象的setCurrentIndex函数,参数为音频标号。

7、QMediaPlayer对象调用play函数播放音频。

8、QMediaPlayer对象调用pause函数暂停播放音频。

9、QMediaPlayer对象调用stop函数停止播放音频。

代码如下:

m_mediaPlayer = new QMediaPlayer(this);
m_mediaPlaylist = new QMediaPlaylist(this);
m_mediaPlaylist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
m_mediaPlayer->setPlaylist(m_mediaPlaylist);
......
m_mediaPlaylist->addMedia(QUrl::fromLocalFile(filePath));
......
m_mediaPlaylist->setCurrentIndex(index);
......
m_mediaPlayer->play();
......
m_mediaPlayer->pause();
......
m_mediaPlayer->stop();

QMediaPlayer除了播放、暂停、停止播放外,还有其他设置,例如设置声音大小,快进、快退等。都可以通过QMediaPlayer对象的函数进行设置。也可以通过QAudioProbe对象对播放的音频进行监听,实现播放音频声波的可视化。方法和录制一样。

通过QSound类播放音频:暂不介绍

更多推荐

新能源汽车驱动电机的基本知识

学习目标:了解电机的基本知识。能力目标:培养学生搜集和整理相关资料的能力。素质目标:培养学生良好的职业素养。额定电店.在夫见定条件下电池工作的*于佳电压知识准备术语和定义。(1)驱动电机系统通过有效的控制策略将动力蓄电池提供的直流电转化为交流实现电机的正转以及反转控制。在减速/制动时将电机发出的交流电转化为直流电,将能

APEX数据源加载实现Excel表数据导入及自定义存储过程

在APEX应用程序中会涉及到数据加载,说白了就是导入导出数据到数据库中,这里就以Excel导入数据到TEST_DATA_WXX表为例,来学习共享组件数据源数据加载定义1第一步先导出一个数据模板进入《王小小鸭的学习demo》打开【用户管理】-【操作】-【下载】-【Excel】下载后的Excel数据表是这样的↓2.建表TE

【Linux】基础IO,软硬链接,动静态库

1.认识IO什么是IOI/O简单来说对应的就是两个单词Input和Output,指的是计算机系统与外部环境(通常是硬件设备或其他计算机系统)之间的数据交换过程I/O可以分为两种主要类型:输入(Input):输入是指计算机系统接收来自外部环境的数据或信息的过程。例如,当用户在键盘上输入文本时,这些输入字符被视为输入操作。

9.21号作业

实现把注册的信息导入数据库中second.h#ifndefSECOND_H#defineSECOND_H#include<QWidget>#include<QDebug>namespaceUi{classSecond;}classSecond:publicQWidget{Q_OBJECTpublic:voidnewsl

IT运维:使用数据分析平台监控Windows Eventlog

TIPS:本文鸿鹄版本:2.10.0及以上版本概述本文基于《IT运维:利用鸿鹄采集Windowseventlog数据》(以下简称原文)文章进行了细化与延伸。主要包括细化了安装步骤,增加了仪表板。鸿鹄端配置创建数据集与数据源类型登录鸿鹄提前创建数据集和数据类型,我这里创建的是winlog数据集,下文《安装vector》里

埃文科技受邀出席“安全堤坝”技术论坛

2023年9月11日,2023年国家网络安全宣传周河南省活动开幕式暨河南省网络文明大会在开封博物馆开幕。由CCFYOCSEF郑州举办的“聚焦数据交易监管技术,筑牢数据交易‘安全堤坝’”技术论坛在开封市博物馆二楼会议厅举行。埃文科技总经理王永博士与副总经理武可嘉受邀出席,发表演讲并参与思辨讨论。埃文科技王永博士从“数据流

数据分析思维-分析方法(基础)

数据分析的基础方法概念理解,其关键在于在业务中锻炼数据分析思维。(将以下基础方法带有好奇心的应用在生活中练习数据分析思维)例如:经典的啤酒与尿布(分析一个爸爸去超市买东西的行为,将尿布和啤酒放在一起)例如:分析夜市上100家店那些营业高、利润经营类型等等主要是养成数据分析的思维,可应用工作、生活日常的方方面面。1.象限

Java学习笔记39——网络编程03

TCP通信程序TCP通信程序TCP通信原理TCP发送数据的步骤TCP接收数据的步骤TCP通讯程序练习练习1练习2练习3练习4练习5练习6TCP通信程序TCP通信原理TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通

URL与URI小结

文章目录一、URL是什么?URL的一般形式:二、分类三、URI总结一、URL是什么?每条由Web服务器返回的内容都是和它管理的某个文件相关联的,这些文件中的每一个都有一个唯一的名字,叫做URL(通用资源定位符),是互联网上一种资源的地址。例如:http://www.google.com:80/index.htmlURL

实训笔记——Spark计算框架

实训笔记——Spark计算框架Spark计算框架一、Spark的概述二、Spark的特点三、Spark的安装部署(安装部署Spark的ClusterManager-资源调度管理器的)3.1本地安装--无资源管理器3.2Spark的自带独立调度器Standalone3.2.1主从架构的软件3.2.2Master/work

第26章_瑞萨MCU零基础入门系列教程之独立看门狗定时器-IWDT

本教程基于韦东山百问网出的DShanMCU-RA6M5开发板进行编写,需要的同学可以在这里获取:https://item.taobao.com/item.htm?id=728461040949配套资料获取:https://renesas-docs.100ask.net瑞萨MCU零基础入门系列教程汇总:https://b

热文推荐