当我单击应该播放音乐文件的用户界面中的按钮时,.exe文件关闭

时间:2013-03-23 17:58:48

标签: c++ qt audio-player

我是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);

}

1 个答案:

答案 0 :(得分:0)

我有三条建议:

首先,添加错误检查。

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

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

在Audiere中使用错误检查

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

您需要打开音频设备才能播放声音......

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发布以来,Audiere通过展示支持MP3   图书馆。但是,LGPL兼容的MP3代码非常少   适用于各种MP3和硬件。我很高兴   建议使用Ogg Vorbis满足您的所有音乐需求。它用   将CPU时间减少大约五分之一听起来更好。

Audiere清理时

在教程的底部,它提到了清理时间:

  

使用Audiere完成后,只需让RefPtr对象退出   范围,他们会自动清理自己。如果你真的   必须在指针超出范围之前删除对象,只需将指针设置为0。

希望有所帮助。