我想在按钮上播放声音,我有一个工作代码。
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);
设置当前资源。那我该怎么办呢?我不想每次都设置当前的资源..我也无法测试应用程序的性能测试,因为测试人员在客户端..
答案 0 :(得分:1)
您需要在班级中创建单独的slot
按钮,而不是直接连接到buttonPlay->play()
按钮。您看到的问题是buttonPlay
对象正在使用的音频缓冲区是“最后”。所以你需要告诉它从头开始,这是bulletPlay -> setCurrentSource(*filePath);
正在为你做的事情。您不需要创建新资源,您应该能够告诉现有资源重用当前资源(但只是从头开始)。