Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

03.07.2010, 02:34

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
class Audio;

class Sound
{
public:
    Sound(Audio& audio)
    {
        mAudio = &audio;
        mSound = NULL;
    }

    bool Load(const string& filename)
    {
        return mAudio->System().createSound(filename.c_str(), FMOD_HARDWARE, 0, &mSound) == FMOD_OK;
    }
    
    void Play() const
    {
        mAudio->System().playSound(FMOD_CHANNEL_FREE, mSound, false, &mChannel);
    }

private:
    Audio*          mAudio;
    FMOD_Sound*     mSound;
    FMOD_Channel*   mChannel
};

class Audio
{
public:
    Audio(uint32_t channels = 32)
    {
        mChannels = channels;

        FMOD::System_Create(&mSystem);

        uint32_t version;
        mSystem->getVersion(&version)

        if (version < FMOD_VERSION)
        {
            cout << "Falsche Version" << endl;
        }

        mSystem->init(mChannels, FMOD_INIT_NORMAL, 0);
    }

    ~Audio()
    {
        mSystem->close();
        mSystem->release();
    }

    FMOD_System& System()
    {
        return *mSystem;
    }

private:
    FMOD::System*   mSystem;
    uint32_t        mChannels;
};


// Beispiel
Audio audio;
Sound sound(audio);
sound.Load("pokemon.wav")
sound.Play();
Weiß aber nicht obs geht, weil ich kein Visual C++ drauf hab.
Und ist auch definitiv nicht perfekt, aber vielleicht hilfts.
stɪl traɪ tuː θɪŋk ˈpɒzətɪv

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TrikkieMikkie« (03.07.2010, 08:06)


12

03.07.2010, 09:17

Mein Vorschlag wär mal, dass du erstmal versuchst überhaput nen sound abzuspielen, und dann erst Versuchst das ganze in Klassen zu Kapseln.

13

03.07.2010, 10:48

Soo ... also ich hab jetzt mal den Code von Wollnashorn ausprobiert. Bekomme diesen aber auch nicht zum laufen.
Trotzdem ein großes Dankeschön an Wollnashorn, dass er mir den Code zur Verfügung gestellt hat.

@E122: Wie er es im Beispiel macht verstehe ich ja und funktioniert auch ^^
Wenn ich jetzt versuche, die Variablen vom Beispielprogramm global zu hallten, müsste ich es nachher auch in eine Klasse packen können, oder ?

Edit: Ich sollte vielleicht noch erwähnen, dass es in dem Beispielprogramm, dass funktioniert, nur eine main Funktion gibt, in der alle Variablen drinnen stehen

14

03.07.2010, 11:40

Häufige Fehlerquelle ist auch, dass der Pfad zur Sounddatei (relativ zur Exe) nicht stimmt. ;)
fka tm

15

03.07.2010, 11:58

Der Pfad stimmt sicher, dass ist kein Problem.
Außerdem würde ich, wenn der Pfad nicht stimmt, eine Fehlermeldung bekommen, die auf den Pfad hinweißt ;)

16

03.07.2010, 12:09

Schon klar.
War eher als allgemeiner Wink mit dem Zaunpfahl gemeint. ;)
fka tm

17

03.07.2010, 13:18

Hey!
Ich hab mein Problem jetzt behoben :D

Ein kleiner Teil, den ich mir wünsche, funktioniert nicht, und zwar das Resetten meines Sounds. (Ich will, dass er nach dem Resetten wieder von vorne anfängt)

Aber das abspielen von Sounds funktioniert jetzt =)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Sound.hpp:

#ifndef SOUND_HPP
#define SOUND_HPP

#include <iostream>
#include <fmod.hpp> //Bilblitheks - Header

#include <fmod_errors.h> //Für die Eroor - Auswertung benötigt
#include <windows.h> //Für die Sleep - Funktion nach System - Update benötigt
#include <conio.h> //Für kbhit und getch benötogt

using namespace std; //Sonst wird const nicht erkannt

class CSound
{
public:
    bool Load(const string &sPath);
    void Quit();
    void Play();
    void Pause_Unpause();
    void Reset_Play();

private:
    void ERRCHECK(FMOD_RESULT result);

    FMOD::System    *m_pSystem;
    FMOD::Sound     *m_pSound;
    FMOD::Channel   *m_pChannel;
    FMOD_RESULT     m_result;
    unsigned int    m_version;
    string            m_sPath;
};
#endif

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Sound.cpp:

