按下按钮,在Qt中播放音频;有效率的

时间:2013-04-04 13:13:27

标签: 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();

但是在按钮按下时执行所有这些操作会导致性能受损。据我所知,每次光盘访问都是原因。 (嗯..你可以说文件无论如何都会在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);设置当前资源。那我该怎么办呢?我不想每次都设置当前的资源..我也无法测试应用程序的性能测试,因为测试人员在客户端..

1 个答案:

答案 0 :(得分:1)

您需要在班级中创建单独的slot按钮,而不是直接连接到buttonPlay->play()按钮。您看到的问题是buttonPlay对象正在使用的音频缓冲区是“最后”。所以你需要告诉它从头开始,这是bulletPlay -> setCurrentSource(*filePath);正在为你做的事情。您不需要创建新资源,您应该能够告诉现有资源重用当前资源(但只是从头开始)。