Всем привет! Вопрос по параллельному воспроизведению двух и более звуковых файлов.
Имеется небольшое приложение, на форме которого присутствует 3 кнопки: 1ая запускает звуковой файл 1 в первом потоке, 2ая соответственно 2ой во втором потоке, 3я прекращает воспроизведение. Оба файла должны воспроизводиться одновременно. И вот такая загвоздка - когда запускаешь приложение в одном экземпляре, щелкаешь сначала на 1ую кнопку, а потом на 2ую, то воспроизводиться будет только звук, при вязаный к последней нажатой кнопке. Но если запустить приложение в двух экземплярах и в первом нажать 1ую кнопку, а во втором 2ую, то будут воспроизводиться оба файла одновременно. Ниже приведены части кода, которые касаются этой проблемы. Там создается два потока и каждому потоку соответствует свой звуковой файл. Что можете посоветовать? Еще замечание, в тех уловиях, в которых пишется программа, недоступны средства Phonon'а
H-файл
class CScadaAlarmThread : public QThread
{
Q_OBJECT
...
public:
QSound* pAlarmSnd; // Звуковой файл аварийной сигнализации
CScadaAlarmThread(QObject *parent = 0);
void run();
};
class CScadaWarningThread : public QThread
{
Q_OBJECT
...
public:
QSound* pWarningSnd; // Звуковой файл предупредительной сигнализации
CScadaWarningThread(QObject *parent = 0);
void run();
};
class CScadaAlarm : public QObject
{
Q_OBJECT
private:
...
CScadaAlarmThread* pAlarmThread;
CScadaWarningThread* pWarnThread;
public:
CScadaAlarm();
~CScadaAlarm();
public slots:
void slotReceipt();
void slotWarningOn();
void slotAlarmOn();
signals:
...
};
CPP-файл
//-----------------------------------------------
// CScadaAlarmThread class
//-----------------------------------------------
CScadaAlarmThread::CScadaAlarmThread(QObject *parent) :
QThread(parent)
{
pAlarmSnd = new QSound("../music/alarm.wav");
}
void CScadaAlarmThread::run()
{
pAlarmSnd->setLoops(-1);
pAlarmSnd->play();
}
//-----------------------------------------------
// CScadaWarningThread class
//-----------------------------------------------
CScadaWarningThread::CScadaWarningThread(QObject *parent) :
QThread(parent)
{
pWarningSnd = new QSound("../music/warning.wav");
}
void CScadaWarningThread::run()
{
pWarningSnd->setLoops(-1);
pWarningSnd->play();
}
//-----------------------------------------------
// CScadaAlarm class
//-----------------------------------------------
CScadaAlarm::CScadaAlarm() : QObject(), state(0)
{
pAlarmThread = new CScadaAlarmThread();
pWarnThread = new CScadaWarningThread();
...
}
CScadaAlarm::~CScadaAlarm()
{
Q_CHECK_PTR(pWarnThread);
Q_CHECK_PTR(pAlarmThread);
pWarnThread->deleteLater();
pAlarmThread->deleteLater();
}
void CScadaAlarm::slotReceipt()
{
...
pWarnThread->pWarningSnd->stop();
pAlarmThread->pAlarmSnd->stop();
}
void CScadaAlarm::slotWarningOn()
{
...
pWarnThread->start();
}
void CScadaAlarm::slotAlarmOn()
{
...
pAlarmThread->start();
}