您的位置:首页 > 编程语言 > Qt开发

1.QT中播放视频,录音程序的编写

2014-12-16 22:30 337 查看



通过process的方式播放视频

T22VideoPlayer.pro

HEADERS
+=
\

   
MyWidget.h

 

SOURCES
+=
\

   
MyWidget.cpp

 

QT
+=
gui widgets

MyWidget.h

#ifndef MYWIDGET_H

#define MYWIDGET_H

 

#include <QWidget>

#include <QProcess>

#include <QSlider>

 

class MyWidget : public QWidget

{

    Q_OBJECT

public:

    explicit MyWidget(QWidget *parent = 0);

 

    QProcess _process;

 

    QWidget _show;

    QSlider* _slider;

 

signals:

 

public slots:

    void slotOnSliderChanged(int);

};

 

#endif // MYWIDGET_H


MyWidget.cpp

#include "MyWidget.h"

#include <QApplication>

#include <QVBoxLayout>

 

MyWidget::MyWidget(QWidget *parent) :

    QWidget(parent)

{

    QVBoxLayout* lay = new QVBoxLayout(this);

    lay->addWidget(&_show);

    //添加一个进度条,进度条的方向是水平方向的

    lay->addWidget(_slider = new QSlider(Qt::Horizontal));

    //滑动条的最小值是0

    _slider->setMinimum(0);

    //滑动条的最大值是100

    _slider->setMaximum(100);

 

    QString str("mplayer /home/toto/6.wmv -wid ");

    str+= QString::number(_show.winId());

    //通过process的这种方式已经过时了。

    _process.start(str);

 

    connect(_slider, SIGNAL(valueChanged(int)), this, SLOT(slotOnSliderChanged(int)));

}

 

void MyWidget::slotOnSliderChanged(int)

{

    //通过命令的方式移动播放至指定位置

    _process.write("ss 600\n");

}

 

int main(int argc,char* argv[])

{

    QApplication app(argc,argv);

    MyWidget w;

    w.show();

    return app.exec();

}


上面的运行结果是可以播放指定的音乐!

上面的那种方式是过时的,通过下面的方式播放。

 

2
录音和播放程序案例

T23AudioRecord.pro

SOURCES
+=
\

   
main.cpp

 

QT
+=
multimedia

CONFIG
+=
C++11

录音端程序

main.cpp

#include <QCoreApplication>

#include <QAudioInput>

#include <QAudioFormat>

#include <QFile>

#include <QTimer>

#include <QAudioDeviceInfo>

#include <QDebug>

 

int main(int argc, char* argv[])

{

    QCoreApplication app(argc, argv);

 

    // record audio 设置文件存储的位置

    QString audioFileName = "d:\\qt-record.raw";

    QFile audioFile(audioFileName);

    audioFile.open(QFile::ReadWrite);

 

    QAudioFormat format;

 

    format.setSampleRate(8000);

    // 设置音道

    format.setChannelCount(1);

    // 设置八位

    format.setSampleSize(8);

    // 设置编解码

    format.setCodec("codec/pcm");

    // 指定数据模式是大端的还是小端的

    format.setByteOrder(QAudioFormat::LittleEndian);

 

    QAudioDeviceInfo device = QAudioDeviceInfo::defaultInputDevice();

    if(!device.isFormatSupported(format))

    {

        format = device.nearestFormat(format);

 

        qDebug() <<  format.sampleRate();

        qDebug() <<  format.sampleSize();

        qDebug() <<  format.sampleType();

        qDebug() <<  format.codec();

        qDebug() <<  format.byteOrder();

        qDebug() <<  format.channelCount();

    }

 

    QAudioInput* audio = new QAudioInput(format);

 

    //下面表示开始录音了

    // audio->start(&audioFile);

 

    QIODevice* audioData = audio->start();

    audio->setNotifyInterval(200);

    app.connect(audio, &QAudioInput::notify, [&](){

        int bytesReady = audio->bytesReady();

        QByteArray ba(bytesReady, 0);

        ba = audioData->read(bytesReady);

        audioFile.write(ba);

    });

 

    QTimer* timer = new QTimer;

    //录制的声音文件的长度为15秒

    timer->setInterval(15000);

    timer->start();

    //下面对audio进行操作,当时间超时之后停止录音

    QObject::connect(timer, &QTimer::timeout, [&](){

        audio->stop();

        audio->deleteLater();

        audioFile.close();

        app.quit();

    });

 

    return app.exec();

}


运行的时候先开启器此端 在d盘上生成文件



 

T24AudioPlayer.pro

SOURCES += \

    main.cpp

 

QT += multimedia


main.cpp

#include <QCoreApplication>

#include <QAudioOutput>

#include <QAudioFormat>

#include <QFile>

#include <QDebug>

 

int main(int argc,char *argv[])

{

    QCoreApplication app(argc, argv);

 

    QFile file("d:\\qt-record.raw");

    if(!file.open(QFile::ReadOnly))

    {

        qDebug() << "open file error";

        exit(0);

    }

 

    QAudioFormat format;

    format.setSampleRate(8000);

    format.setSampleSize(8);

    format.setSampleType(QAudioFormat::SignedInt);

    format.setCodec("audio/pcm");

    format.setByteOrder(QAudioFormat::LittleEndian);

    format.setChannelCount(1);

 

    QAudioOutput* output = new QAudioOutput(format);

 

    output->start(&file);

 

    return app.exec();

}


运行此部分,发现可以播放音乐!

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: