我正在编写一个模拟器,它要求我不断地将生成的原始音频样本推送到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。我该怎么做呢?
发布于 2020-12-18 14:35:29
我认为你应该通知QAudioInput的信号,以便根据QAudioInput“消耗”的样本来表现。
https://stackoverflow.com/questions/63385015
复制相似问题