qt在windows下实现录音放音同步
来源:互联网 发布:给网络销售平台供货 编辑:程序博客网 时间:2024/04/30 01:30
qt在windows下实现录音放音同步
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
环境:
主机:WIN8
开发环境:Qt5 3.1.2
说明:
做一个类似qq的语音传输的软件,所以测试windows下如何用qt进行语音同步播放
源码:
mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow> #include <QAudioInput>#include <QAudioOutput>#include <iostream>#include <QFile>#include <QBuffer>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private slots: void stopRecording(); void finishedPlaying(QAudio::State state); void readMore();private: Ui::MainWindow *ui; QFile outputFile; // class member. QAudioInput* audio_in; // class member. QFile inputFile; // class member. QAudioOutput* audio_out; // class member. QIODevice *myBuffer_in; QIODevice *myBuffer_out; //QBuffer Buffer;};#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDebug>#include <QTimer>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); outputFile.setFileName("test.raw"); outputFile.open( QIODevice::WriteOnly | QIODevice::Truncate ); QAudioFormat format; // set up the format you want, eg. format.setSampleRate(8000); format.setChannelCount(1); format.setSampleSize(16); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); format.setSampleType(QAudioFormat::UnSignedInt); //format.setSampleType(QAudioFormat::SignedInt); QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice(); if (!info.isFormatSupported(format)) { qWarning()<<"default format not supported try to use nearest"; format = info.nearestFormat(format); } audio_in = new QAudioInput(format, this); //QTimer::singleShot(3000, this, SLOT(stopRecording())); //audio_in->start(&outputFile); myBuffer_in = audio_in->start(); connect(myBuffer_in, SIGNAL(readyRead()), SLOT(readMore())); // Records audio for 3000ms qDebug() <<"record begin!" << endl; inputFile.setFileName("test.raw"); inputFile.open(QIODevice::ReadOnly); audio_out = new QAudioOutput(format, this); connect(audio_out,SIGNAL(stateChanged(QAudio::State)),SLOT(finishedPlaying(QAudio::State))); //audio_out->start(&inputFile); //audio_out->start(myBuffer_out); myBuffer_out = audio_out->start(); qDebug() <<"play begin!" << endl;}MainWindow::~MainWindow(){ delete ui;}void MainWindow::readMore(){ if (!audio_in) return; QByteArray m_buffer(2048,0); qint64 len = audio_in->bytesReady(); qDebug() << "len1 = " << len; qint64 l = myBuffer_in->read(m_buffer.data(), len); qDebug() << "len2 = " << l; myBuffer_out->write(m_buffer);}void MainWindow::stopRecording() { qDebug() << "enter stop"; audio_in->stop(); outputFile.close(); delete audio_in; qDebug() <<"record end!" << endl;// inputFile.setFileName("test.raw");// inputFile.open(QIODevice::ReadOnly);// QAudioFormat format;// // Set up the format, eg.// format.setSampleRate(8000);// format.setChannelCount(1);// format.setSampleSize(16);// format.setCodec("audio/pcm");// format.setByteOrder(QAudioFormat::LittleEndian);// format.setSampleType(QAudioFormat::UnSignedInt);// QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());// if (!info.isFormatSupported(format)) {// qWarning()<<"raw audio format not supported by backend, cannot play audio.";// return;// }// audio_out = new QAudioOutput(format, this);// connect(audio_out,SIGNAL(stateChanged(QAudio::State)),SLOT(finishedPlaying(QAudio::State)));// audio_out->start(&inputFile);// //audio_out->start(myBuffer);// qDebug() <<"play begin!" << endl; }void MainWindow::finishedPlaying(QAudio::State state) {// if(state == QAudio::IdleState) {// audio_out->stop();// inputFile.close();// delete audio_out;// } qDebug() << "play end!" << endl; }
main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();}
1 0
- qt在windows下实现录音放音同步
- 用Qt实现录音以及放音
- Qt模块化笔记之multimedia——实时录音放音的另类实现
- 回音消除 Speex AEC 录音放音同步对齐
- 一个利用windows api控制放音音量和录音麦克风音量实现类(c++代码)
- VC实现录音,放音,保存,打开功能
- 通过dsp设备实现录音与放音编程实例
- qt实现录音功能
- mysql在windows平台下线程同步的实现方式
- linux下录音、放音程序
- linux下录音、放音程序
- FFMPEG在Windows下的屏幕录像录音
- QT 在Windows 下安装
- QT 实现mp3录音程序
- Android下音频的测试程序tinyalsa(录音,放音,查看声卡信息)
- alsa录音放音执行流程详解
- linux下QT在windows下运行
- mysql在windows下主从同步配置
- 进程间通信方式及比较
- 笔记18 基本数据类型的封装类
- Linux下Java程序访问SQL Server数据库
- 利用stringstream将文件中的内容一行行读取并输出出来
- 一层交换 二层交换 三层交换 四层交换 七层交换 OSI参考模型
- qt在windows下实现录音放音同步
- C++之vector模板类
- CentOS安装php mbstring的扩展
- hibernate操作视图的问题
- Android的选项菜单,用代码编写
- Audio系统和上层接口
- 手机归属地查询示例
- 阻塞队列实现生产者消费者模式
- 笔记19 日期类