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
34namespace 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