QSound stop() Funktion



  • Hallo,

    ich bin am verzweifeln, habe das Internet durchsucht aber nichts dazu gefunden vllt. habt ihr ja eine Idee. Und zwar möchte ich gerne ein Lied was ich über QSound::play(); abspiele pausieren mit einem Klick auf den dazugehörigen PauseButton. Ich benutze um die .mp3 zu öffnen den fileDialog. Hier der Codeauschnitt:

    connect(ui->action_ffnen, SIGNAL(triggered()), this, SLOT(oeffnenDatei()));
        connect(ui->playButton, SIGNAL(clicked()), this, SLOT(abspielenDatei()));
        connect(ui->pauseButton,SIGNAL(clicked()),SLOT(pauseMusic()));
    
    }
    
    void Player::oeffnenDatei(){
    
        s = QFileDialog::getOpenFileName(
                            this,
                            "Musikdatei öffnen...",
                            "/Users/nike159/Desktop/Misiore_Music-build-desktop/mysounds",
                            "Music (*.cda *.wav *.mp3)");
    
    }
    
    void Player::abspielenDatei(){
    
        QSound::play(s);
    
    }
    
    void Player::pauseMusic(){
    QSound sound(s);
    sound.stop();
    
    }
    

    Mein Problem ist sicherlich das die Variable s eine Globale QString Variable ist und QSound::stop() ein QSound Objekt erwartet. Doch wie kann ich eine Datei über "Datei->Öffnen" öffnen und abspielen lassen und ebenfalls eine pause Funktion haben?



  • Hat es einen bestimmten Grund warum du QSound und nicht Phonon nimmst?



  • Ne ich mus zugeben, dass ich davor nicht wirklich was von Phonon wusste. Ich habe mittlerweile damit herumexperimentiert aber mit Phonon komm ich nicht wirklich gut klar, ich verzweifel an der Stelle wo ich eine Dateiauswahl starten möchte und diese ausgewählte Datei an ein mediaobject geben möchte.



  • Ich hätte vermutlich nicht nur den Namen gespeichert, sondern das komplette QSound-Objekt.



  • lakam schrieb:

    Ne ich mus zugeben, dass ich davor nicht wirklich was von Phonon wusste. Ich habe mittlerweile damit herumexperimentiert aber mit Phonon komm ich nicht wirklich gut klar, ich verzweifel an der Stelle wo ich eine Dateiauswahl starten möchte und diese ausgewählte Datei an ein mediaobject geben möchte.

    Hier eine Andeutung wie es gehen kann:

    class MainWindow : public QMainWindow {
    ....
        Phonon::MediaObject *media;
        Phonon::AudioOutput *audioOutput;
    ...
    }
    
    MainWindow::MainWindow(...) {
        media = new Phonon::MediaObject(this);
        audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this);
        Phonon::createPath(media, audioOutput);
    }
    
    void MainWindow::play(QString fileName){
        media->setCurrentSource(fileName);
        media->play();
    }
    
    void MainWindow::pause(){
        media->pause();
    }
    
    ...
    play("/home/username/music/song.mp3")
    ...
    

    Wenn dir was unklar ist, frag einfach.



  • Danke dir, dass war genau das was ich gesucht habe.



  • Nun habe ich leider doch ein Problem wenn ich diesen Quellcode versuche zu kompilieren erhalte ich folgende Fehlermeldung:

    make: Leaving directory `/Users/nike159/Desktop/Misiore_Music-build-desktop'
    Der Prozess "/usr/bin/make" wurde mit dem Rückgabewert 2 beendet.
    Fehler beim Erstellen des Projekts Misiore_Music(Ziel: Desktop)
    Bei der Ausführung von Build-Schritt 'Make'

    Der Code sieht wie folgt aus:

    #include <player.h>
    #include "ui_player.h"
    
    Player::Player(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::Player)
    {
    
        ui->setupUi(this);
    
        connect(ui->action_ffnen, SIGNAL(triggered()), this, SLOT(play(QString)));
    
        media = new Phonon::MediaObject(this);
        audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this);
        Phonon::createPath(media, audioOutput);
    }
    
    void Player::play(QString filename){
        filename = QFileDialog::getOpenFileName(this, tr("Select a file"));
        media->setCurrentSource(filename);
        media->play();
    }
    
    void Player::pause(){
        media->pause();
    }
    
    Player::~Player()
    {
        delete ui;
    }
    

    Das ist die .cpp Datei.

    Gruß Lakam



  • Wenn make einen "Error 2" bringt, kommt das von einem Programm Compiler,Linker,... das Make aufruft.

    Lösch mal das komplette Build-Verzeichnis und erstelle das Projekt neu.



  • mmm schrieb:

    Wenn make einen "Error 2" bringt, kommt das von einem Programm Compiler,Linker,... das Make aufruft.

    Lösch mal das komplette Build-Verzeichnis und erstelle das Projekt neu.

    Leider gibt er mir immernoch den Error ich poste mal den gesamten Fehler:

    Führe Build-Schritte für Projekt Misiore_Music aus...
    Unveränderte Konfiguration, qmake-Schritt wird übersprungen.
    Starte "/usr/bin/make" -w
    make: Entering directory `/Users/nike159/Desktop/Misiore_Music-build-desktop'
    g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/473/gcc/mkspecs/macx-g++ -I../Misiore_Music -I../../QtSDK/Desktop/Qt/473/gcc/lib/QtCore.framework/Versions/4/Headers -I../../QtSDK/Desktop/Qt/473/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/473/gcc/lib/QtGui.framework/Versions/4/Headers -I../../QtSDK/Desktop/Qt/473/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/473/gcc/include -I. -I. -I../Misiore_Music -I. -F/Users/nike159/QtSDK/Desktop/Qt/473/gcc/lib -o main.o ../Misiore_Music/main.cpp
    g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/473/gcc/mkspecs/macx-g++ -I../Misiore_Music -I../../QtSDK/Desktop/Qt/473/gcc/lib/QtCore.framework/Versions/4/Headers -I../../QtSDK/Desktop/Qt/473/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/473/gcc/lib/QtGui.framework/Versions/4/Headers -I../../QtSDK/Desktop/Qt/473/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/473/gcc/include -I. -I. -I../Misiore_Music -I. -F/Users/nike159/QtSDK/Desktop/Qt/473/gcc/lib -o player.o ../Misiore_Music/player.cpp
    /Users/nike159/QtSDK/Desktop/Qt/473/gcc/bin/moc -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/473/gcc/mkspecs/macx-g++ -I../Misiore_Music -I../../QtSDK/Desktop/Qt/473/gcc/lib/QtCore.framework/Versions/4/Headers -I../../QtSDK/Desktop/Qt/473/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/473/gcc/lib/QtGui.framework/Versions/4/Headers -I../../QtSDK/Desktop/Qt/473/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/473/gcc/include -I. -I. -I../Misiore_Music -I. -F/Users/nike159/QtSDK/Desktop/Qt/473/gcc/lib -D__APPLE__ -D__GNUC__ ../Misiore_Music/player.h -o moc_player.cpp
    g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/473/gcc/mkspecs/macx-g++ -I../Misiore_Music -I../../QtSDK/Desktop/Qt/473/gcc/lib/QtCore.framework/Versions/4/Headers -I../../QtSDK/Desktop/Qt/473/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/473/gcc/lib/QtGui.framework/Versions/4/Headers -I../../QtSDK/Desktop/Qt/473/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/473/gcc/include -I. -I. -I../Misiore_Music -I. -F/Users/nike159/QtSDK/Desktop/Qt/473/gcc/lib -o moc_player.o moc_player.cpp
    g++ -headerpad_max_install_names -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -o Misiore_Music.app/Contents/MacOS/Misiore_Music main.o player.o moc_player.o   -F/Users/nike159/QtSDK/Desktop/Qt/473/gcc/lib -L/Users/nike159/QtSDK/Desktop/Qt/473/gcc/lib -framework QtGui -framework QtCore 
    Undefined symbols:
      "Phonon::createPath(Phonon::MediaNode*, Phonon::MediaNode*)", referenced from:
          Player::Player(QWidget*)in player.o
          Player::Player(QWidget*)in player.o
      "Phonon::MediaObject::pause()", referenced from:
          Player::pause()     in player.o
      "Phonon::AudioOutput::AudioOutput(Phonon::Category, QObject*)", referenced from:
          Player::Player(QWidget*)in player.o
          Player::Player(QWidget*)in player.o
      "Phonon::MediaObject::MediaObject(QObject*)", referenced from:
          Player::Player(QWidget*)in player.o
          Player::Player(QWidget*)in player.o
      "Phonon::Path::~Path()", referenced from:
          Player::Player(QWidget*)in player.o
          Player::Player(QWidget*)in player.o
      "Phonon::MediaObject::play()", referenced from:
          Player::play(QString)     in player.o
      "Phonon::MediaSource::MediaSource(QString const&)", referenced from:
          Player::play(QString)     in player.o
      "Phonon::MediaSource::~MediaSource()", referenced from:
          Player::play(QString)     in player.o
          Player::play(QString)     in player.o
      "Phonon::MediaObject::setCurrentSource(Phonon::MediaSource const&)", referenced from:
          Player::play(QString)     in player.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    make: *** [Misiore_Music.app/Contents/MacOS/Misiore_Music] Error 1
    make: Leaving directory `/Users/nike159/Desktop/Misiore_Music-build-desktop'
    Der Prozess "/usr/bin/make" wurde mit dem Rückgabewert 2 beendet.
    Fehler beim Erstellen des Projekts Misiore_Music(Ziel: Desktop)
    Bei der Ausführung von Build-Schritt 'Make'
    


  • Vermutlich fehlt in deiner Projektdatei die Angabe, dass Phonon verwendet werden soll. Dazu musst du in der PRO-Datei folgende Zeile ergänzen.

    QT += phonon
    


  • Danke es funktioniert du bist der der Beste 👍 😮

    Gruß Nick


Anmelden zum Antworten