#include "Sound.hpp"

//Funktion zum Laden einer Audio - Datei
bool CSound::Load(const string &sPath)
{
    m_result = FMOD::System_Create(&m_pSystem); //Temporäres - System erzeugen
    ERRCHECK(m_result);

    m_result = m_pSystem->getVersion(&m_version); //System Version abfragen
    ERRCHECK(m_result);

    if (m_version < FMOD_VERSION) //Version überprüfen
    {
        printf("Error!  You are using an old version of FMOD x.  This program requires x\n", m_version, FMOD_VERSION);
        return false;
    }
    else
    {
        m_result = m_pSystem->init(1, FMOD_INIT_NORMAL, 0); //Temporäres System initialisieren
        ERRCHECK(m_result);

        //Sounddatei erzeuegn
        m_result = m_pSystem->createStream(sPath.c_str(), FMOD_HARDWARE | FMOD_LOOP_NORMAL | FMOD_2D, 0, &m_pSound);
        ERRCHECK(m_result);
        
        m_sPath = sPath; //Pfad speichern

        return true;
    }
}

//Funktion zum schließen der Ausdiodatei
void CSound::Quit()
{
    //Alle Systeme beenden
    m_result = m_pSound->release();
    ERRCHECK(m_result);
    m_result = m_pSystem->close();
    ERRCHECK(m_result);
    m_result = m_pSystem->release();
    ERRCHECK(m_result);
}

//Funktion zum abspielen und pausieren der Sounds
void CSound::Play()
{
    //Sound abspielen
    m_result = m_pSystem->playSound(FMOD_CHANNEL_FREE, m_pSound, false, &m_pChannel);
    ERRCHECK(m_result);

    m_pSystem->update();
}

//Funktion zum Pausieren und Wiedergeben eines Sounds
void CSound::Pause_Unpause()
{
        bool paused;
    m_pChannel->getPaused(&paused);
    m_pChannel->setPaused(!paused);
}

//Funktion zum Resetten des Sounds (Fängt nach dem nächsten Unpause wieder von vorne zum Spielen an)
void CSound::Reset_Play()
{
    Quit();
    Load(m_sPath);
    Play();
}

//Funktion zur Fehler - Überprüfung
void CSound::ERRCHECK(FMOD_RESULT result)
{
    if (m_result != FMOD_OK)
    {
        printf("FMOD error! (%d) %s\n", m_result, FMOD_ErrorString(m_result));
        exit(-1);
    }
}

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
main.cpp:

#include "Sound.hpp"

int main(int argc, char *argv[])
{
    CSound Sound; //Sound erzeugen

    Sound.Load("Sound/Ton.wma"); //Sound Laden

    Sound.Play(); //Sound abspielen

    Sleep(3000); //3 Sekunden eine andere Aktivität zurchführen

    Sound.Pause_Unpause(); //Sound pausieren

    Sleep(3000); //3 Sekunden eine andere Aktivität zurchführen

    Sound.Pause_Unpause(); //Sound weiter abspielen

    Sleep(3000); //3 Sekunden eine andere Aktivität zurchführen

    Sound.Reset_Play(); //Sound resetten

    Sleep(300); //3 Sekunden eine andere Aktivität zurchführen

    Sound.Quit(); //Sound beenden
}

18

03.07.2010, 15:51

Funktioniert das denn so auch mit dem Mixer? Ich vermute mal, weil du immer einzelne System mit immer nur einem Channel hast, dass du mehrere Sounds nicht gleichzeitig abspielen kannst.
Und das mit dem doppelten Laden bei Reset_Play muss doch nicht sein...
stɪl traɪ tuː θɪŋk ˈpɒzətɪv

19

03.07.2010, 16:00

Ich kann so wie ichs jetzt habe auh mehrere Sounds gleichzeitig abspielen.
Und dass das mim Resetten nicht geht habe ich auch vorher schon geschrieben ;)
Bezüglich mixer muss ich dir sagen: keine ahnung ^^ hab noch nix mim mixer gemacht

20

03.07.2010, 16:20

Und irgendeine "Sicherheitsabfrage", ob der Sound wiederhohlt werden soll oder nicht, muss auch noch rein, da er sonst unendlich oft wiedergegeben wird ;)

Werbeanzeige