2

音が出たらwavファイルを再生したい。テストのために、プッシュボタンを作成し、そのスロットを埋めました

QSoundEffect alarm;
alarm.setSource(QUrl::fromLocalFile("001.wav"));
alarm.setLoopCount(QSoundEffect::Infinite);
alarm.setVolume(1.0f);
alarm.play();

しかし、プッシュボタンをクリックしても音が出ません。検索したところ、Qt5で同じ問題を抱えている人が見つかりましたが、解決策はありませんでした。

圧縮されていないサウンド ファイル (wav) を再生して音量を変更するだけの、Qt5 での最適かつ最も簡単なソリューションは何ですか?

編集:たとえばQMessageBoxを追加すると機能することがわかりました(このメッセージボックスが開いている間):

QSoundEffect alarm;
alarm.setSource(QUrl::fromLocalFile("001.wav"));
alarm.setLoopCount(2);
alarm.setVolume(0.5f);
alarm.play();

QMessageBox::information(this, "test", "it works");

この動作について誰か説明がありますか?

4

4 に答える 4

0

QSoundEffect が正しく機能するには親が必要です。実際には、親として受け取るため、メッセージボックスを開いたときにのみ機能します。

于 2014-11-15T21:55:32.107 に答える
0

Mac OS X を使用している場合は、これを試すことができます: QT5 QSound はすべての wave ファイルを再生しません

しかし、バグは報告されており、Qt 5.1.1 で修正される予定ですので、しばらくお待ちください。

于 2013-07-15T09:06:15.370 に答える
0

そう、バギーです。

別のオーディオ コンバーターを使用することをお勧めします。

私はこのウェブサイトを使用しましたが、その後うまくいきました。

http://www.online-convert.com

于 2013-10-23T18:51:01.310 に答える
0

サウンドの場合、イベント ループを記述する必要があります。例:

void MainWindow::on_pushButton_4_clicked()
{
    QSoundEffect beep;
    beep.setSource(QUrl("qrc:/sound/beep-02.wav"));
    beep.setVolume(1.0f);
    beep.play();
    QEventLoop loop;
    loop.exec();
}
于 2016-04-29T12:08:14.113 に答える