RTP Audio System  2.0.0
mp3audioreader.h
Go to the documentation of this file.
00001 // ##########################################################################
00002 // ####                                                                  ####
00003 // ####                      RTP Audio Server Project                    ####
00004 // ####                    ============================                  ####
00005 // ####                                                                  ####
00006 // #### MP3 Audio Reader                                                 ####
00007 // ####                                                                  ####
00008 // ####           Copyright (C) 1999-2012 by Thomas Dreibholz            ####
00009 // ####                                                                  ####
00010 // #### Contact:                                                         ####
00011 // ####    EMail: dreibh@iem.uni-due.de                                  ####
00012 // ####    WWW:   https://www.nntb.no/~dreibh/rtpaudio                ####
00013 // ####                                                                  ####
00014 // #### ---------------------------------------------------------------- ####
00015 // ####                                                                  ####
00016 // #### This program is free software: you can redistribute it and/or    ####
00017 // #### modify it under the terms of the GNU General Public License as   ####
00018 // #### published by the Free Software Foundation, either version 3 of   ####
00019 // #### the License, or (at your option) any later version.              ####
00020 // ####                                                                  ####
00021 // #### This program is distributed in the hope that it will be useful,  ####
00022 // #### but WITHOUT ANY WARRANTY; without even the implied warranty of   ####
00023 // #### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    ####
00024 // #### GNU General Public License for more details.                     ####
00025 // ####                                                                  ####
00026 // #### You should have received a copy of the GNU General Public        ####
00027 // #### License along with this program.  If not, see                    ####
00028 // #### <http://www.gnu.org/licenses/>.                                  ####
00029 // ####                                                                  ####
00030 // ##########################################################################
00031 // $Id: mp3audioreader.h 1304 2011-12-22 06:18:45Z dreibh $
00032 
00033 
00034 #ifndef MP3AUDIOREADER_H
00035 #define MP3AUDIOREADER_H
00036 
00037 
00038 #include "tdsystem.h"
00039 #include "audioreaderinterface.h"
00040 #include "audioquality.h"
00041 
00042 
00043 // IMPORTANT: PTHREADEDMPEG *must* be defined, if libmpegsound.a is
00044 //            compiled with PTHREADEDMPEG set!!! Otherwise initialization
00045 //            of Mpegtoraw object will fail with segmentation fault!
00046 #define PTHREADEDMPEG 1
00047 #define HAVE_PTHREAD_H
00048 #include "mpegsound.h"
00049 
00050 
00058 class MP3AudioReader : public AudioReaderInterface,
00059                        public AudioQuality,
00060                        public Soundplayer
00061 {
00062    // ====== Constructor/Destructor =========================================
00063    public:
00069    MP3AudioReader(const char* name = NULL);
00070 
00074    ~MP3AudioReader();
00075 
00076    // ====== Initialize =====================================================
00082    bool openMedia(const char* name);
00083 
00089    void closeMedia();
00090 
00096    bool ready() const;
00097 
00098 
00099    // ====== Input functions ================================================
00105    void getMediaInfo(MediaInfo& mediaInfo) const;
00106 
00112    MediaError getErrorCode() const;
00113 
00119    card64 getPosition() const;
00120 
00126    card64 getMaxPosition() const;
00127 
00133    void setPosition(const card64 position);
00134 
00140    cardinal getNextBlock(void* buffer, const cardinal blockSize);
00141 
00142 
00143    // ====== Soundplayer implementation =====================================
00144    private:
00145    bool initialize(char* filename);
00146    bool setsoundtype(int stereo, int samplesize, int speed);
00147    void set8bitmode();
00148    bool putblock(void* buffer, int size);
00149    int  putblock_nt(void* buffer, int size);
00150    void releasedevice();
00151    bool attachdevice();
00152 
00153 
00154    // ====== Private data ===================================================
00155    private:
00156    bool readNextFrame();
00157 
00158    Mpegtoraw*                MP3Decoder;
00159    Soundinputstreamfromfile* MP3Source;
00160 
00161    cardinal                  BufferPos;
00162    cardinal                  BufferSize;
00163    double                    FramesPerSecond;
00164    card64                    Position;
00165    card64                    MaxPosition;
00166 
00167    MediaError                Error;
00168 
00169    char                      Buffer[RAWDATASIZE * sizeof(short int)];
00170 };
00171 
00172 
00173 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines