Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/sound/ogg_player.h @ 9019

Last change on this file since 9019 was 9019, checked in by bensch, 18 years ago

orxonox/trunk: OggPlayer retrieves Information about the current Title
The Title Played is relayed to the Hud's Notifier

File size: 3.2 KB
RevLine 
[4836]1/*!
2 * @file ogg_player.h
[4961]3 * Ogg-Player definition
[4836]4 */
5
6
7#ifndef _OGG_PLAYER_H
8#define _OGG_PLAYER_H
9
[4961]10#include "base_object.h"
11
[5279]12#include "alincl.h"
[4836]13#include <ogg/ogg.h>
14#include <vorbis/vorbisfile.h>
[7329]15#include "threading.h"
[4836]16
[5282]17struct File;
[4836]18
19
[7308]20#define OGG_PLAYER_BUFFER_SIZE (8096 * 2)
[4836]21
[7460]22namespace OrxSound
[6871]23{
[7460]24  // the definition of a Ogg-Player
25  class OggPlayer : public BaseObject
26  {
27  public:
28    /**
29     * An enumerator defining in what State the OggPlayer is.
30     * The OggPlayer can be in multiple States listed here.
31     * It can as an example be in FileOpened and Stopped.
32     */
33    typedef enum {
34      None                   = 0x000,   //!< Initialized
35      FileOpened             = 0x100,   //!< File is Opened
36      SourceAllocated        = 0x200,   //!< Source is Allocated.
37      BuffersAllocated       = 0x400,   //!< 2 Buffers are Allocated.
38      Stopped                = 0x010,   //!< OggPlayer is stopped.
39      Playing                = 0x020,   //!< OggPlayer is Playing.
40      Paused                 = 0x040,   //!< OggPlayer is Paused.
41      Error                  = 0x001,   //!< An Error has occured.
42    } State;
[7305]43
[7460]44    OggPlayer(const std::string& fileName = "");
45    virtual ~OggPlayer();
46    /** @param state compare this State with the internal State @returns true on match */
47    bool operator==(OggPlayer::State state) { return this->state & state; };
[4836]48
[7460]49    bool open(const std::string& fileName = "");
[7305]50
[7460]51    bool play();
52    void stop();
53    void pause();
54    void rewind(); // convenience
55    void jumpTo(float timeCode);
[7303]56
[7460]57    float length();
58    bool isPlaying();
59    bool getState() { return this->state; };
[7295]60
[9019]61    const std::string& artist() const { return this->_artist; };
62    const std::string& title() const { return this->_title; };
63    const std::string& album() const { return this->_album; };
64
65
[7460]66    void debug() const;
67    void printState() const;
68    const char* getVorbisError(int code);
[7305]69
70
[7460]71  private:
72    static int musicThread(void* oggPlayer);
73    bool playback();
74    void suspend();
75    bool update();
[7304]76
[7460]77    void release();
[7304]78
[7460]79    bool stream(ALuint buffer);
80    void empty();
[4836]81
[9019]82    void retrieveFileInfo(OggVorbis_File* file);
83
[7460]84  private:
85    FILE*               oggFile;              //!< general file-handler, to open the sound-file
86    OggVorbis_File      oggStream;            //!< The stream this Ogg-player is playing back
87    vorbis_info*        vorbisInfo;           //!< The information held in the opened ogg-file
88    vorbis_comment*     vorbisComment;        //!< Comments about the ogg-file
[4836]89
[7460]90    ALuint              buffers[2];           //!< buffers that handle sequentially buffering of the audio
91    ALuint              source;               //!< The source we play back on
92    ALenum              format;               //!< The format we play back
93    unsigned int        state;                //!< The States the OggPlayer is in (this can be multiple entries from OggPlayer::State).
[7304]94
[7460]95    SDL_Thread*         musicThreadID;        //!< The Thread in which music is Played back.
[7737]96    OrxThread::Mutex    musicMutex;           //!< A Mutex so that the two threads do not interfere.
[9019]97
98
99
100    std::string         _title;
101    std::string         _artist;
102    std::string         _album;
103    std::string         _vendor;
[7460]104  };
[4836]105
[7460]106}
[4836]107#endif /* _OGG_PLAYER_H */
Note: See TracBrowser for help on using the repository browser.