这是一个通过Qt实现的语音对话程序,我将通过几个步骤带你程序实现逻辑
设计思路:
1、使用QAudioInput进行音频输入;使用QAudioOutput进行音频输出
2、使用UDP进行音频数据传输
3、使用QTimer进行通话计时
头文件定义:
#include <QWidget>
#include <QUdpSocket>
#include <QAudioInput>
#include <QAudioOutput>
#include <QIODevice>
#include <QTimer>
#include <QTime>
namespace Ui {
class VoiceCall;
}
class VoiceCall : public QWidget
{
Q_OBJECT
public:
explicit VoiceCall(QWidget *parent = 0);
~VoiceCall();
private:
//初始化音频
void initAudio();
//开始通话
void startCall();
//挂断通话
void hungUp();
private slots:
void on_btn_dial_clicked();
void socketRead();
void audioRead();
void on_btn_hungUp_clicked();
void timeOut();
private:
Ui::VoiceCall *ui;
//UDP
QUdpSocket *m_pSocket;
//音频输入
QAudioInput *m_pAudioInput;
//音频输出
QAudioOutput *m_pAudioOutput;
//音频输入IO
QIODevice *m_pAudioInputIO;
//音频输出IO
QIODevice *m_pAudioOutputIO;
//对方IP
QHostAddress m_address;
//对话端口
int m_port;
//通话计时
QTime m_time;
//通话计时定时器
QTimer *m_pTimer;
};
创建UDP通信和初始化音频
VoiceCall::VoiceCall(QWidget *parent) :
QWidget(parent),
ui(new Ui::VoiceCall)
{
ui->setupUi(this);
m_pSocket = new QUdpSocket(this);
m_pSocket->bind(QHostAddress::Any, 8000);
connect(m_pSocket,