Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 按按钮在Qt中播放音频;有效地_Performance_Qt_Audio_Phonon - Fatal编程技术网

Performance 按按钮在Qt中播放音频;有效地

Performance 按按钮在Qt中播放音频;有效地,performance,qt,audio,phonon,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(bulle

我想在按键上播放声音,我有一个工作代码

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)设置当前资源。那我该怎么做呢?我不想每次都设置当前资源。。我不能测试应用程序的性能测试,因为测试人员在客户端

您需要在类中创建一个单独的
插槽,按钮将触发该插槽,而不是直接连接到
buttonPlay->play()
按钮。您看到的问题是
buttonPlay
对象使用的音频缓冲区是“在末尾”。因此,您需要告诉它从头开始,这就是
bulletPlay->setCurrentSource(*filePath)对您有帮助。您不需要创建新资源,您应该能够告诉现有资源重用当前资源(但只需从头开始)。

在调用play()之前是否尝试过启动?