【问题标题】:How to play QAudioBuffer by QIODevice?如何通过 QIODevice 播放 QAudioBuffer?
【发布时间】:2014-11-15 11:45:06
【问题描述】:

我想在 Qt 5.3.0 MSVC2012 OpenGL 32bit 中使用 QMediaPlayerQAudioProbeQAudioOutput 类制作音频流程序(如电话)。

这是我的代码:

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());
}

音频播放良好,但声音有很多静态(暂停声音)。

我该如何解决这个问题?

【问题讨论】:

    标签: qt audio streaming


    【解决方案1】:

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

    我通过创建具有双缓冲的缓冲区解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多