• Qt 播放音频文件


    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.   
    8.         player = new QMediaPlayer;  
    9.         player->setPlaylist(playlist);  
    10.   
    11.         player->play();  
    12.     }  


    源代码工程: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

  • 相关阅读:
    用python实现简单的调度场算法
    数据结构顺序表python
    数据结构顺序表C
    python绘制5角形,6角星方法
    TsinghuaX+00740043_2X C++程序设计进阶 C7-3
    Struts2开发环境搭建,及一个简单登录功能实例
    Javascript进度条
    java.util.Date与java.sql.Date
    Error while performing database login with the sqljdbc driver:Unable to create connection. Check your URL.
    java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/7899141.html
Copyright © 2020-2023  润新知