Added TagLib (with AUTORS and COPYING files)
[someplayer] / src / taglib / riff / wav / wavproperties.cpp
1 /***************************************************************************
2     copyright            : (C) 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
19  *   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 #include "wavproperties.h"
27
28 #include <tstring.h>
29 #include <tdebug.h>
30 #include <cmath>
31 #include <math.h>
32
33 using namespace TagLib;
34
35 class RIFF::WAV::Properties::PropertiesPrivate
36 {
37 public:
38   PropertiesPrivate() :
39     format(0),
40     length(0),
41     bitrate(0),
42     sampleRate(0),
43     channels(0)
44   {
45
46   }
47
48   short format;
49   int length;
50   int bitrate;
51   int sampleRate;
52   int channels;
53 };
54
55 ////////////////////////////////////////////////////////////////////////////////
56 // public members
57 ////////////////////////////////////////////////////////////////////////////////
58
59 RIFF::WAV::Properties::Properties(const ByteVector &data, ReadStyle style) : AudioProperties(style)
60 {
61   d = new PropertiesPrivate;
62   read(data);
63 }
64
65 RIFF::WAV::Properties::~Properties()
66 {
67   delete d;
68 }
69
70 int RIFF::WAV::Properties::length() const
71 {
72   return d->length;
73 }
74
75 int RIFF::WAV::Properties::bitrate() const
76 {
77   return d->bitrate;
78 }
79
80 int RIFF::WAV::Properties::sampleRate() const
81 {
82   return d->sampleRate;
83 }
84
85 int RIFF::WAV::Properties::channels() const
86 {
87   return d->channels;
88 }
89
90 ////////////////////////////////////////////////////////////////////////////////
91 // private members
92 ////////////////////////////////////////////////////////////////////////////////
93
94 void RIFF::WAV::Properties::read(const ByteVector &data)
95 {
96   d->format     = data.mid(0, 2).toShort(false);
97   d->channels   = data.mid(2, 2).toShort(false);
98   d->sampleRate = data.mid(4, 4).toUInt(false);
99   d->bitrate    = data.mid(8, 4).toUInt(false) * 8 / 1024;
100
101   // short bitsPerSample = data.mid(10, 2).toShort();
102   // d->bitrate    = (sampleRate * sampleSize * d->channels) / 1024.0;
103   // d->length     = sampleFrames / d->sampleRate;
104 }