performance - 按下按钮以Qt播放音频;有效率的

标签 performance qt audio phonon

我想在按钮上播放声音,我有一个有效的代码。

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/

相关文章:

c# - HTTPServerUtility.Transfer 是否比 Response.Redirect 在 asp.net 网站性能方面更有用?

c++ - Qt对象删除导致崩溃

JavaFx 音频输出选择

PHP:了解分支预测的工作原理

c# - 内存使用,SortedList vs List 问题

PHP 包含(JavaScript 和 CSS 文件)

Qt QTcpSocket : How to prevent dead lock in readyRead signal?

qt - PyQT5 错误 : could not find or load Qt platform plugin xcb

html - 在任何浏览器中播放任何格式的音频文件

javascript - HTML 音频播放器时间轴功能添加