2014-09-21 93 views
4

我想用Qt 5.3.0 MSVC2012 OpenGL 32bit中的QMediaPlayer,QAudioProbeQAudioOutput类制作一个音频流程序(如电话)。如何通过QIODevice播放QAudioBuffer?

这是我的代码:

musicPlayer  = new QMediaPlayer(); 
musicProbe  = new QAudioProbe(); 

musicProbe->setSource(musicPlayer); 

connect(musicProbe, SIGNAL(audioBufferProbed(QAudioBuffer)), 
     this, SLOT(slotGetMusicData(QAudioBuffer))); 

如果探测音频数据,该插槽会被激活。

void MusicPlayer::slotGetMusicData(QAudioBuffer musicBuffer) 
{ 
    /*QAudioBuffer to QByteArray*/ 
    *musicDataBuffer = musicDataBuffer->fromRawData((char *)musicBuffer.data(), 
                ,musicBuffer.byteCount()); 
    /*Send Music Data*/ 
    musicSocket->sendMudicData(*musicDataBuffer); 
    qDebug("send complete"); 
} 

使用套接字,我将数据发送到另一个程序。

其他程序播放收到的音乐。

QAudioOutput *audioOutput = new QAudioOutput(format, this); 
QIoDevice *audioDevice = audioOutput->start(); 

然后,接收到该插槽的数据被激活。

void BgmSocket::slotPlayBgm(QByteArray data)  
{ 
    audioDevice->write(data.data(), data.size()); 
} 

音频打得很好,但声音有很多静态的(停顿音)的。

我怎样才能解决这个问题?

回答

0

问题是网络和回放缓冲区之间的频率不同。

我通过使用双缓冲创建缓冲区来解决此问题。