gpt4 book ai didi

qt - Qt QAudioOutput StateChnged始终处于ActiveState(Qt 5.1 Windows MinGW)

转载 作者:行者123 更新时间:2023-12-02 23:16:34 24 4
gpt4 key购买 nike

我有一个从QObject派生的类,该类在QByteArray中有一堆串联的WAVE文件作为成员变量。

我想通过QAudioOuput播放该数组中的特定文件(假设我具有它的偏移量)。

这是PlaySound方法的代码:

void DRMUtils::PlaySound(int offset){

mAudioFormat = new QAudioFormat(GetFormat(offset));
mAudioOut = new QAudioOutput(*mAudioFormat);
mBufferedAudio = new QBuffer();
mBufferedAudio->setData(GetSound(offset));
mBufferedAudio->open(QIODevice::ReadOnly);


connect(mAudioOut, SIGNAL(stateChanged(QAudio::State)), this, SLOT(handleAudioStateChanged(QAudio::State)));
mAudioOut->start(mBufferedAudio);
}

我通过GetFormat(offset)从前44个字节(WAVE标准)中获取文件格式,并通过GetSound(offset)以QByteArray格式获取数据

一切似乎都正常(我可以听到示例播放),但是QAudioFormat的状态永远不会从“ActiveState”更改

这是我的广告位代码:
void DRMUtils::handleAudioStateChanged(QAudio::State newState)
{
qDebug() << "State: " << newState;
switch (newState) {
case QAudio::IdleState:
// Finished playing
mAudioOut->stop();
mBufferedAudio->close();
delete mAudioOut;
delete mBufferedAudio;
delete mAudioFormat;
qDebug() << "DELETED!";
break;

case QAudio::StoppedState:
// Stopped for other
qDebug() << "STOPPED!";
if (mAudioOut->error() != QAudio::NoError) {
// Error handling
qDebug() << "STOPPED ERROR!";
}
break;

default:
// ... other cases as appropriate
qDebug() << "DEFAULT!";
break;
}
}

我的调试输出始终是:
State:  ActiveState
DEFAULT!

我是否必须以某种方式“盖住” mBufferedAudio,以使QAudioOutput在采样完成后“知道”?

另外,我任何人都可以告诉我何时初始化此类mAudioOut的原因(声明父级):
mAudioOut = new QAudioOutput(*mAudioFormat, this);

而不是(不声明父对象):
mAudioOut = new QAudioOutput(*mAudioFormat);

我没有任何输出到扬声器(已声明父项)。

谢谢

最佳答案

可能this被删除了吗?因此,当指定父对象时,mAudioOut也将被删除。它还可以解释为什么您不接收状态更改(如果对象被删除,则无法再调用该插槽)。

关于qt - Qt QAudioOutput StateChnged始终处于ActiveState(Qt 5.1 Windows MinGW),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17535126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com