64,637
社区成员
发帖
与我相关
我的任务
分享
发送端:
void realTimeRadio::initInputDevice()
{
//todo;发送给界面进行更新
audioformat.setFrequency(8000);//设置录入音频的format
audioformat.setChannels(1);
audioformat.setSampleSize(16);
audioformat.setSampleType(QAudioFormat::SignedInt);
audioformat.setByteOrder(QAudioFormat::LittleEndian);
audioformat.setCodec("audio/pcm");
QAudioDeviceInfo info(QAudioDeviceInfo::defaultInputDevice());
if (!info.isFormatSupported(audioformat)) {
audioformat = info.nearestFormat(audioformat);
emit msgNotify("Default format not supported - trying to use nearest");
}
//AudioInfo继承自QIODevice,重写了writedata
audioInfo = new AudioInfo(audioformat, this);
//writedata函数中发送update(const char*,qint64),OnUpdate进行网络传输
connect(audioInfo, SIGNAL(update(const char*,qint64)), this, SLOT(OnUpdate(const char*,qint64)));
createAudioInput();
}
void realTimeRadio::createAudioInput()
{
audioInput = new QAudioInput(audioDevice, audioformat, this);
audioInfo->start();
audioInput->start(audioInfo);
}
接收端:
void listenManager::initializeAudio()
{
//设置QAudioOutput的format,和发送端保持一致
audioformat.setFrequency(8000);
audioformat.setChannels(1);
audioformat.setSampleSize(16);
audioformat.setCodec("audio/pcm");
audioformat.setByteOrder(QAudioFormat::LittleEndian);
audioformat.setSampleType(QAudioFormat::SignedInt);
QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
if (!info.isFormatSupported(audioformat)) {
audioformat = info.nearestFormat(audioformat);
}
//audioOutputInfo继承QIODevice,ReadData和WriteData里面均为空,只返回数据长度
outputInfo = new audioOutputInfo(audioformat);
createAudioOutput();
}
void listenManager::createAudioOutput()
{
audioOutput = new QAudioOutput(audiodevice, audioformat, this);
outputInfo->start();
audioOutput->start(outputInfo);
//recSession获取线程1的数据,然后发送radioNotify消息,outputInfo接收,然后在OnradioNotify写入数据,且成功
connect(&recSession, SIGNAL(radioNotify(const char*)), outputInfo, SLOT(OnradioNotify(const char*)));
}
audioOutputInfo类:
qint64 audioOutputInfo::readData(char *data, qint64 len)
{
return len;
}
qint64 audioOutputInfo::writeData(const char *data, qint64 len)
{
return len;
}
qint64 audioOutputInfo::bytesAvailable() const
{
int ilen = QIODevice::bytesAvailable();
return QIODevice::bytesAvailable();
}
void audioOutputInfo::OnradioNotify(const char* data)
{
audioMutex.lock();
int ret = write(data);
audioMutex.unlock();
}