Qt播放音频文件的方法有好多中,简单介绍几种

不过一下几种方式都需要在Qt工程文件中添加

  1. QT       += multimedia

第一

QMediaPlayer类

可以播放MP3文件,同时使用也是最简单的了,具体代码

  1. {
  2. player = new QMediaPlayer;
  3. connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
  4. player->setMedia(QUrl::fromLocalFile("E:\\CloudMusic\\林沁简介 - 太阳的后裔 MIX.mp3"));
  5. player->setVolume(30);
  6. player->play();
  7. }

该中实现方式适合单个文件的,如果有多个文件需要播放,那么需要使用下面的方式

  1. {
  2. playlist = new QMediaPlaylist;
  3. playlist->addMedia(QUrl::fromLocalFile("E:\\CloudMusic\\林沁简介 - 太阳的后裔 MIX.mp3"));
  4. playlist->addMedia(QUrl::fromLocalFile("E:\\CloudMusic\\芭比 - 触电 (完整版).mp3"));
  5. playlist->addMedia(QUrl::fromLocalFile("E:\\CloudMusic\\郭芯语 - 快点告诉你.mp3"));
  6. playlist->setCurrentIndex(1);
  7. player = new QMediaPlayer;
  8. player->setPlaylist(playlist);
  9. player->play();
  10. }

源代码工程:http://download.csdn.net/detail/z609932088/9502687

第二

使用QsoundEffect类

核心代码

  1. effect.setSource(QUrl::fromLocalFile("E:\\CloudMusic\\林沁简介 - 太阳的后裔 MIX.wav"));
  2. effect.setLoopCount(QSoundEffect::Infinite);
  3. effect.setVolume(1.0f);
  4. 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函数将这部分数据写入到扬声器。与方法一相比,方法二虽然麻烦,但是这种方法是进行语音编解码和语音网络传输的基础。

方法一:

[cpp] 

#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();
  • }

方法二:

[cpp] 

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()));
  • }
[cpp] 

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 播放音频文件的更多相关文章

  1. 关于Window Server2008 服务器上无法播放音频文件的解决方案

    在偌大的百度当中查找我所需要的资源信息,但网络上所描述的都不能解决,发生此类问题的人很多,但是都没有得到准确的解决方法!经个人各方面的尝试,其实非常简单的解决了无法播放音频文件的问题,如果各位今后也遇 ...

  2. ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件

    原文:ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件 先看效果图,然后上代码: <UserControl x:Class= ...

  3. .NET winform播放音频文件

    前提:最近要求做一个在winform端做一个音频文件播放的功能,至此,总结最近搜寻的相关资料. 一.微软提供了三种方式来播放音频文件 1.通过System.Media.SoundPlayer来播放 2 ...

  4. C#调用mciSendString播放音频文件

    mciSendString函数是一个WinAPI,主要用来向MCI(Media Control Interface)设备发送字符串命令. 一.函数的声明如下: private static exter ...

  5. Unity 播放音频文件

    Unity 播放音频文件参考代码: public void Play(string strSoundName, float autoDestroyTime = 0f, bool bLoop = fal ...

  6. h5 audio播放音频文件

    h5 audio播放音频文件 注:下面html中样式及不相关的内容去掉了 第一个例子 播放没有防盗链的外网音频文件是可以的 <!doctype html> <html> < ...

  7. jquery自动播放音频文件

    使用jquery自动播放音频文件 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  8. 使用audio标签播放音频文件

    HTML5定义了一个新的元素用来指定标准的方式来插入音频文件到web页面中:<audio>标签.使用audio标签可以控制音频的播放与停止,循环播放与播放次数设置,以及播放位置等等. 例如 ...

  9. linux dsp 播放音频文件

    #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ioc ...

随机推荐

  1. <c:if></c:if>用法-转载

    <c:if test="value ne, eq, lt, gt,...."> 用法 类别 运算符 算术运算符 + . - . * . / (或 div )和 % (或 ...

  2. vue操作本地存储

    const ls = window.localStorage const ss = window.sessionStorage export const LStorage= { getItem(key ...

  3. Python类总结-封装(私有属性,方法)

    封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把 ...

  4. JSP中动态INCLUDE与静态INCLUDE的区别?

    动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含 ...

  5. php获取当前域名、主机、URL、端口、参数、网址、路径、代理等【转】

    <?php //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br />"; //获取网页地址 echo $_SERVER['PH ...

  6. PHP代码重用

    代码重用 include() 和require() 都是载入文件 include()如果载入的文件不存在,提示警告错误,程序还可以继续执行 require()如果载入的文件不存在,致命性错误,程序终止 ...

  7. BZOJ1552/3506 [Cerc2007]robotic sort

    Splay 与之前不同的是如果你仅仅是翻转左右区间的话可以在find里面做因为对他有影响的子树在做之前一定在他的上面从上到下搜索的过程可以把rever做了. 但这道题要求我们输出转换之前的,因此不能保 ...

  8. CodeForces - 1017C The Phone Number

    题面在这里! 一开始有一种构造猜想,可以把答案降到 sqrt(N) 级别. 考虑把 {1,2,...,n} 分成 sqrt(N) 段,每一段是连续的sqrt(N)个数.然后我们倒着把每一段数放上. 比 ...

  9. 20162304 实验一《Java开发环境的熟悉》实验报告

    Linux基础与Java开发环境 实验内容 1.熟悉Linux基础操作: 2.使用JDK编译.运行简单的Java程序: 实验要求 1.学习<Linux基础入门(新版)> 2.完成实验.撰写 ...

  10. PAT甲级1098. Insertion or Heap Sort

    PAT甲级1098. Insertion or Heap Sort 题意: 根据维基百科: 插入排序迭代,消耗一个输入元素每次重复,并增加排序的输出列表.在每次迭代中,插入排序从输入数据中删除一个元素 ...