2014-09-21 96 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

問題是網絡和回放緩衝區之間的頻率不同。

我通過使用雙緩衝創建緩衝區來解決此問題。