2

我是 QT 的新手,我想通过 QT 播放音乐文件,界面包含一个播放按钮,这样当我单击播放按钮时歌曲应该播放。现在当我运行程序时,我得到了我的界面但不幸的是当我点击播放按钮时,它说 .exe 文件停止工作,它被关闭,退出错误代码 255 getiing 在 QT 创建者窗口中显示..这是主 window.cpp 文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "audiere.h"
using namespace audiere;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //connect(ui->Number1,SIGNAL(textChanged(QString)),this,SLOT(numberChanged()));
    connect(ui->play,SIGNAL(clicked()),this,SLOT(PLAY()));

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::PLAY() {
    AudioDevicePtr device(OpenDevice());
    OutputStreamPtr sound(OpenSound(device,"lk.mp3",true));

    sound->play();
    sound->setRepeat(true);
    sound->setVolume(2.0);

}
4

1 回答 1

0

我有三个建议:

首先,添加错误检查。

其次,如果您在使用 mp3 时遇到问题,请考虑使用 Ogg Vorbis。

第三,将您的指针移动到 MainWindow 的成员变量而不是局部范围变量。Audiere 可能会过早地清理它们。

在 Audiere 中使用错误检查

这是来自 Audiere 下载的 doc 文件夹中的“tutorial.txt”:

您需要先打开 AudioDevice 才能播放声音...

AudioDevicePtr device(OpenDevice());
if (!device) {
    // failure
}

现在我们有了一个设备,我们实际上可以打开并播放声音。

/*
 * If OpenSound is called with the last parameter = false, then
 * Audiere tries to load the sound into memory.  If it can't do
 * that, it will just stream it.
 */
OutputStreamPtr sound(OpenSound(device, "effect.wav", false));
if (!sound) {
  // failure
}

/*
 * Since this file is background music, we don't need to load the
 * whole thing into memory.
 */
OutputStreamPtr stream(OpenSound(device, "music.ogg", true));
if (!stream) {
  // failure
}

太好了,我们有一些开放的流!我们用它们做什么?

常见问题解答 有关最近 MP3 支持的信息

常见问题页面中还有一个警告:

从 1.9.2 版本开始,由于 splay 库,Audiere 支持 MP3。但是,很少有兼容 LGPL 的 MP3 代码可用于各种 MP3 和硬件。我强烈推荐使用 Ogg Vorbis 来满足您的所有音乐需求。它使用的 CPU 时间减少了大约五分之一,而且听起来更好。

当 Audiere 进行清理时

在教程的底部,它提到了何时进行清理:

使用完 Audiere 后,只需让 RefPtr 对象超出范围,它们就会自动清理。如果您确实 必须在其指针超出范围之前删除一个对象,只需将指针设置为 0。

希望有帮助。

于 2013-03-24T01:11:01.653 回答