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 uint = 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 | // Reimplementations. |
70 | |
71 | virtual int length() const; |
72 | virtual int bitrate() const; |
73 | virtual int sampleRate() const; |
74 | virtual int channels() const; |
75 | |
76 | /*! |
77 | * Returns the version of the bitstream (SV4-SV8) |
78 | */ |
79 | int mpcVersion() const; |
80 | uint totalFrames() const; |
81 | uint sampleFrames() const; |
82 | |
83 | /*! |
84 | * Returns the track gain as an integer value, |
85 | * to convert to dB: trackGain in dB = 64.82 - (trackGain / 256) |
86 | */ |
87 | int trackGain() const; |
88 | |
89 | /*! |
90 | * Returns the track peak as an integer value, |
91 | * to convert to dB: trackPeak in dB = trackPeak / 256 |
92 | * to convert to floating [-1..1]: trackPeak = 10^(trackPeak / 256 / 20)/32768 |
93 | */ |
94 | int trackPeak() const; |
95 | |
96 | /*! |
97 | * Returns the album gain as an integer value, |
98 | * to convert to dB: albumGain in dB = 64.82 - (albumGain / 256) |
99 | */ |
100 | int albumGain() const; |
101 | |
102 | /*! |
103 | * Returns the album peak as an integer value, |
104 | * to convert to dB: albumPeak in dB = albumPeak / 256 |
105 | * to convert to floating [-1..1]: albumPeak = 10^(albumPeak / 256 / 20)/32768 |
106 | */ |
107 | int albumPeak() const; |
108 | |
109 | private: |
110 | Properties(const Properties &); |
111 | Properties &operator=(const Properties &); |
112 | |
113 | void readSV7(const ByteVector &data); |
114 | void readSV8(File *file); |
115 | |
116 | class PropertiesPrivate; |
117 | PropertiesPrivate *d; |
118 | }; |
119 | } |
120 | } |
121 | |
122 | #endif |
123 | |