1.QT中播放视频,录音程序的编写
生活随笔
收集整理的這篇文章主要介紹了
1.QT中播放视频,录音程序的编写
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1? 通過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(); } |
| 運行此部分,發現可以播放音樂! |
?
總結
以上是生活随笔為你收集整理的1.QT中播放视频,录音程序的编写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5.QT中关于HTTPClient相关的
- 下一篇: 2.QT中使用资源文件,程序打包