我想在按钮上播放声音,我有一个有效的代码。
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);
和button上的
bulletPlay->play();
。但是它只是第一次播放声音。因此,似乎每次必须使用
bulletPlay -> setCurrentSource(*filePath);
设置当前资源。那么我该怎么做呢?我不想每次都设置当前资源。我也不能测试应用程序的性能测试,因为测试人员在客户端。
最佳答案
您需要在类中创建按钮触发的单独的slot
,而不是直接连接到buttonPlay->play()
按钮。您看到的问题是buttonPlay
对象使用的音频缓冲区位于“末尾”。因此,您需要告诉它从头开始,这就是bulletPlay -> setCurrentSource(*filePath);
为您所做的。您不需要创建新资源,您应该能够告诉现有资源重用当前资源(但只是从头开始)。
关于performance - 按下按钮以Qt播放音频;有效率的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15812281/