1 /*************************************************************************** 2 copyright : (C) 2004 by Allan Sandfeld Jensen 3 email : kde@carewolf.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_MPCPROPERTIES_H 27 #define TAGLIB_MPCPROPERTIES_H 28 29 #include "taglib_export.h" 30 #include "audioproperties.h" 31 32 namespace TagLib { 33 34 namespace MPC { 35 36 class File; 37 38 static const unsigned int HeaderSize = 8 * 7; 39 40 //! An implementation of audio property reading for MPC 41 42 /*! 43 * This reads the data from an MPC stream found in the AudioProperties 44 * API. 45 */ 46 47 class TAGLIB_EXPORT Properties : public AudioProperties 48 { 49 public: 50 /*! 51 * Create an instance of MPC::Properties with the data read from the 52 * ByteVector \a data. 53 * 54 * This constructor is deprecated. It only works for MPC version up to 7. 55 */ 56 Properties(const ByteVector &data, long streamLength, ReadStyle style = Average); 57 58 /*! 59 * Create an instance of MPC::Properties with the data read directly 60 * from a MPC::File. 61 */ 62 Properties(File *file, long streamLength, ReadStyle style = Average); 63 64 /*! 65 * Destroys this MPC::Properties instance. 66 */ 67 virtual ~Properties(); 68 69 /*! 70 * Returns the length of the file in seconds. The length is rounded down to 71 * the nearest whole second. 72 * 73 * \note This method is just an alias of lengthInSeconds(). 74 * 75 * \deprecated 76 */ 77 virtual int length() const; 78 79 /*! 80 * Returns the length of the file in seconds. The length is rounded down to 81 * the nearest whole second. 82 * 83 * \see lengthInMilliseconds() 84 */ 85 // BIC: make virtual 86 int lengthInSeconds() const; 87 88 /*! 89 * Returns the length of the file in milliseconds. 90 * 91 * \see lengthInSeconds() 92 */ 93 // BIC: make virtual 94 int lengthInMilliseconds() const; 95 96 /*! 97 * Returns the average bit rate of the file in kb/s. 98 */ 99 virtual int bitrate() const; 100 101 /*! 102 * Returns the sample rate in Hz. 103 */ 104 virtual int sampleRate() const; 105 106 /*! 107 * Returns the number of audio channels. 108 */ 109 virtual int channels() const; 110 111 /*! 112 * Returns the version of the bitstream (SV4-SV8) 113 */ 114 int mpcVersion() const; 115 116 unsigned int totalFrames() const; 117 unsigned int sampleFrames() const; 118 119 /*! 120 * Returns the track gain as an integer value, 121 * to convert to dB: trackGain in dB = 64.82 - (trackGain / 256) 122 */ 123 int trackGain() const; 124 125 /*! 126 * Returns the track peak as an integer value, 127 * to convert to dB: trackPeak in dB = trackPeak / 256 128 * to convert to floating [-1..1]: trackPeak = 10^(trackPeak / 256 / 20)/32768 129 */ 130 int trackPeak() const; 131 132 /*! 133 * Returns the album gain as an integer value, 134 * to convert to dB: albumGain in dB = 64.82 - (albumGain / 256) 135 */ 136 int albumGain() const; 137 138 /*! 139 * Returns the album peak as an integer value, 140 * to convert to dB: albumPeak in dB = albumPeak / 256 141 * to convert to floating [-1..1]: albumPeak = 10^(albumPeak / 256 / 20)/32768 142 */ 143 int albumPeak() const; 144 145 private: 146 Properties(const Properties &); 147 Properties &operator=(const Properties &); 148 149 void readSV7(const ByteVector &data, long streamLength); 150 void readSV8(File *file, long streamLength); 151 152 class PropertiesPrivate; 153 PropertiesPrivate *d; 154 }; 155 } 156 } 157 158 #endif 159