Qt 播放音频文件
Qt播放音频文件的方法有好多中,简单介绍几种
不过一下几种方式都需要在Qt工程文件中添加
- QT += multimedia
第一
QMediaPlayer类
可以播放MP3文件,同时使用也是最简单的了,具体代码
- {
- player = new QMediaPlayer;
- connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
- player->setMedia(QUrl::fromLocalFile("E:\\CloudMusic\\林沁简介 - 太阳的后裔 MIX.mp3"));
- player->setVolume(30);
- player->play();
- }
该中实现方式适合单个文件的,如果有多个文件需要播放,那么需要使用下面的方式
- {
- playlist = new QMediaPlaylist;
- playlist->addMedia(QUrl::fromLocalFile("E:\\CloudMusic\\林沁简介 - 太阳的后裔 MIX.mp3"));
- playlist->addMedia(QUrl::fromLocalFile("E:\\CloudMusic\\芭比 - 触电 (完整版).mp3"));
- playlist->addMedia(QUrl::fromLocalFile("E:\\CloudMusic\\郭芯语 - 快点告诉你.mp3"));
- playlist->setCurrentIndex(1);
- player = new QMediaPlayer;
- player->setPlaylist(playlist);
- player->play();
- }
源代码工程:http://download.csdn.net/detail/z609932088/9502687
第二
使用QsoundEffect类
核心代码
- effect.setSource(QUrl::fromLocalFile("E:\\CloudMusic\\林沁简介 - 太阳的后裔 MIX.wav"));
- effect.setLoopCount(QSoundEffect::Infinite);
- effect.setVolume(1.0f);
- effect.play();
源代码工程:http://download.csdn.net/detail/z609932088/9502709
第三种,是播放pcm裸流的
详见“灿哥哥的博客”
连接地址:http://blog.csdn.net/caoshangpa/article/details/51224678
原文连接内容
这两种方法都需要在.pro文件中加入multimedia模块。方法一是通过QAudioOutput实现的,先用QFile打开PCM文件,然后进行音频参数设置,最后调用QAudioOutput的start函数进行播放;方法二也用到了QAudioOutput,先将PCM文件读取到内存,然后进行音频参数设置,最后从内存中定时读取部分数据,调用QIODevice的write函数将这部分数据写入到扬声器。与方法一相比,方法二虽然麻烦,但是这种方法是进行语音编解码和语音网络传输的基础。
方法一:
#include <QApplication>
#include <QFile>
#include <QAudioFormat>
#include <QAudioOutput>
int argc, *argv[])
- );
- QAudioFormat audioFormat;
- audioFormat.setSampleRate(44100);
- audioFormat.setChannelCount(2);
- audioFormat.setSampleSize(16);
- audioFormat.setCodec();
- audioFormat.setByteOrder(QAudioFormat::LittleEndian);
- audioFormat.setSampleType(QAudioFormat::UnSignedInt);
- QAudioOutput( audioFormat, 0);
- a.exec();
- }
方法二:
Widget::Widget(QWidget *parent) :
- QWidget(parent),
- Ui::Widget)
- {
- );
- *file=fopen(,);
- (!file)
- {
- ;
- [fileLength+1];
- );
- (!info.isFormatSupported(audioFormat)) {
- QAudioOutput(audioFormat, );
- QTimer();
- connect(timer, SIGNAL(timeout()), SLOT(slotTimeout()));
- }
void
i=0;
- (i<fileLength/1764)
- (audioOutput&&audioOutput->state()!=QAudio::StoppedState&&
- chunks = audioOutput->bytesFree()/audioOutput->periodSize();
- (chunks)
- (tempBuffer.length() >= audioOutput->periodSize())
- ;
- }
- }
PCM裸流1秒的数据量是44100×16×2/8=176400字节,那么10毫秒的数据量就是1764字节,所以定时器定时10毫秒,每隔10毫秒从数组中顺序读取1746个字节。
PCM音频文件的制作参考:http://blog.csdn.net/caoshangpa/article/details/51218994
音频参数解析参考:http://blog.csdn.net/caoshangpa/article/details/51218597
测试用PCM音频文件下载链接:http://download.csdn.net/detail/caoshangpa/9497751
方法二源码:见http://blog.csdn.net/caoshangpa/article/details/51224678
Qt 播放音频文件的更多相关文章
- 关于Window Server2008 服务器上无法播放音频文件的解决方案
在偌大的百度当中查找我所需要的资源信息,但网络上所描述的都不能解决,发生此类问题的人很多,但是都没有得到准确的解决方法!经个人各方面的尝试,其实非常简单的解决了无法播放音频文件的问题,如果各位今后也遇 ...
- ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件
原文:ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件 先看效果图,然后上代码: <UserControl x:Class= ...
- .NET winform播放音频文件
前提:最近要求做一个在winform端做一个音频文件播放的功能,至此,总结最近搜寻的相关资料. 一.微软提供了三种方式来播放音频文件 1.通过System.Media.SoundPlayer来播放 2 ...
- C#调用mciSendString播放音频文件
mciSendString函数是一个WinAPI,主要用来向MCI(Media Control Interface)设备发送字符串命令. 一.函数的声明如下: private static exter ...
- Unity 播放音频文件
Unity 播放音频文件参考代码: public void Play(string strSoundName, float autoDestroyTime = 0f, bool bLoop = fal ...
- h5 audio播放音频文件
h5 audio播放音频文件 注:下面html中样式及不相关的内容去掉了 第一个例子 播放没有防盗链的外网音频文件是可以的 <!doctype html> <html> < ...
- jquery自动播放音频文件
使用jquery自动播放音频文件 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- 使用audio标签播放音频文件
HTML5定义了一个新的元素用来指定标准的方式来插入音频文件到web页面中:<audio>标签.使用audio标签可以控制音频的播放与停止,循环播放与播放次数设置,以及播放位置等等. 例如 ...
- linux dsp 播放音频文件
#include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ioc ...
随机推荐
- thinkphp5.0独立配置
独立配置文件 新版支持配置文件分离,只需要配置extra_config_list参数(在应用公共配置文件中). 例如,不使用独立配置文件的话,数据库配置信息应该是在config.php中配置如下: / ...
- 使用fastadmin系统自带的图片上传plupload
首先,form表单需要具有如下代码 <form class="form-horizontal" role="form" method="POST ...
- Ubuntu 如何更换阿里源
#进入源地址 cd /etc/apt #备份源文件 sudo cp sources.list sources.list.bak #编辑 sudo vim /etc/apt/sources.list d ...
- 洛谷P3275 [SCOI2011]糖果 [差分约束系统]
题目传送门 糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比 ...
- 关于字体剥离和精简工具 FontSubsetGUI 和 FontPruner 的比较。
在 Unity 中制作游戏时对动态字体的剥离和精简是现在常用的手段,现在有两篇博客是大家阅读和参照较多的,分别是 如何精简Unity中使用的字体文件 和 FontPruner 字体精简工具.他们各自提 ...
- Linux-数据库2
表记录的操作 增 1.插入一条记录 语法:insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......); ...
- 莫队p2 【bzoj3809】Gty的二逼妹子序列
发现一篇已经够长了...所以就放在这里吧... http://hzwer.com/5749.html ↑依然是看大牛题解过的 袜子那道题太简单了.... 然后被这道题超时卡了一段时间....... ...
- hdu 2709 递推
题意:给出一个数,把他拆成2^n和的形式,问有多少种拆法 链接:点我 对6进行分析 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 1 1 4 2 2 4 2 4 对最上面4个,显然是由4 ...
- csv文件导入到mysql
如何将csv文件导入到mysql数据库呢,方法有很多但最简单粗暴的方法还是用sql语句啦,像下面这样. LOAD DATA LOCAL INFILE 'csv文件路径' INTO TABLE 数据表名 ...
- JDK及JRE中bin工具说明
jre/bin工具说明:javac:Java编译器,将Java源代码换成字节代 java:Java解释器,直接从类文件执行Java应用程序代码 appletviewer(小程序浏览器):一种执行HTM ...