Anzeige:
Seite 2 von 2 ErsteErste 12
Ergebnis 16 bis 27 von 27

Thema: Qt, NAS,WAV/ RIFF

  1. #16
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von anda_skoa
    Irgendwelche Linkerfehler?
    Genauzi!

    Code:
    g++ -Wl,-rpath,/usr/qt/3/lib -o spooky_deu main.o gamelib.o window.o wiese.o moc_gamelib.o moc_window.o moc_wiese.o   -L/usr/qt/3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
    main.o(.text+0x4dcb): In function `main':
    : undefined reference to `init_QSound()'
    collect2: ld returned 1 exit status
    make: *** [spooky_deu] Error 1
    [QUOTE]Da es kompiliert scheinst du alles zu haben.[QUOTE]
    Beruhigend

    Hier noch ein Stück aus dem Header:

    Code:
    #include <stdio.h>         // debugging
    
    #include <arts.h>           // aRts-Sound-Plugin, wie  es kompiliert wurde
    
    #include "lang.h"            // laenderspezifische Texte
    #include "config.h"         // Paraneter Darstellung, Fenstergroesse, Dateien
    #include "gamelib.h"   // ujas gamelib: viewport, hiscore, info-textmodule
    #include "window.h"   // Hauptfenster Darstellung, Anzeigen, Buttons
    #include "wiese.h"      // das eigentliche Spiel: jede Menge Sprites und was damit zu tun ist
    
    // ===============================================================================
    
    // -------------------------------------------------------------------------------------------------------
    int init_QSound(); // aus aRts-Plugin
    
    int main(int argc, char **argv)
    { 
      QApplication my_app(argc,argv);                  
      window*      my_window    =new window();    // schickes Layout mit mit modifiziertem Canvasview aus der gamelib
    
    ...
    
    
    printf("setze arts-sound\n");
      if (init_QSound()>0) printf("aRts-Sound erhalten!\n");
      else printf("kein aRts-Sound, benutze NAS!\n");
    Ich habe auch schon probiert, eine Stufe "tiefer" einzusteigen und eine Instanz des QAuServers anzulegen.
    Code:
      QAuServerARTS* artssound  =new QAuServerARTS(0);
    selbes Resultat, der Linker kann mit dem QAuServerARTS nichts anfangen.

    so long,
    BlueJay

  2. #17
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von BlueJay
    Genauzi!

    Code:
    g++ -Wl,-rpath,/usr/qt/3/lib -o spooky_deu main.o gamelib.o window.o wiese.o moc_gamelib.o moc_window.o moc_wiese.o   -L/usr/qt/3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
    main.o(.text+0x4dcb): In function `main':
    : undefined reference to `init_QSound()'
    collect2: ld returned 1 exit status
    make: *** [spooky_deu] Error 1
    Hmm, hast du den Inhalt von arts.cpp irgendwo reinkopiert oder fehlt es da wirklich?
    Zeig mal dein .pro File.

    Hier noch ein Stück aus dem Header:

    Code:
    #include <stdio.h>         // debugging
    
    #include <arts.h>           // aRts-Sound-Plugin, wie  es kompiliert wurde
    mach besser "arts.h" draus, er soll es ja vorranging lokal suchen, sonst findet er am Ende noch einen von aRts selbst

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #18
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Damit hat sich die Fehlermeldung ein wenig vergrößert

    Also nochmal alles von vorne:
    Die Variablen sind gesetzt:
    Code:
    uja:/home/uja/projekte/ujagames_qt2/spooky> set|more
    ARTSINCLUDE=/usr/kde/3.3/include/arts
    ARTSLIBS=/usr/kde/3.3/lib
    BASH=/bin/bash
    (und da sitzt der Kram auch)

    Compilerlauf aRts-Bibliothek erzeugen:

    Code:
    uja:/home/uja/projekte/ujagames_qt2/spooky/arts_plugin> make
    g++ -c -pipe -Wall -W -g -D_REENTRANT -fPIC  -DQT_THREAD_SUPPORT -I/usr/qt/3/mkspecs/linux-g++ -I. -I/usr/kde/3.3/include/arts -I/usr/qt/3/include -I.ui/ -I.moc/ -o .obj/arts.o arts.cpp
    rm -f libqds_arts.so.0.1.0 libqds_arts.so libqds_arts.so.0 libqds_arts.so.0.1
    g++ -Wl,-rpath,/usr/qt/3/lib -shared -Wl,-soname,libqds_arts.so.0 -o libqds_arts.so.0.1.0 .obj/arts.o .obj/moc_arts.o  -L/usr/qt/3/lib -L -lsoundserver_idl -lqt-mt -lpthread
    ln -s libqds_arts.so.0.1.0 libqds_arts.so
    ln -s libqds_arts.so.0.1.0 libqds_arts.so.0
    ln -s libqds_arts.so.0.1.0 libqds_arts.so.0.1
    uja:/home/uja/projekte/ujagames_qt2/spooky/arts_plugin>
    Profile:
    Code:
    ######################################################################
    # spooky vers 1.00 - Internationalisierung - deutsch 02.02.2005
    ######################################################################
    
    TEMPLATE = app
    INCLUDEPATH += . ./german ./arts_plugin
    
    
    # Input
    HEADERS +=  german/lang.h config.h gamelib.h window.h wiese.h arts_plugin/arts.h
    SOURCES +=  main.cpp gamelib.cpp window.cpp wiese.cpp
    Was in main steht, hast du ja.

    <arts.h> gegen "arts.h" getauscht, compilerlauf:
    Code:
    uja:/home/uja/projekte/ujagames_qt2/spooky> qmake spooky_deu.pro
    uja:/home/uja/projekte/ujagames_qt2/spooky> make
    g++ -c -pipe -Wall -W -O3 -mtune=athlon -march=athlon -pipe  -DQT_NO_DEBUG -I/usr/qt/3/mkspecs/linux-g++ -I. -I. -Igerman -Iarts_plugin -I/usr/qt/3/include -o main.o main.cpp
    /usr/qt/3/bin/moc arts_plugin/arts.h -o arts_plugin/moc_arts.cpp
    g++ -c -pipe -Wall -W -O3 -mtune=athlon -march=athlon -pipe  -DQT_NO_DEBUG -I/usr/qt/3/mkspecs/linux-g++ -I. -I. -Igerman -Iarts_plugin -I/usr/qt/3/include -o moc_arts.o arts_plugin/moc_arts.cpp
    g++ -Wl,-rpath,/usr/qt/3/lib -o spooky_deu main.o gamelib.o window.o wiese.o moc_gamelib.o moc_window.o moc_wiese.o moc_arts.o   -L/usr/qt/3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
    main.o(.text+0x4dcb): In function `main':
    : undefined reference to `init_QSound()'
    moc_arts.o(.text+0x224): In function `QAuServerARTS::qt_invoke(int, QUObject*)':
    : undefined reference to `QAuServerARTS::slotCheckObjects()'
    moc_arts.o(.gnu.linkonce.r._ZTV13QAuServerARTS+0x20): undefined reference to `QAuServerARTS::~QAuServerARTS()'
    moc_arts.o(.gnu.linkonce.r._ZTV13QAuServerARTS+0x24): undefined reference to `QAuServerARTS::~QAuServerARTS()'
    moc_arts.o(.gnu.linkonce.r._ZTV13QAuServerARTS+0x5c): undefined reference to `QAuServerARTS::init(QSound*)'
    moc_arts.o(.gnu.linkonce.r._ZTV13QAuServerARTS+0x60): undefined reference to `QAuServerARTS::play(QString const&)'
    moc_arts.o(.gnu.linkonce.r._ZTV13QAuServerARTS+0x64): undefined reference to `QAuServerARTS::play(QSound*)'
    moc_arts.o(.gnu.linkonce.r._ZTV13QAuServerARTS+0x68): undefined reference to `QAuServerARTS::stop(QSound*)'
    moc_arts.o(.gnu.linkonce.r._ZTV13QAuServerARTS+0x6c): undefined reference to `QAuServerARTS::okay()'
    collect2: ld returned 1 exit status
    make: *** [spooky_deu] Error 1
    uja:/home/uja/projekte/ujagames_qt2/spooky>
    Die Fehlermeldungen um moc_arts.o sind neu hinzugekommen.

    Packst du arts.cpp mit ins Profile, werden praktisch alle classes als nicht gefunden angemeckert.


    so long,
    BlueJay
    Geändert von BlueJay (02-02-2005 um 19:23 Uhr)

  4. #19
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das QDS aRts Plugin als Lib zu übersetzen bedeutet, dass du dagegen linken musst.

    Besser du inkludierst es direkt (so hab ich das ansich vorgeschlagen wenn ich mich richtig erinnere) direkt in dein Projekt.

    Also arts.cpp zu den SOURCES, arts.h zu den HEADERS, LIBS und INCLUDES entsprechend den Werten aus arts.pro erweitern.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #20
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Ich hoffe, ich gehe dir nicht allzusehr auf die Nerven.

    nochmal das aktuelle .pro - file:

    Code:
    ######################################################################
    # spooky vers 1.00 - Internationalisierung - deutsch 03.02.2005
    ######################################################################
    
    TEMPLATE = app
    
    INCLUDEPATH += . ./german ./arts_plugin /usr/kde/3.3/include/arts
    LIBS        += -lsoundserver_idl -L/usr/kde/3.3/lib
    
    # Input
    HEADERS +=  german/lang.h config.h gamelib.h window.h wiese.h arts_plugin/arts.h
    SOURCES +=  main.cpp gamelib.cpp window.cpp wiese.cpp arts_plugin/arts.cpp
    
    ##################################################################################
    Der Compiler läuft durch.
    Der seltsame Pfad stammt von einem KDE-Update von 3.3 nach 3.4, ist aber korrekt.
    Der Linker gibt eine Warnung aus:

    Code:
    g++ -Wl,-rpath,/usr/qt/3/lib -o spooky_deu main.o gamelib.o window.o wiese.o arts.o moc_gamelib.o moc_window.o moc_wiese.o moc_arts.o   -L/usr/qt/3/lib -L/usr/X11R6/lib -lsoundserver_idl -L/usr/kde/3.3/lib -lqt -lXext -lX11 -lm
    /usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../i686-pc-linux-gnu/bin/ld: warning: libstdc++.so.5, needed by /usr/kde/3.3/lib/libsoundserver_idl.so, may conflict with libstdc++.so.6
    Das Programm crasht nach dem 1. Zugriff auf ein .wav-File:

    Code:
    uja:/home/uja/projekte/ujagames_qt2/spooky> ./spooky_deu
    setze arts-sound
    aRts-Sound erhalten!
    Einstieg in Spiel
    erster Sound:
    Segmentation fault
    uja:/home/uja/projekte/ujagames_qt2/spooky>
    Die NAS-Variante ist hier stabil.
    Startet man mit sound_off, löppt's auch.

    Um das Ganze vollständig zu machen, noch die relevanten Teile:

    Headerstart:

    Code:
    class wiese:public QCanvas
    {
      Q_OBJECT
     
      public:
      wiese(QWidget* parent);
      QTimer* timrec1;
      QTimer* timrec2;
      QSound* sou[17]; 
      bool sound_on;
      QWidget* oberer;
     
    ... es folgen die ganzen Spritedefinitionen und signals/slots

    Soundroutinen:
    Code:
    void wiese::lade_sounds()
    { QString sf;
      for (int i=0; i<=16; i++)
      { sf="./sounds/";
        switch (i)
        { case 0: sf=sf+"mond.wav"; break;
          case 1: sf=sf+"spinne1.wav"; break;
          case 2: sf=sf+"miau.wav"; break;
    
    ... u.s.w.
    
          case 16: sf=sf+"witch.wav"; break;
        }
        sou[i]=new QSound(sf);
      }
    }
    
    // Slot, Verbindung mit Menu:
    void wiese::set_sound(int nr) 
    { // sound_on=((QSound::isAvailable()) && (nr==0)); // pre-aRts-Version
      sound_on=(nr==0);
      if (sound_on) { emit sound_setting0(true); emit sound_setting1(false); }
      else  { emit sound_setting0(false); emit sound_setting1(true); }
    }
    
    // wie der Name sagt...
    void wiese::mach_lala(int nr) { if (sound_on) sou[nr]->play(); }
    so long,
    BlueJay

    p.s. was mir gerade so einfällt, bringt es was, den aRts upzudaten?
    Geändert von BlueJay (03-02-2005 um 14:40 Uhr) Grund: Zusatzinfo

  6. #21
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Müsste man debuggen: CONFIG+= debug und entweder unter gdb starten, oder einen core dump erzeugen lassen und den analysieren.

    Bist du sicher, dass die unterschiedliche glibc keine Probleme macht?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #22
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von anda_skoa
    Bist du sicher, dass die unterschiedliche glibc keine Probleme macht?
    Bisher nicht, da ich selbst nichts damit gemacht habe und mich auf Qt verlassen habe , aber beim Betrachten des Datums der beiden Bibliotheken beschlich mich ein ganz fürchterlicher Verdacht! Das war das Update von kde 3.3 nach 3.4.

    Heisst für mich: eine Runde emergen und hoffen, dass ich ein aRts erwische, was mit der 6er Lib/ gcc3.4.3 arbeitet. Ist ja fast genauso wie in Windows-Zeiten!

    so long,
    BlueJay

    p.s.
    Das General-Update ist durch, Es kamen etliche libarts-Module hinzu.
    Der Linkerfehler ist weg (neue soudserver.h), der Crash blieb.

    Dummerweise crasht das aRts jetzt selbst imt einem Signal 11, und das auch schon direkt nach dem KDE-Start.
    Geändert von BlueJay (03-02-2005 um 21:41 Uhr) Grund: Zusatzinfo

  8. #23
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825

    aRts-Plugin

    so, da bin ich wieder, mit einem frischem gentoo mit KDE3.4 und den passenden Libs. Qt ist allerdings noch 3.3.

    Stand der Dinge:
    alles kompiliert und linkt fehlerlos, der Soundserver ist initialisierbar, Qt3 meldet, Sound ist vorhanden, aber bei Aufruf von my_sound->play() gibt es wieder den Speicherfehler, diesmal nicht ausgelöst von aRts.

    Codeschnipsel Soundaufruf:
    Code:
    #include <qfile.h>             // INI-Dateien auswerten
    #include <stdio.h>             // debugging
    #include <qsound.h>            // Qt-Lala
    
    #include "arts.h"            // aRts-Sound-Plugin
    #include "lang.h"     // laenderspezifische Texte
    
    // ===============================================================================
    
    // -------------------------------------------------------------------------------------------------------
    int init_QSound(); // aus aRts-Plugin (cpp)
    
    int main(int argc, char **argv)
    { int i;
      QApplication my_app(argc,argv);                  // die Fenster/Appli-Steuerung  
     
    
    printf("setze arts-sound\n");
      if (init_QSound()>0) // Achtung! in wiese->lala nochmal Pointer umbiegen!
      { printf("aRts-Soundpointer erhalten!\n"); 
        if (QSound::isAvailable()) 
        { printf("Soundserver gefunden\n");
          QSound* lache=new QSound("./sound/witch.wav"); // erst nach Pointerbiegen anlegen, sonst crash!
    
          lache->setLoops(1);
          printf("Loops gesetzt\n");
          lache->play();                           //  leider stumm wie ein Fisch
          printf("Initialisierung aRts erfolgreich!\n"); 
        }
        else printf("Finde den Soundserver nicht!\n");
      }
      else printf("kein aRts-Sound, nicht mal 'nen popeligen Pointer drauf!\n");
    
    // -----------------------------------------------------
    Meine bisherigen Forschungen haben ergeben, das das Dingens nicht so gründlich dispatcht wie ich dachte, das Plugin muss ich also in die Wiese-Klasse stopfen (die die Sounds aufstellt und abspielen lässt), sonst Speicherfehler. Vielleicht auch eine eigene Klasse machen.

    Das Ganze läuft brav an, behauptet, dass alles in Ordnung ist, aber Sound bekomme ich nicht: die Kiste bleibt stumm.
    (Jaja, Mixer und PCM sind aufgedreht/eingeschaltet.)

    Aber das brachte ja schon das beiliegende Testmodul hier auch nicht.

    Wat nu? aRts für KDE 3.4 ist drauf mit allen Bibliotheken (laut SysOp)

    so long,
    BlueJay
    Geändert von BlueJay (06-02-2005 um 16:10 Uhr) Grund: Zusatzinfos

  9. #24
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Versuch es mal mit laufender Eventloop, also exec() an der QApplication Instanz aufrufen und den Souhnd in einem Slot abspielen der von einem SingleShot Timer aufgerufen wird.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #25
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von anda_skoa
    Versuch es mal mit laufender Eventloop, also exec() an der QApplication Instanz aufrufen und den Souhnd in einem Slot abspielen der von einem SingleShot Timer aufgerufen wird.
    die ganze Lala in eine Klasse gestopft,
    diese von main erzeigen lassen
    Steuerung (Signal/Slot) in QApps eingehängt:
    kompiliert und linkt alles ganz fein, aber: keinen Sound!

    Aber des Rätsels Lösung soll dir nicht vorenthalten bleiben:
    Nach intensiven Herumschnüffeln in der Arts-Bibliothek bin ich zu dem Schluss gekommen, dass nur die Variante:
    Code:
    QSound::play(dateinamen_mit_dem_wav_file);
    den gewünschten Erfolg brachte.

    Meine (unter arts) vorgefertigten Sounds, aufgerufen mit
    Code:
     my_sound[nr]->play();
    blieben stumm.

    Aber damit kann ich leben.

    BTW: Darf ich dein Plugin (bei kde-apps.org und gamecraft.de) zusammen mit dem Spooky mit anbieten? Credits sind dir latürnich sicher.

    so long,
    BlueJay
    Geändert von BlueJay (12-02-2005 um 18:27 Uhr) Grund: sysop hat mal wieder gestört, und so gab es Dreckfehler

  11. #26
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von BlueJay
    Aber des Rätsels Lösung soll dir nicht vorenthalten bleiben:
    Nach intensiven Herumschnüffeln in der Arts-Bibliothek bin ich zu dem Schluss gekommen, dass nur die Variante:
    Code:
    QSound::play(dateinamen_mit_dem_wav_file);
    den gewünschten Erfolg brachte.

    Meine (unter arts) vorgefertigten Sounds, aufgerufen mit
    Code:
     my_sound[nr]->play();
    blieben stumm.
    Sehr eigenartig, da sollte wirklich beide funktionieren.
    So viel Unterschied ist da intern nicht.

    Versuch mal die Sound Instanzen verzögert zu erzeugen, also erst wenn die Eventloop läuft.

    BTW: Darf ich dein Plugin (bei kde-apps.org und gamecraft.de) zusammen mit dem Spooky mit anbieten? Credits sind dir latürnich sicher.
    Der Code steht unter LGPL

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #27
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von anda_skoa
    Sehr eigenartig, da sollte wirklich beide funktionieren.
    So viel Unterschied ist da intern nicht.
    Genug für KDE3.4 Beta II und seine Libs? Die Soundlibs von 3.3 und 3.4 waren ja schon nicht kompatibel (1.Teil der Geschichte).

    so long,
    BlueJay

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •