rtaglib 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +84 -9
  3. data/README.txt +0 -0
  4. data/Rakefile +30 -27
  5. data/{test/data → data}/440Hz-5sec.flac +0 -0
  6. data/{test/data → data}/440Hz-5sec.mp3 +0 -0
  7. data/{test/data → data}/440Hz-5sec.mpc +0 -0
  8. data/{test/data → data}/440Hz-5sec.ogg +0 -0
  9. data/{test/data → data}/440Hz-5sec.wv +0 -0
  10. data/data/test_jason.mp3 +0 -0
  11. data/data/test_jason.ogg +0 -0
  12. data/ext/Rakefile +10 -0
  13. data/ext/tagfile/Rakefile.rb +42 -0
  14. data/ext/tagfile/rake_ext_conf.rb +29 -0
  15. data/ext/tagfile/tagfile.c +11 -7
  16. data/ext/taglib/Rakefile.rb +48 -0
  17. data/ext/taglib/rake_ext_conf.rb +33 -0
  18. data/ext/taglib/taglib-mswin32/bin/tag.dll +0 -0
  19. data/ext/taglib/taglib-mswin32/bin/tag_c.dll +0 -0
  20. data/ext/taglib/taglib-mswin32/bin/tag_cd.dll +0 -0
  21. data/ext/taglib/taglib-mswin32/bin/tagd.dll +0 -0
  22. data/ext/taglib/taglib-mswin32/bin/taglib-config +55 -0
  23. data/ext/taglib/taglib-mswin32/include/taglib/apefooter.h +173 -0
  24. data/ext/taglib/taglib-mswin32/include/taglib/apeitem.h +204 -0
  25. data/ext/taglib/taglib-mswin32/include/taglib/apetag.h +162 -0
  26. data/ext/taglib/taglib-mswin32/include/taglib/attachedpictureframe.h +220 -0
  27. data/ext/taglib/taglib-mswin32/include/taglib/audioproperties.h +110 -0
  28. data/ext/taglib/taglib-mswin32/include/taglib/commentsframe.h +168 -0
  29. data/ext/taglib/taglib-mswin32/include/taglib/fileref.h +262 -0
  30. data/ext/taglib/taglib-mswin32/include/taglib/flacfile.h +201 -0
  31. data/ext/taglib/taglib-mswin32/include/taglib/flacproperties.h +92 -0
  32. data/ext/taglib/taglib-mswin32/include/taglib/generalencapsulatedobjectframe.h +174 -0
  33. data/ext/taglib/taglib-mswin32/include/taglib/id3v1genres.h +66 -0
  34. data/ext/taglib/taglib-mswin32/include/taglib/id3v1tag.h +180 -0
  35. data/ext/taglib/taglib-mswin32/include/taglib/id3v2extendedheader.h +93 -0
  36. data/ext/taglib/taglib-mswin32/include/taglib/id3v2footer.h +82 -0
  37. data/ext/taglib/taglib-mswin32/include/taglib/id3v2frame.h +414 -0
  38. data/ext/taglib/taglib-mswin32/include/taglib/id3v2framefactory.h +167 -0
  39. data/ext/taglib/taglib-mswin32/include/taglib/id3v2header.h +175 -0
  40. data/ext/taglib/taglib-mswin32/include/taglib/id3v2synchdata.h +70 -0
  41. data/ext/taglib/taglib-mswin32/include/taglib/id3v2tag.h +300 -0
  42. data/ext/taglib/taglib-mswin32/include/taglib/mpcfile.h +175 -0
  43. data/ext/taglib/taglib-mswin32/include/taglib/mpcproperties.h +85 -0
  44. data/ext/taglib/taglib-mswin32/include/taglib/mpegfile.h +277 -0
  45. data/ext/taglib/taglib-mswin32/include/taglib/mpegheader.h +166 -0
  46. data/ext/taglib/taglib-mswin32/include/taglib/mpegproperties.h +118 -0
  47. data/ext/taglib/taglib-mswin32/include/taglib/oggfile.h +112 -0
  48. data/ext/taglib/taglib-mswin32/include/taglib/oggflacfile.h +118 -0
  49. data/ext/taglib/taglib-mswin32/include/taglib/oggpage.h +203 -0
  50. data/ext/taglib/taglib-mswin32/include/taglib/oggpageheader.h +232 -0
  51. data/ext/taglib/taglib-mswin32/include/taglib/relativevolumeframe.h +274 -0
  52. data/ext/taglib/taglib-mswin32/include/taglib/speexfile.h +99 -0
  53. data/ext/taglib/taglib-mswin32/include/taglib/speexproperties.h +89 -0
  54. data/ext/taglib/taglib-mswin32/include/taglib/tag.h +173 -0
  55. data/ext/taglib/taglib-mswin32/include/taglib/tag_c.h +288 -0
  56. data/ext/taglib/taglib-mswin32/include/taglib/taglib.h +177 -0
  57. data/ext/taglib/taglib-mswin32/include/taglib/taglib_export.h +39 -0
  58. data/ext/taglib/taglib-mswin32/include/taglib/tbytevector.h +409 -0
  59. data/ext/taglib/taglib-mswin32/include/taglib/tbytevectorlist.h +91 -0
  60. data/ext/taglib/taglib-mswin32/include/taglib/textidentificationframe.h +258 -0
  61. data/ext/taglib/taglib-mswin32/include/taglib/tfile.h +271 -0
  62. data/ext/taglib/taglib-mswin32/include/taglib/tlist.h +252 -0
  63. data/ext/taglib/taglib-mswin32/include/taglib/tlist.tcc +316 -0
  64. data/ext/taglib/taglib-mswin32/include/taglib/tmap.h +200 -0
  65. data/ext/taglib/taglib-mswin32/include/taglib/tmap.tcc +196 -0
  66. data/ext/taglib/taglib-mswin32/include/taglib/trueaudiofile.h +180 -0
  67. data/ext/taglib/taglib-mswin32/include/taglib/trueaudioproperties.h +93 -0
  68. data/ext/taglib/taglib-mswin32/include/taglib/tstring.h +456 -0
  69. data/ext/taglib/taglib-mswin32/include/taglib/tstringlist.h +115 -0
  70. data/ext/taglib/taglib-mswin32/include/taglib/uniquefileidentifierframe.h +113 -0
  71. data/ext/taglib/taglib-mswin32/include/taglib/unknownframe.h +79 -0
  72. data/ext/taglib/taglib-mswin32/include/taglib/unsynchronizedlyricsframe.h +157 -0
  73. data/ext/taglib/taglib-mswin32/include/taglib/urllinkframe.h +172 -0
  74. data/ext/taglib/taglib-mswin32/include/taglib/vorbisfile.h +118 -0
  75. data/ext/taglib/taglib-mswin32/include/taglib/vorbisproperties.h +125 -0
  76. data/ext/taglib/taglib-mswin32/include/taglib/wavpackfile.h +164 -0
  77. data/ext/taglib/taglib-mswin32/include/taglib/wavpackproperties.h +94 -0
  78. data/ext/taglib/taglib-mswin32/include/taglib/xingheader.h +100 -0
  79. data/ext/taglib/taglib-mswin32/include/taglib/xiphcomment.h +202 -0
  80. data/ext/taglib/taglib-mswin32/lib/pkgconfig/taglib_c.pc +12 -0
  81. data/ext/taglib/taglib-mswin32/lib/tag.lib +0 -0
  82. data/ext/taglib/taglib-mswin32/lib/tag_c.lib +0 -0
  83. data/ext/taglib/taglib_i386-mingw32.source +22645 -0
  84. data/ext/taglib/taglib_i386-mswin32.source +22645 -0
  85. data/ext/taglib/{taglib.cxx → taglib_x86_64-linux.source} +508 -75
  86. data/lib/TagLib.rb +3 -2
  87. data/lib/TagLib_doc.rb +1532 -1526
  88. data/lib/rtaglib_mswin32.rb +4 -0
  89. data/lib/tagfile.rb +6 -0
  90. data/swig/Doxyfile +0 -0
  91. data/swig/Rakefile +44 -19
  92. data/swig/TagLib_doc.rb +2755 -0
  93. data/swig/make_doc.rb +5 -4
  94. data/swig/process_cxx.rb +2 -2
  95. data/swig/rake_ext_conf.rb +33 -0
  96. data/swig/taglib.i +8 -5
  97. data/swig/test.rb +47 -39
  98. data/test/test_read.rb +4 -3
  99. data/test/test_taglib.rb +47 -39
  100. data/test/test_write.rb +4 -3
  101. metadata +96 -20
  102. data/ext/tagfile/extconf.rb +0 -14
  103. data/ext/taglib/extconf.rb +0 -22
  104. data/swig/extconf.rb +0 -22
