2

ボタンを押してサウンドを再生したいのですが、そのためのコードがあります。

Phonon::MediaObject *bulletPlay = new Phonon::MediaObject(this);
bulletPlay -> setCurrentSource(Phonon::MediaSource("newBullet3.wav"));
playOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this);
Phonon::createPath(bulletPlay, playOutput);
bulletPlay->play();

しかし、これらすべてをボタンを押して実行すると、パフォーマンスが低下します。毎回のディスク アクセスが原因であることは理解しています。(まあ..とにかくファイルはRAMにあると言うことができるので、ボタンを押すたびにディスクアクセスはありません..バッファキャッシュとすべて..しかし、このコードはパフォーマンスをひどく傷つけます。)

だから私が単純にやったことは

static  Phonon::MediaObject *bulletPlay;
static  Phonon::AudioOutput *playOutput;
static  Phonon::MediaSource *filePath;

私のクラスで。そしてコンストラクタで

bulletPlay = new Phonon::MediaObject(this);
filePath = new Phonon::MediaSource("newBullet3.wav");
bulletPlay -> setCurrentSource(*filePath);
playOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this);
Phonon::createPath(bulletPlay, playOutput);

そしてbulletPlay->play();ボタン押し。

ただし、サウンドは初回のみ再生されます。そのため、を使用するたびに現在のリソースを設定する必要があるようですbulletPlay -> setCurrentSource(*filePath);。では、どうすればいいのでしょうか?毎回現在のリソースを設定したくありません.テスターはクライアント側にあるため、パフォーマンステスト用にアプリケーションをテストすることもできません..

4

1 に答える 1

1

slotボタンに直接接続するのではなく、ボタンがトリガーするクラスで別のものを作成する必要がありbuttonPlay->play()ます。あなたが見ている問題は、buttonPlayオブジェクトが使用しているオーディオ バッファが「最後」にあることです。したがって、最初からやり直すように指示する必要があります。これがbulletPlay -> setCurrentSource(*filePath);あなたのために行っていることです。新しいリソースを作成する必要はありません。既存のリソースに現在のリソースを再利用するように指示できるはずです (ただし、最初から開始するだけです)。

于 2013-04-04T13:43:44.407 に答える