2

QTの新機能です。インターフェイスに単一の再生ボタンが含まれているので、QTを介して音楽ファイルを再生したいので、再生ボタンをクリックすると曲が再生されます。プログラムを実行すると、インターフェイスが表示されますが、残念ながら再生ボタンをクリックすると、.exeファイルが機能しなくなったと表示され、QTクリエーターウィンドウに255の終了エラーコードが表示されて閉じられます。これがメインの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

3つの推奨事項があります。

まず、エラーチェックを追加します。

次に、mp3に問題がある場合は、OggVorbisの使用を検討してください。

3番目に、ポインターをローカルスコープ変数ではなく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サポートに関するFAQ情報

よくある質問のページにも注意事項があります。

1.9.2リリースの時点で、AudiereはスプレイライブラリのおかげでMP3をサポートしています。ただし、さまざまなMP3およびハードウェアで機能するLGPL互換のMP3コードはほとんどありません。すべての音楽ニーズにOggVorbisを使用することを強くお勧めします。使用するCPU時間が約5分の1になり、音質も向上します。

Audiereがクリーンアップを行うとき

チュートリアルの下部には、クリーンアップがいつ行われるかが記載されています。

Audiereの使用が終了したら、RefPtrオブジェクトをスコープから外すだけで、自動的にクリーンアップされます。ポインタがスコープ外になる前にオブジェクトを本当に 削除する必要がある場合は、ポインタを0に設定するだけです。

お役に立てば幸いです。

于 2013-03-24T01:11:01.653 に答える