1 /***************************************************************************
2     copyright            : (C) 2003 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_FLACPROPERTIES_H
27 #define TAGLIB_FLACPROPERTIES_H
28 
29 #include "taglib_export.h"
30 #include "audioproperties.h"
31 
32 namespace TagLib {
33 
34   namespace FLAC {
35 
36     class File;
37 
38     //! An implementation of audio property reading for FLAC
39 
40     /*!
41      * This reads the data from an FLAC stream found in the AudioProperties
42      * API.
43      */
44 
45     class TAGLIB_EXPORT Properties : public AudioProperties
46     {
47     public:
48       /*!
49        * Create an instance of FLAC::Properties with the data read from the
50        * ByteVector \a data.
51        */
52        // BIC: switch to const reference
53       Properties(ByteVector data, long streamLength, ReadStyle style = Average);
54 
55       /*!
56        * Create an instance of FLAC::Properties with the data read from the
57        * FLAC::File \a file.
58        */
59        // BIC: remove
60       Properties(File *file, ReadStyle style = Average);
61 
62       /*!
63        * Destroys this FLAC::Properties instance.
64        */
65       virtual ~Properties();
66 
67       /*!
68        * Returns the length of the file in seconds.  The length is rounded down to
69        * the nearest whole second.
70        *
71        * \note This method is just an alias of lengthInSeconds().
72        *
73        * \deprecated
74        */
75       virtual int length() const;
76 
77       /*!
78        * Returns the length of the file in seconds.  The length is rounded down to
79        * the nearest whole second.
80        *
81        * \see lengthInMilliseconds()
82        */
83       // BIC: make virtual
84       int lengthInSeconds() const;
85 
86       /*!
87        * Returns the length of the file in milliseconds.
88        *
89        * \see lengthInSeconds()
90        */
91       // BIC: make virtual
92       int lengthInMilliseconds() const;
93 
94       /*!
95        * Returns the average bit rate of the file in kb/s.
96        */
97       virtual int bitrate() const;
98 
99       /*!
100        * Returns the sample rate in Hz.
101        */
102       virtual int sampleRate() const;
103 
104       /*!
105        * Returns the number of audio channels.
106        */
107       virtual int channels() const;
108 
109       /*!
110        * Returns the number of bits per audio sample as read from the FLAC
111        * identification header.
112        */
113       int bitsPerSample() const;
114 
115       /*!
116        * Returns the sample width as read from the FLAC identification
117        * header.
118        *
119        * \note This method is just an alias of bitsPerSample().
120        *
121        * \deprecated
122        */
123       int sampleWidth() const;
124 
125       /*!
126        * Return the number of sample frames.
127        */
128       unsigned long long sampleFrames() const;
129 
130       /*!
131        * Returns the MD5 signature of the uncompressed audio stream as read
132        * from the stream info header.
133        */
134       ByteVector signature() const;
135 
136     private:
137       Properties(const Properties &);
138       Properties &operator=(const Properties &);
139 
140       void read(const ByteVector &data, long streamLength);
141 
142       class PropertiesPrivate;
143       PropertiesPrivate *d;
144     };
145   }
146 }
147 
148 #endif
149