1、QSound
QSound提供对平台音频设备的访问.直接继承QObject。
Qt提供了在大多数GUI应用程序中通常都需要的操作:异步播放声音文件。这用一个单呼叫就能简单的完成。
QSound::play("mysounds/bells.wav");
另外,可以创建一个QSound对象然后使用play()槽播放文件.
QSound bells("mysounds/bells.wav");
bells.play();
成员函数:
QSound::QSound ( const QString & filename, QObject * parent = 0)
构造一个QSound能够快速的通过一个名为filename的文件来播放声音。
这也许会比静态函数play使用更多的内存。但它也可能更立即的(依赖平台音响设备而定)的播放。
父类parent被传递给了QObject的构造函数。
QSound::~QSound ()
销毁声音对象。
QString QSound::fileName () const
返回与声音有关的文件名。
bool QSound::isAvailable () [静态]
如果在该平台上存在声音设备便返回真,否则返回假。应用程序要么当声音是十分重要时选择报告用户要么就默默的操作而不麻烦用户了
如果没有有效的声音设备,所有的QSound操作工作安静且快速。
bool QSound::isFinished () const
当声音播放完成时返回真,否则返回假。
int QSound::loops () const
返回声音将播放的次数。
int QSound::loopsRemaining () const
返回声音将循环的次数。该值在每次声音循环后会减少。
该函数在窗口下不支持并且总是返回循环的总数。
void QSound::play ( const QString & filename ) [静态]
播放一个叫做filename的文件中的声音。
void QSound::play () [槽]
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
开启声音播放。该数数立即返回。依靠平台的音频设备,其它的声音也许被停止,也许被新的声音混合。
在任何时候声音可以再次播放,可能混合或者替代先播放的声音。
void QSound::setLoops ( int l )
当它播放时设置声音重复一次。超过-1的值也许会引起声音的死循环。
在Windows中, 不同于1的循环次数的声音将总是死循环。
void QSound::stop () [槽]
停止声音播放。
注意:在windows下的QSound 只支持wav格式
不知道为什么这个类对接口支持写得这么烂,唉!
2、Phonon
Qt phonon多媒体框架,原来QT早已引用这个框架了,呵呵。
Phonon是什么?Qt从4.4版本开始提供的一套多媒体框架,提供多媒体回放的功能。目前在Qt 4.6中实现多媒体播放图形界面主要依赖于 phonon框架,其实qt中还有一个Multimedia模块,帮助文档中对它的描述是:实现底层的多媒体播放功能,在一般情况下上层的接口phonon模块更适合实现这些功能。phonon最初是 一个 源于KDE的项目,为使用音频和视频的应用程序开发提供的一个框架。应用程序不用去管多媒体播放是通过什么实现的(如gstreamer、xine),只需调用相应的接口就行,但这中间需要一个中转,被称为backend。Qt也是通过phonon来实现夸平台的多媒体播放。
多媒体文件的播放主要过程包括:文件读取、分流、解码、输出。
这些在不同的系统中实现方式不同,如windows下的DirectX、Linux下的 gstreamer或xine及Mac下的QuickTime。 而Qt中的phonon作为夸平台的多媒体解决方案,就因该为用户屏蔽掉这些差异。而实际上它做得还不够好,因为用户还需要自己来安装相应的后端插件来完成播放任务。
看完上图,你可以知道,应用Phonon框架实质上分4个部分,你的程序,Phonon库,Phonon后端插件(phonon_backend),真正的后端。 Phonon其实什么都不干,他只是提供了一套API接口,这套接口可以给你的程序调用,同时也是给编写后端插件提供一个规范。
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <phonon/mediaobject.h>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec *codec = QTextCodec::codecForName("GB2312");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
//音乐播放
Phonon::MediaObject *music = Phonon::createPlayer(Phonon::MusicCategory, Phonon::MediaSource("E:/msc/a.mp3"));
music->play();
//视频播放
Phonon::MediaObject *movie = Phonon::createPlayer(Phonon::VideoCategory,Phonon::MediaSource("E:/Movie/lian/窃听风云.avi"));
movie->play();
return a.exec();
}
整个播放影音的流程就是首先由media object开始播放,接著把媒体串流经由path送至sink,sink会经由音效卡等装置重新播放(play back)影音