.exe файл закрывается, когда я нажимаю кнопку в интерфейсе пользователя, который должен воспроизводить музыкальный файл

Я новичок в QT, я хочу воспроизводить музыкальный файл через QT, с интерфейсом, содержащим одну кнопку воспроизведения, поэтому, когда я нажимаю кнопку воспроизведения, песня должна воспроизводиться. Теперь, когда я запускаю программу, я получаю свой интерфейс, но, к сожалению, когда я нажимаю кнопку воспроизведения, он говорит, что .exe-файл перестал работать, и он закрывается, с кодом ошибки выхода 255, отображаемым в окне создателя 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);

}

2

Решение

У меня есть три рекомендации:

Сначала добавьте в проверку ошибок.

Во-вторых, рассмотрите возможность использования Ogg Vorbis, если у вас проблемы с mp3.

В-третьих, переместите ваши указатели в качестве переменных-членов MainWindow вместо локальных переменных области видимости. Audiere, вероятно, убирает их преждевременно.

Использование проверки ошибок в Audiere

Это из «tutorial.txt», который поставляется в папке doc загрузки Audiere:

Вам нужно открыть 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
}

Отлично, у нас есть несколько открытых потоков! Что нам с ними делать?

FAQ Информация о недавней поддержке MP3

На странице часто задаваемых вопросов также есть предостережение:

Начиная с версии 1.9.2, Audiere поддерживает MP3 благодаря Splay
библиотека. Однако, очень мало LGPL-совместимого MP3-кода
там, который работает с широким спектром MP3 и аппаратного обеспечения. Я высоко
рекомендуем использовать Ogg Vorbis для всех ваших музыкальных потребностей. Оно использует
меньше процессорного времени примерно в пять раз а также звучит лучше.

Когда Audiere делает уборку

И в нижней части учебника упоминается, когда происходит очистка:

Когда вы закончите использовать Audiere, просто дайте объектам RefPtr выйти из
сфера, и они автоматически очистятся. Если ты действительно
должен удалить объект до того, как его указатель выйдет из области видимости, просто установите указатель на 0.

Надеюсь, это поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]