1 /*************************************************************************** 2 copyright : (C) 2002 - 2008 by Scott Wheeler 3 email : wheeler@kde.org 4 ***************************************************************************/ 5 6 /*************************************************************************** 7 * This library is free software; you can redistribute it and/or modify * 8 * it under the terms of the GNU Lesser General Public License version * 9 * 2.1 as published by the Free Software Foundation. * 10 * * 11 * This library is distributed in the hope that it will be useful, but * 12 * WITHOUT ANY WARRANTY; without even the implied warranty of * 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 14 * Lesser General Public License for more details. * 15 * * 16 * You should have received a copy of the GNU Lesser General Public * 17 * License along with this library; if not, write to the Free Software * 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 19 * 02110-1301 USA * 20 * * 21 * Alternatively, this file is available under the Mozilla Public * 22 * License Version 1.1. You may obtain a copy of the License at * 23 * http://www.mozilla.org/MPL/ * 24 ***************************************************************************/ 25 26 #ifndef TAGLIB_MPEGPROPERTIES_H 27 #define TAGLIB_MPEGPROPERTIES_H 28 29 #include "taglib_export.h" 30 #include "audioproperties.h" 31 32 #include "mpegheader.h" 33 34 namespace TagLib { 35 36 namespace MPEG { 37 38 class File; 39 class XingHeader; 40 41 //! An implementation of audio property reading for MP3 42 43 /*! 44 * This reads the data from an MPEG Layer III stream found in the 45 * AudioProperties API. 46 */ 47 48 class TAGLIB_EXPORT Properties : public AudioProperties 49 { 50 public: 51 /*! 52 * Create an instance of MPEG::Properties with the data read from the 53 * MPEG::File \a file. 54 */ 55 Properties(File *file, ReadStyle style = Average); 56 57 /*! 58 * Destroys this MPEG Properties instance. 59 */ 60 virtual ~Properties(); 61 62 /*! 63 * Returns the length of the file in seconds. The length is rounded down to 64 * the nearest whole second. 65 * 66 * \note This method is just an alias of lengthInSeconds(). 67 * 68 * \deprecated 69 */ 70 virtual int length() const; 71 72 /*! 73 * Returns the length of the file in seconds. The length is rounded down to 74 * the nearest whole second. 75 * 76 * \see lengthInMilliseconds() 77 */ 78 // BIC: make virtual 79 int lengthInSeconds() const; 80 81 /*! 82 * Returns the length of the file in milliseconds. 83 * 84 * \see lengthInSeconds() 85 */ 86 // BIC: make virtual 87 int lengthInMilliseconds() const; 88 89 /*! 90 * Returns the average bit rate of the file in kb/s. 91 */ 92 virtual int bitrate() const; 93 94 /*! 95 * Returns the sample rate in Hz. 96 */ 97 virtual int sampleRate() const; 98 99 /*! 100 * Returns the number of audio channels. 101 */ 102 virtual int channels() const; 103 104 /*! 105 * Returns a pointer to the Xing/VBRI header if one exists or null if no 106 * Xing/VBRI header was found. 107 */ 108 const XingHeader *xingHeader() const; 109 110 /*! 111 * Returns the MPEG Version of the file. 112 */ 113 Header::Version version() const; 114 115 /*! 116 * Returns the layer version. This will be between the values 1-3. 117 */ 118 int layer() const; 119 120 /*! 121 * Returns true if the MPEG protection bit is enabled. 122 */ 123 bool protectionEnabled() const; 124 125 /*! 126 * Returns the channel mode for this frame. 127 */ 128 Header::ChannelMode channelMode() const; 129 130 /*! 131 * Returns true if the copyrighted bit is set. 132 */ 133 bool isCopyrighted() const; 134 135 /*! 136 * Returns true if the "original" bit is set. 137 */ 138 bool isOriginal() const; 139 140 private: 141 Properties(const Properties &); 142 Properties &operator=(const Properties &); 143 144 void read(File *file); 145 146 class PropertiesPrivate; 147 PropertiesPrivate *d; 148 }; 149 } 150 } 151 152 #endif 153