@@ -0,0 +1,200 @@
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., 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
+ #ifndef TAGLIB_MAP_H
27
+ #define TAGLIB_MAP_H
28
+
29
+ #include <map>
30
+ using namespace std;
31
+
32
+ #include "taglib.h"
33
+
34
+ namespace TagLib {
35
+
36
+ //! A generic, implicitly shared map.
37
+
38
+ /*!
39
+ * This implements a standard map container that associates a key with a value
40
+ * and has fast key-based lookups. This map is also implicitly shared making
41
+ * it suitable for pass-by-value usage.
42
+ */
43
+
44
+ template <class Key, class T> class Map
45
+ {
46
+ public:
47
+ #ifndef DO_NOT_DOCUMENT
48
+ #ifdef WANT_CLASS_INSTANTIATION_OF_MAP
49
+ // Some STL implementations get snippy over the use of the
50
+ // class keyword to distinguish different templates; Sun Studio
51
+ // in particular finds multiple specializations in certain rare
52
+ // cases and complains about that. GCC doesn't seem to mind,
53
+ // and uses the typedefs further below without the class keyword.
54
+ // Not all the specializations of Map can use the class keyword
55
+ // (when T is not actually a class type), so don't apply this
56
+ // generally.
57
+ typedef typename std::map<class Key, class T>::iterator Iterator;
58
+ typedef typename std::map<class Key, class T>::const_iterator ConstIterator;
59
+ #else
60
+ typedef typename std::map<Key, T>::iterator Iterator;
61
+ typedef typename std::map<Key, T>::const_iterator ConstIterator;
62
+ #endif
63
+ #endif
64
+
65
+ /*!
66
+ * Constructs an empty Map.
67
+ */
68
+ Map();
69
+
70
+ /*!
71
+ * Make a shallow, implicitly shared, copy of \a m. Because this is
72
+ * implicitly shared, this method is lightweight and suitable for
73
+ * pass-by-value usage.
74
+ */
75
+ Map(const Map<Key, T> &m);
76
+
77
+ /*!
78
+ * Destroys this instance of the Map.
79
+ */
80
+ virtual ~Map();
81
+
82
+ /*!
83
+ * Returns an STL style iterator to the beginning of the map. See
84
+ * std::map::iterator for the semantics.
85
+ */
86
+ Iterator begin();
87
+
88
+ /*!
89
+ * Returns an STL style iterator to the beginning of the map. See
90
+ * std::map::const_iterator for the semantics.
91
+ */
92
+ ConstIterator begin() const;
93
+
94
+ /*!
95
+ * Returns an STL style iterator to the end of the map. See
96
+ * std::map::iterator for the semantics.
97
+ */
98
+ Iterator end();
99
+
100
+ /*!
101
+ * Returns an STL style iterator to the end of the map. See
102
+ * std::map::const_iterator for the semantics.
103
+ */
104
+ ConstIterator end() const;
105
+
106
+ /*!
107
+ * Inserts \a value under \a key in the map. If a value for \a key already
108
+ * exists it will be overwritten.
109
+ */
110
+ Map<Key, T> &insert(const Key &key, const T &value);
111
+
112
+ /*!
113
+ * Removes all of the elements from elements from the map. This however
114
+ * will not delete pointers if the mapped type is a pointer type.
115
+ */
116
+ Map<Key, T> &clear();
117
+
118
+ /*!
119
+ * The number of elements in the map.
120
+ *
121
+ * \see isEmpty()
122
+ */
123
+ uint size() const;
124
+
125
+ /*!
126
+ * Returns true if the map is empty.
127
+ *
128
+ * \see size()
129
+ */
130
+ bool isEmpty() const;
131
+
132
+ /*!
133
+ * Find the first occurrence of \a key.
134
+ */
135
+ Iterator find(const Key &key);
136
+
137
+ /*!
138
+ * Find the first occurrence of \a key.
139
+ */
140
+ ConstIterator find(const Key &key) const;
141
+
142
+ /*!
143
+ * Returns true if the map contains an instance of \a key.
144
+ */
145
+ bool contains(const Key &key) const;
146
+
147
+ /*!
148
+ * Erase the item at \a it from the list.
149
+ */
150
+ Map<Key, T> &erase(Iterator it);
151
+
152
+ /*!
153
+ * Erase the item with \a key from the list.
154
+ */
155
+ Map<Key, T> &erase(const Key &key);
156
+
157
+ /*!
158
+ * Returns a reference to the value associated with \a key.
159
+ *
160
+ * \note This has undefined behavior if the key is not present in the map.
161
+ */
162
+ const T &operator[](const Key &key) const;
163
+
164
+ /*!
165
+ * Returns a reference to the value associated with \a key.
166
+ *
167
+ * \note This has undefined behavior if the key is not present in the map.
168
+ */
169
+ T &operator[](const Key &key);
170
+
171
+ /*!
172
+ * Make a shallow, implicitly shared, copy of \a m. Because this is
173
+ * implicitly shared, this method is lightweight and suitable for
174
+ * pass-by-value usage.
175
+ */
176
+ Map<Key, T> &operator=(const Map<Key, T> &m);
177
+
178
+ protected:
179
+ /*
180
+ * If this List is being shared via implicit sharing, do a deep copy of the
181
+ * data and separate from the shared members. This should be called by all
182
+ * non-const subclass members.
183
+ */
184
+ void detach();
185
+
186
+ private:
187
+ #ifndef DO_NOT_DOCUMENT
188
+ template <class KeyP, class TP> class MapPrivate;
189
+ MapPrivate<Key, T> *d;
190
+ #endif
191
+ };
192
+
193
+ }
194
+
195
+ // Since GCC doesn't support the "export" keyword, we have to include the
196
+ // implementation.
197
+
198
+ #include "tmap.tcc"
199
+
200
+ #endif
@@ -0,0 +1,196 @@
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., 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
+ namespace TagLib {
27
+
28
+ ////////////////////////////////////////////////////////////////////////////////
29
+ // public members
30
+ ////////////////////////////////////////////////////////////////////////////////
31
+
32
+ template <class Key, class T>
33
+ template <class KeyP, class TP>
34
+ class Map<Key, T>::MapPrivate : public RefCounter
35
+ {
36
+ public:
37
+ MapPrivate() : RefCounter() {}
38
+ #ifdef WANT_CLASS_INSTANTIATION_OF_MAP
39
+ MapPrivate(const std::map<class KeyP, class TP>& m) : RefCounter(), map(m) {}
40
+ std::map<class KeyP, class TP> map;
41
+ #else
42
+ MapPrivate(const std::map<KeyP, TP>& m) : RefCounter(), map(m) {}
43
+ std::map<KeyP, TP> map;
44
+ #endif
45
+ };
46
+
47
+ template <class Key, class T>
48
+ Map<Key, T>::Map()
49
+ {
50
+ d = new MapPrivate<Key, T>;
51
+ }
52
+
53
+ template <class Key, class T>
54
+ Map<Key, T>::Map(const Map<Key, T> &m) : d(m.d)
55
+ {
56
+ d->ref();
57
+ }
58
+
59
+ template <class Key, class T>
60
+ Map<Key, T>::~Map()
61
+ {
62
+ if(d->deref())
63
+ delete(d);
64
+ }
65
+
66
+ template <class Key, class T>
67
+ typename Map<Key, T>::Iterator Map<Key, T>::begin()
68
+ {
69
+ detach();
70
+ return d->map.begin();
71
+ }
72
+
73
+ template <class Key, class T>
74
+ typename Map<Key, T>::ConstIterator Map<Key, T>::begin() const
75
+ {
76
+ return d->map.begin();
77
+ }
78
+
79
+ template <class Key, class T>
80
+ typename Map<Key, T>::Iterator Map<Key, T>::end()
81
+ {
82
+ detach();
83
+ return d->map.end();
84
+ }
85
+
86
+ template <class Key, class T>
87
+ typename Map<Key, T>::ConstIterator Map<Key, T>::end() const
88
+ {
89
+ return d->map.end();
90
+ }
91
+
92
+ template <class Key, class T>
93
+ Map<Key, T> &Map<Key, T>::insert(const Key &key, const T &value)
94
+ {
95
+ detach();
96
+ d->map[key] = value;
97
+ return *this;
98
+ }
99
+
100
+ template <class Key, class T>
101
+ Map<Key, T> &Map<Key, T>::clear()
102
+ {
103
+ detach();
104
+ d->map.clear();
105
+ return *this;
106
+ }
107
+
108
+ template <class Key, class T>
109
+ bool Map<Key, T>::isEmpty() const
110
+ {
111
+ return d->map.empty();
112
+ }
113
+
114
+ template <class Key, class T>
115
+ typename Map<Key, T>::Iterator Map<Key, T>::find(const Key &key)
116
+ {
117
+ detach();
118
+ return d->map.find(key);
119
+ }
120
+
121
+ template <class Key, class T>
122
+ typename Map<Key,T>::ConstIterator Map<Key, T>::find(const Key &key) const
123
+ {
124
+ return d->map.find(key);
125
+ }
126
+
127
+ template <class Key, class T>
128
+ bool Map<Key, T>::contains(const Key &key) const
129
+ {
130
+ return d->map.find(key) != d->map.end();
131
+ }
132
+
133
+ template <class Key, class T>
134
+ Map<Key, T> &Map<Key,T>::erase(Iterator it)
135
+ {
136
+ detach();
137
+ d->map.erase(it);
138
+ return *this;
139
+ }
140
+
141
+ template <class Key, class T>
142
+ Map<Key, T> &Map<Key,T>::erase(const Key &key)
143
+ {
144
+ detach();
145
+ Iterator it = d->map.find(key);
146
+ if(it != d->map.end())
147
+ d->map.erase(it);
148
+ return *this;
149
+ }
150
+
151
+ template <class Key, class T>
152
+ TagLib::uint Map<Key, T>::size() const
153
+ {
154
+ return d->map.size();
155
+ }
156
+
157
+ template <class Key, class T>
158
+ const T &Map<Key, T>::operator[](const Key &key) const
159
+ {
160
+ return d->map[key];
161
+ }
162
+
163
+ template <class Key, class T>
164
+ T &Map<Key, T>::operator[](const Key &key)
165
+ {
166
+ detach();
167
+ return d->map[key];
168
+ }
169
+
170
+ template <class Key, class T>
171
+ Map<Key, T> &Map<Key, T>::operator=(const Map<Key, T> &m)
172
+ {
173
+ if(&m == this)
174
+ return *this;
175
+
176
+ if(d->deref())
177
+ delete(d);
178
+ d = m.d;
179
+ d->ref();
180
+ return *this;
181
+ }
182
+
183
+ ////////////////////////////////////////////////////////////////////////////////
184
+ // protected members
185
+ ////////////////////////////////////////////////////////////////////////////////
186
+
187
+ template <class Key, class T>
188
+ void Map<Key, T>::detach()
189
+ {
190
+ if(d->count() > 1) {
191
+ d->deref();
192
+ d = new MapPrivate<Key, T>(d->map);
193
+ }
194
+ }
195
+
196
+ } // namespace TagLib
@@ -0,0 +1,180 @@
1
+ /***************************************************************************
2
+ copyright : (C) 2006 by Lukáš Lalinský
3
+ email : lalinsky@gmail.com
4
+
5
+ copyright : (C) 2004 by Allan Sandfeld Jensen
6
+ email : kde@carewolf.org
7
+ (original MPC implementation)
8
+ ***************************************************************************/
9
+
10
+ /***************************************************************************
11
+ * This library is free software; you can redistribute it and/or modify *
12
+ * it under the terms of the GNU Lesser General Public License version *
13
+ * 2.1 as published by the Free Software Foundation. *
14
+ * *
15
+ * This library is distributed in the hope that it will be useful, but *
16
+ * WITHOUT ANY WARRANTY; without even the implied warranty of *
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
18
+ * Lesser General Public License for more details. *
19
+ * *
20
+ * You should have received a copy of the GNU Lesser General Public *
21
+ * License along with this library; if not, write to the Free Software *
22
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
23
+ * USA *
24
+ * *
25
+ * Alternatively, this file is available under the Mozilla Public *
26
+ * License Version 1.1. You may obtain a copy of the License at *
27
+ * http://www.mozilla.org/MPL/ *
28
+ ***************************************************************************/
29
+
30
+ #ifndef TAGLIB_TRUEAUDIOFILE_H
31
+ #define TAGLIB_TRUEAUDIOFILE_H
32
+
33
+ #include <tfile.h>
34
+ #include "trueaudioproperties.h"
35
+
36
+ namespace TagLib {
37
+
38
+ class Tag;
39
+
40
+ namespace ID3v2 { class Tag; class FrameFactory; }
41
+ namespace ID3v1 { class Tag; }
42
+
43
+ //! An implementation of TrueAudio metadata
44
+
45
+ /*!
46
+ * This is implementation of TrueAudio metadata.
47
+ *
48
+ * This supports ID3v1 and ID3v2 tags as well as reading stream
49
+ * properties from the file.
50
+ */
51
+
52
+ namespace TrueAudio {
53
+
54
+ //! An implementation of TagLib::File with TrueAudio specific methods
55
+
56
+ /*!
57
+ * This implements and provides an interface for TrueAudio files to the
58
+ * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing
59
+ * the abstract TagLib::File API as well as providing some additional
60
+ * information specific to TrueAudio files.
61
+ */
62
+
63
+ class TAGLIB_EXPORT File : public TagLib::File
64
+ {
65
+ public:
66
+ /*!
67
+ * This set of flags is used for various operations and is suitable for
68
+ * being OR-ed together.
69
+ */
70
+ enum TagTypes {
71
+ //! Empty set. Matches no tag types.
72
+ NoTags = 0x0000,
73
+ //! Matches ID3v1 tags.
74
+ ID3v1 = 0x0001,
75
+ //! Matches ID3v2 tags.
76
+ ID3v2 = 0x0002,
77
+ //! Matches all tag types.
78
+ AllTags = 0xffff
79
+ };
80
+
81
+ /*!
82
+ * Contructs an TrueAudio file from \a file. If \a readProperties is true the
83
+ * file's audio properties will also be read using \a propertiesStyle. If
84
+ * false, \a propertiesStyle is ignored.
85
+ */
86
+ File(FileName file, bool readProperties = true,
87
+ Properties::ReadStyle propertiesStyle = Properties::Average);
88
+
89
+ /*!
90
+ * Contructs an TrueAudio file from \a file. If \a readProperties is true the
91
+ * file's audio properties will also be read using \a propertiesStyle. If
92
+ * false, \a propertiesStyle is ignored. The frames will be created using
93
+ * \a frameFactory.
94
+ */
95
+ File(FileName file, ID3v2::FrameFactory *frameFactory,
96
+ bool readProperties = true,
97
+ Properties::ReadStyle propertiesStyle = Properties::Average);
98
+
99
+ /*!
100
+ * Destroys this instance of the File.
101
+ */
102
+ virtual ~File();
103
+
104
+ /*!
105
+ * Returns the Tag for this file.
106
+ */
107
+ virtual TagLib::Tag *tag() const;
108
+
109
+ /*!
110
+ * Returns the TrueAudio::Properties for this file. If no audio properties
111
+ * were read then this will return a null pointer.
112
+ */
113
+ virtual Properties *audioProperties() const;
114
+
115
+ /*!
116
+ * Set the ID3v2::FrameFactory to something other than the default.
117
+ *
118
+ * \see ID3v2FrameFactory
119
+ */
120
+ void setID3v2FrameFactory(const ID3v2::FrameFactory *factory);
121
+
122
+ /*!
123
+ * Saves the file.
124
+ */
125
+ virtual bool save();
126
+
127
+ /*!
128
+ * Returns a pointer to the ID3v2 tag of the file.
129
+ *
130
+ * If \a create is false (the default) this will return a null pointer
131
+ * if there is no valid ID3v2 tag. If \a create is true it will create
132
+ * an ID3v1 tag if one does not exist. If there is already an APE tag, the
133
+ * new ID3v1 tag will be placed after it.
134
+ *
135
+ * \note The Tag <b>is still</b> owned by the TrueAudio::File and should not be
136
+ * deleted by the user. It will be deleted when the file (object) is
137
+ * destroyed.
138
+ */
139
+ ID3v1::Tag *ID3v1Tag(bool create = false);
140
+
141
+ /*!
142
+ * Returns a pointer to the ID3v1 tag of the file.
143
+ *
144
+ * If \a create is false (the default) this will return a null pointer
145
+ * if there is no valid ID3v1 tag. If \a create is true it will create
146
+ * an ID3v1 tag if one does not exist. If there is already an APE tag, the
147
+ * new ID3v1 tag will be placed after it.
148
+ *
149
+ * \note The Tag <b>is still</b> owned by the TrueAudio::File and should not be
150
+ * deleted by the user. It will be deleted when the file (object) is
151
+ * destroyed.
152
+ */
153
+ ID3v2::Tag *ID3v2Tag(bool create = false);
154
+
155
+ /*!
156
+ * This will remove the tags that match the OR-ed together TagTypes from the
157
+ * file. By default it removes all tags.
158
+ *
159
+ * \note This will also invalidate pointers to the tags
160
+ * as their memory will be freed.
161
+ * \note In order to make the removal permanent save() still needs to be called
162
+ */
163
+ void strip(int tags = AllTags);
164
+
165
+ private:
166
+ File(const File &);
167
+ File &operator=(const File &);
168
+
169
+ void read(bool readProperties, Properties::ReadStyle propertiesStyle);
170
+ void scan();
171
+ long findID3v1();
172
+ long findID3v2();
173
+
174
+ class FilePrivate;
175
+ FilePrivate *d;
176
+ };
177
+ }
178
+ }
179
+
180
+ #endif