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();

但是在按钮按下时做所有这些事情会导致性能受损。我知道每次访问磁盘都是原因。(好吧..您可以说该文件无论如何都在内存中,因此每次按下按钮时都没有磁盘访问权限..缓冲区缓存等等..但是此代码严重损害了性能。)

所以我只是做的是

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 回答