微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QIODevice :: size和QIODevice :: bytesAvailable始终返回0

如何解决QIODevice :: size和QIODevice :: bytesAvailable始终返回0

我正在编写一个模拟器,要求我不断将生成的原始音频样本推送到QAudioOutput。这是通过像这样将字节写入基础qiodevice来实现的:

Qt_speaker::Qt_speaker()
{
    QAudioFormat fmt;
    fmt.setSampleRate(44100);
    fmt.setChannelCount(1);
    fmt.setSampleSize(sizeof(uint8_t)*8);
    fmt.setCodec("audio/pcm");
    fmt.setByteOrder(QAudioFormat::LittleEndian);
    fmt.setSampleType(QAudioFormat::UnSignedInt);

    QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
    if (!info.isFormatSupported(fmt)) {
        qWarning() << "Raw audio format not supported by backend,cannot play audio.\n"
                      "If you're running a Debian system,try manually installing Qt's"
                      "multimedia plugins with\n"
                      "\t'sudo apt-get install libqt5multimedia5-plugins'";
        toggle(false);
        return;
    }
    output_ = new QAudioOutput(fmt,nullptr);
    output_->setBufferSize(44100);
    //connect(output_,SIGNAL(stateChanged(QAudio::State)),//this,SLOT(output_state_changed(QAudio::State)));
    device_ = output_->start();

}

void Qt_speaker::push_samples(const gameboy::Raw_audio &a)
{
    device_->write(reinterpret_cast<const char *>(a.data()),a.size());
}

我想跟踪排队的样本数,因为声音会加快仿真速度,因此会加快生成的原始音频样本的速度。尝试致电qiodevice::read()总是返回0。我该怎么办?

解决方法

我认为您应该通知QAudioInput信号,以便根据QAudioInput“消耗”的样本进行操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。