我是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);
}
答案 0 :(得分:0)
我有三条建议:
首先,添加错误检查。
其次,如果你遇到mp3问题,请考虑使用Ogg Vorbis。
第三,将指针移动到MainWindow的成员变量而不是局部范围变量。 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
}
太好了,我们有一些开放的流!我们怎么处理他们?
常见问题页面中还有一个警告:
自1.9.2发布以来,Audiere通过展示支持MP3 图书馆。但是,LGPL兼容的MP3代码非常少 适用于各种MP3和硬件。我很高兴 建议使用Ogg Vorbis满足您的所有音乐需求。它用 将CPU时间减少大约五分之一和听起来更好。
在教程的底部,它提到了清理时间:
使用Audiere完成后,只需让RefPtr对象退出 范围,他们会自动清理自己。如果你真的 必须在指针超出范围之前删除对象,只需将指针设置为0。
希望有所帮助。