rtaglib 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -8,6 +8,7 @@ ext/taglib/extconf.rb
8
8
  ext/taglib/taglib.cxx
9
9
  lib/TagLib.rb
10
10
  lib/TagLib_doc.rb
11
+ swig/Doxyfile
11
12
  swig/Rakefile
12
13
  swig/extconf.rb
13
14
  swig/make_doc.rb
data/Rakefile CHANGED
@@ -47,6 +47,7 @@ Rake::TestTask.new do |t|
47
47
  t.test_files = FileList['test/test*.rb']
48
48
  t.verbose = true
49
49
  end
50
+
50
51
  Rake::RDocTask.new(:rdoc) do |rdoc|
51
52
  rdoc.rdoc_dir = "doc/html"
52
53
  rdoc.main = "README.txt"
@@ -55,10 +56,9 @@ end
55
56
 
56
57
  require 'rubygems'
57
58
  require 'hoe'
58
- if(File.exists? "./ext/tagfile/tagfile.so")
59
- require './ext/tagfile/tagfile'
59
+ require "./lib/TagLib.rb"
60
60
 
61
- Hoe.new('rtaglib', TagFile::VERSION) do |p|
61
+ Hoe.new('rtaglib', TagLib::VERSION) do |p|
62
62
  p.developer('cdx', 'clbustos@surnet.cl')
63
63
  p.author="Claudio Bustos"
64
64
  p.summary="Bindings for taglib"
@@ -76,7 +76,6 @@ p.remote_rdoc_dir = '' # Release to root
76
76
  p.rdoc_pattern=/(lib\/TagLib_doc.rb|ext\/tagfile\/.*\.c|\.txt)/
77
77
  #p.clean_globs = ['ext/taglib/*.log','ext/taglib/*.o','ext/taglib/*.so', 'ext/tagfile/*.log','ext/tagfile/*.o','ext/tagfile/*.so']
78
78
  #p.platform = Gem::Platform::RUBY
79
- p.spec_extras= {'requirements'=>'libtag >=1.4', 'autorequire'=>'', 'extensions' => ['ext/tagfile/extconf.rb','ext/taglib/extconf.rb']}
80
- end
79
+ p.spec_extras= {'requirements'=>'libtag >=1.5', 'autorequire'=>'', 'extensions' => ['ext/tagfile/extconf.rb','ext/taglib/extconf.rb']}
81
80
  end
82
81
  # vim: syntax=Ruby
@@ -12,7 +12,6 @@ Data_Get_Struct(self, taglib_t, tl); \
12
12
  if(NULL==tl->file || tl->open==0) {tl_closed();} \
13
13
  TagLib_File *file=tl->file;
14
14
 
15
- #define VERSION "0.2.1"
16
15
 
17
16
  typedef struct {
18
17
  TagLib_File *file;
@@ -109,8 +108,6 @@ Init_tagfile()
109
108
  rb_define_method(cTagFileFile, "channels", cTagFileFile_channels, 0);
110
109
  rb_define_attr(cTagFileFile, "path", 1, 0);
111
110
  rb_define_attr(cTagFileFile, "file_type", 1, 0);
112
- /* VERSION: Version number */
113
- rb_define_const(mTagFile, "VERSION", rb_str_new2(VERSION));
114
111
  /* TagLib_File_OggVorbis: Value for OggVorbis*/
115
112
 
116
113
  rb_define_const(mTagFile, "MPEG", INT2FIX(TagLib_File_MPEG));
@@ -1,6 +1,15 @@
1
1
  require 'mkmf'
2
- $libs = append_library($libs, "supc++")
3
- $CFLAGS= " -I/usr/include/taglib"
4
- if have_library("tag")
2
+ if(PLATFORM=~/mingw/)
3
+ puts "Building for MinGW"
4
+ $libs = append_library($libs, "stdc++")
5
+ $CFLAGS= " -I/mingw/include/taglib"
6
+
7
+ else
8
+ puts "Building for other architecture"
9
+ $CFLAGS= " -I/usr/include/taglib"
10
+
11
+ end
12
+ $libs = append_library($libs, "supc++")
13
+ if have_header("taglib/taglib_export.h") and have_library("tag")
5
14
  create_makefile("TagLib")
6
15
  end
@@ -1785,47 +1785,48 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
1785
1785
  #define SWIGTYPE_p_TagLib__ID3v2__CommentsFrame swig_types[11]
1786
1786
  #define SWIGTYPE_p_TagLib__ID3v2__Frame swig_types[12]
1787
1787
  #define SWIGTYPE_p_TagLib__ID3v2__FrameFactory swig_types[13]
1788
- #define SWIGTYPE_p_TagLib__ID3v2__Header swig_types[14]
1789
- #define SWIGTYPE_p_TagLib__ID3v2__Tag swig_types[15]
1790
- #define SWIGTYPE_p_TagLib__ListT_Frame_p_t swig_types[16]
1791
- #define SWIGTYPE_p_TagLib__ListT_TagLib__ByteVector_t swig_types[17]
1792
- #define SWIGTYPE_p_TagLib__ListT_TagLib__ID3v2__Frame_p_t swig_types[18]
1793
- #define SWIGTYPE_p_TagLib__ListT_TagLib__String_t swig_types[19]
1794
- #define SWIGTYPE_p_TagLib__ListT_int_t swig_types[20]
1795
- #define SWIGTYPE_p_TagLib__MPC__File swig_types[21]
1796
- #define SWIGTYPE_p_TagLib__MPC__Properties swig_types[22]
1797
- #define SWIGTYPE_p_TagLib__MPEG__File swig_types[23]
1798
- #define SWIGTYPE_p_TagLib__MPEG__Header swig_types[24]
1799
- #define SWIGTYPE_p_TagLib__MPEG__Properties swig_types[25]
1800
- #define SWIGTYPE_p_TagLib__MPEG__XingHeader swig_types[26]
1801
- #define SWIGTYPE_p_TagLib__MapT_TagLib__ByteVector_TagLib__ID3v2__FrameList_t swig_types[27]
1802
- #define SWIGTYPE_p_TagLib__MapT_TagLib__String_TagLib__APE__Item_t swig_types[28]
1803
- #define SWIGTYPE_p_TagLib__MapT_TagLib__String_TagLib__StringList_t swig_types[29]
1804
- #define SWIGTYPE_p_TagLib__MapT_TagLib__String_int_t swig_types[30]
1805
- #define SWIGTYPE_p_TagLib__Ogg__FLAC__File swig_types[31]
1806
- #define SWIGTYPE_p_TagLib__Ogg__File swig_types[32]
1807
- #define SWIGTYPE_p_TagLib__Ogg__Page swig_types[33]
1808
- #define SWIGTYPE_p_TagLib__Ogg__PageHeader swig_types[34]
1809
- #define SWIGTYPE_p_TagLib__Ogg__Speex__File swig_types[35]
1810
- #define SWIGTYPE_p_TagLib__Ogg__Speex__Properties swig_types[36]
1811
- #define SWIGTYPE_p_TagLib__Ogg__XiphComment swig_types[37]
1812
- #define SWIGTYPE_p_TagLib__String swig_types[38]
1813
- #define SWIGTYPE_p_TagLib__Tag swig_types[39]
1814
- #define SWIGTYPE_p_TagLib__TrueAudio__File swig_types[40]
1815
- #define SWIGTYPE_p_TagLib__TrueAudio__Properties swig_types[41]
1816
- #define SWIGTYPE_p_TagLib__Vorbis__File swig_types[42]
1817
- #define SWIGTYPE_p_TagLib__Vorbis__Properties swig_types[43]
1818
- #define SWIGTYPE_p_TagLib__WavPack__File swig_types[44]
1819
- #define SWIGTYPE_p_TagLib__WavPack__Properties swig_types[45]
1820
- #define SWIGTYPE_p_char swig_types[46]
1821
- #define SWIGTYPE_p_p_TagLib__ID3v2__Frame swig_types[47]
1822
- #define SWIGTYPE_p_std__basic_stringT_wchar_t_t swig_types[48]
1823
- #define SWIGTYPE_p_unsigned_char swig_types[49]
1824
- #define SWIGTYPE_p_unsigned_int swig_types[50]
1825
- #define SWIGTYPE_p_unsigned_long swig_types[51]
1826
- #define SWIGTYPE_p_wchar_t swig_types[52]
1827
- static swig_type_info *swig_types[54];
1828
- static swig_module_info swig_module = {swig_types, 53, 0, 0, 0, 0};
1788
+ #define SWIGTYPE_p_TagLib__ID3v2__GeneralEncapsulatedObjectFrame swig_types[14]
1789
+ #define SWIGTYPE_p_TagLib__ID3v2__Header swig_types[15]
1790
+ #define SWIGTYPE_p_TagLib__ID3v2__Tag swig_types[16]
1791
+ #define SWIGTYPE_p_TagLib__ListT_Frame_p_t swig_types[17]
1792
+ #define SWIGTYPE_p_TagLib__ListT_TagLib__ByteVector_t swig_types[18]
1793
+ #define SWIGTYPE_p_TagLib__ListT_TagLib__ID3v2__Frame_p_t swig_types[19]
1794
+ #define SWIGTYPE_p_TagLib__ListT_TagLib__String_t swig_types[20]
1795
+ #define SWIGTYPE_p_TagLib__ListT_int_t swig_types[21]
1796
+ #define SWIGTYPE_p_TagLib__MPC__File swig_types[22]
1797
+ #define SWIGTYPE_p_TagLib__MPC__Properties swig_types[23]
1798
+ #define SWIGTYPE_p_TagLib__MPEG__File swig_types[24]
1799
+ #define SWIGTYPE_p_TagLib__MPEG__Header swig_types[25]
1800
+ #define SWIGTYPE_p_TagLib__MPEG__Properties swig_types[26]
1801
+ #define SWIGTYPE_p_TagLib__MPEG__XingHeader swig_types[27]
1802
+ #define SWIGTYPE_p_TagLib__MapT_TagLib__ByteVector_TagLib__ID3v2__FrameList_t swig_types[28]
1803
+ #define SWIGTYPE_p_TagLib__MapT_TagLib__String_TagLib__APE__Item_t swig_types[29]
1804
+ #define SWIGTYPE_p_TagLib__MapT_TagLib__String_TagLib__StringList_t swig_types[30]
1805
+ #define SWIGTYPE_p_TagLib__MapT_TagLib__String_int_t swig_types[31]
1806
+ #define SWIGTYPE_p_TagLib__Ogg__FLAC__File swig_types[32]
1807
+ #define SWIGTYPE_p_TagLib__Ogg__File swig_types[33]
1808
+ #define SWIGTYPE_p_TagLib__Ogg__Page swig_types[34]
1809
+ #define SWIGTYPE_p_TagLib__Ogg__PageHeader swig_types[35]
1810
+ #define SWIGTYPE_p_TagLib__Ogg__Speex__File swig_types[36]
1811
+ #define SWIGTYPE_p_TagLib__Ogg__Speex__Properties swig_types[37]
1812
+ #define SWIGTYPE_p_TagLib__Ogg__XiphComment swig_types[38]
1813
+ #define SWIGTYPE_p_TagLib__String swig_types[39]
1814
+ #define SWIGTYPE_p_TagLib__Tag swig_types[40]
1815
+ #define SWIGTYPE_p_TagLib__TrueAudio__File swig_types[41]
1816
+ #define SWIGTYPE_p_TagLib__TrueAudio__Properties swig_types[42]
1817
+ #define SWIGTYPE_p_TagLib__Vorbis__File swig_types[43]
1818
+ #define SWIGTYPE_p_TagLib__Vorbis__Properties swig_types[44]
1819
+ #define SWIGTYPE_p_TagLib__WavPack__File swig_types[45]
1820
+ #define SWIGTYPE_p_TagLib__WavPack__Properties swig_types[46]
1821
+ #define SWIGTYPE_p_char swig_types[47]
1822
+ #define SWIGTYPE_p_p_TagLib__ID3v2__Frame swig_types[48]
1823
+ #define SWIGTYPE_p_std__basic_stringT_wchar_t_t swig_types[49]
1824
+ #define SWIGTYPE_p_unsigned_char swig_types[50]
1825
+ #define SWIGTYPE_p_unsigned_int swig_types[51]
1826
+ #define SWIGTYPE_p_unsigned_long swig_types[52]
1827
+ #define SWIGTYPE_p_wchar_t swig_types[53]
1828
+ static swig_type_info *swig_types[55];
1829
+ static swig_module_info swig_module = {swig_types, 54, 0, 0, 0, 0};
1829
1830
  #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
1830
1831
  #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
1831
1832
 
@@ -12095,16 +12096,16 @@ swig_class cVorbis_File;
12095
12096
 
12096
12097
 
12097
12098
  /*
12098
- Document-method: TagLib::ID3v1.genre
12099
+ Document-method: TagLib::ID3v1.ID3v1_genre
12099
12100
 
12100
12101
  call-seq:
12101
- genre(int index) -> String
12102
+ ID3v1_genre(int index) -> String
12102
12103
 
12103
12104
  A module function.
12104
12105
 
12105
12106
  */
12106
12107
  VALUE
12107
- _wrap_genre(int argc, VALUE *argv, VALUE self) {
12108
+ _wrap_ID3v1_genre(int argc, VALUE *argv, VALUE self) {
12108
12109
  int arg1 ;
12109
12110
  TagLib::String result;
12110
12111
  int val1 ;
@@ -12131,16 +12132,16 @@ fail:
12131
12132
 
12132
12133
 
12133
12134
  /*
12134
- Document-method: TagLib::ID3v1.genreIndex
12135
+ Document-method: TagLib::ID3v1.ID3v1_genreIndex
12135
12136
 
12136
12137
  call-seq:
12137
- genreIndex(String name) -> int
12138
+ ID3v1_genreIndex(String name) -> int
12138
12139
 
12139
12140
  A module function.
12140
12141
 
12141
12142
  */
12142
12143
  VALUE
12143
- _wrap_genreIndex(int argc, VALUE *argv, VALUE self) {
12144
+ _wrap_ID3v1_genreIndex(int argc, VALUE *argv, VALUE self) {
12144
12145
  TagLib::String *arg1 = 0 ;
12145
12146
  int result;
12146
12147
  VALUE vresult = Qnil;
@@ -12161,16 +12162,16 @@ fail:
12161
12162
 
12162
12163
 
12163
12164
  /*
12164
- Document-method: TagLib::ID3v1.genreList
12165
+ Document-method: TagLib::ID3v1.ID3v1_genreList
12165
12166
 
12166
12167
  call-seq:
12167
- genreList
12168
+ ID3v1_genreList
12168
12169
 
12169
12170
  A module function.
12170
12171
 
12171
12172
  */
12172
12173
  VALUE
12173
- _wrap_genreList(int argc, VALUE *argv, VALUE self) {
12174
+ _wrap_ID3v1_genreList(int argc, VALUE *argv, VALUE self) {
12174
12175
  TagLib::StringList result;
12175
12176
  VALUE vresult = Qnil;
12176
12177
 
@@ -12189,16 +12190,16 @@ fail:
12189
12190
 
12190
12191
 
12191
12192
  /*
12192
- Document-method: TagLib::ID3v1.genreMap
12193
+ Document-method: TagLib::ID3v1.ID3v1_genreMap
12193
12194
 
12194
12195
  call-seq:
12195
- genreMap -> GenreMap
12196
+ ID3v1_genreMap -> GenreMap
12196
12197
 
12197
12198
  A module function.
12198
12199
 
12199
12200
  */
12200
12201
  VALUE
12201
- _wrap_genreMap(int argc, VALUE *argv, VALUE self) {
12202
+ _wrap_ID3v1_genreMap(int argc, VALUE *argv, VALUE self) {
12202
12203
  TagLib::ID3v1::GenreMap result;
12203
12204
  VALUE vresult = Qnil;
12204
12205
 
@@ -13123,6 +13124,16 @@ fail:
13123
13124
  swig_class cID3v2_CommentsFrame;
13124
13125
 
13125
13126
 
13127
+ /*
13128
+ Document-class: TagLib::ID3v2_GeneralEncapsulatedObjectFrame
13129
+
13130
+ Proxy of C++ TagLib::ID3v2_GeneralEncapsulatedObjectFrame class
13131
+
13132
+
13133
+ */
13134
+ swig_class cID3v2_GeneralEncapsulatedObjectFrame;
13135
+
13136
+
13126
13137
  /*
13127
13138
  Document-class: TagLib::ID3v2_FrameFactory
13128
13139
 
@@ -19936,6 +19947,7 @@ static swig_type_info _swigt__p_TagLib__ID3v2__AttachedPictureFrame = {"_p_TagLi
19936
19947
  static swig_type_info _swigt__p_TagLib__ID3v2__CommentsFrame = {"_p_TagLib__ID3v2__CommentsFrame", "TagLib::ID3v2::CommentsFrame *", 0, 0, (void*)0, 0};
19937
19948
  static swig_type_info _swigt__p_TagLib__ID3v2__Frame = {"_p_TagLib__ID3v2__Frame", "TagLib::ID3v2::Frame *", 0, 0, (void*)0, 0};
19938
19949
  static swig_type_info _swigt__p_TagLib__ID3v2__FrameFactory = {"_p_TagLib__ID3v2__FrameFactory", "TagLib::ID3v2::FrameFactory *", 0, 0, (void*)0, 0};
19950
+ static swig_type_info _swigt__p_TagLib__ID3v2__GeneralEncapsulatedObjectFrame = {"_p_TagLib__ID3v2__GeneralEncapsulatedObjectFrame", "TagLib::ID3v2::GeneralEncapsulatedObjectFrame *", 0, 0, (void*)0, 0};
19939
19951
  static swig_type_info _swigt__p_TagLib__ID3v2__Header = {"_p_TagLib__ID3v2__Header", "TagLib::ID3v2::Header *", 0, 0, (void*)0, 0};
19940
19952
  static swig_type_info _swigt__p_TagLib__ID3v2__Tag = {"_p_TagLib__ID3v2__Tag", "TagLib::ID3v2::Tag *", 0, 0, (void*)0, 0};
19941
19953
  static swig_type_info _swigt__p_TagLib__ListT_Frame_p_t = {"_p_TagLib__ListT_Frame_p_t", "TagLib::ID3v2::FrameList *|TagLib::List< Frame * > *", 0, 0, (void*)0, 0};
@@ -19991,6 +20003,7 @@ static swig_type_info *swig_type_initial[] = {
19991
20003
  &_swigt__p_TagLib__ID3v2__CommentsFrame,
19992
20004
  &_swigt__p_TagLib__ID3v2__Frame,
19993
20005
  &_swigt__p_TagLib__ID3v2__FrameFactory,
20006
+ &_swigt__p_TagLib__ID3v2__GeneralEncapsulatedObjectFrame,
19994
20007
  &_swigt__p_TagLib__ID3v2__Header,
19995
20008
  &_swigt__p_TagLib__ID3v2__Tag,
19996
20009
  &_swigt__p_TagLib__ListT_Frame_p_t,
@@ -20046,6 +20059,7 @@ static swig_cast_info _swigc__p_TagLib__ID3v2__AttachedPictureFrame[] = { {&_sw
20046
20059
  static swig_cast_info _swigc__p_TagLib__ID3v2__CommentsFrame[] = { {&_swigt__p_TagLib__ID3v2__CommentsFrame, 0, 0, 0},{0, 0, 0, 0}};
20047
20060
  static swig_cast_info _swigc__p_TagLib__ID3v2__Frame[] = { {&_swigt__p_TagLib__ID3v2__Frame, 0, 0, 0},{0, 0, 0, 0}};
20048
20061
  static swig_cast_info _swigc__p_TagLib__ID3v2__FrameFactory[] = { {&_swigt__p_TagLib__ID3v2__FrameFactory, 0, 0, 0},{0, 0, 0, 0}};
20062
+ static swig_cast_info _swigc__p_TagLib__ID3v2__GeneralEncapsulatedObjectFrame[] = { {&_swigt__p_TagLib__ID3v2__GeneralEncapsulatedObjectFrame, 0, 0, 0},{0, 0, 0, 0}};
20049
20063
  static swig_cast_info _swigc__p_TagLib__ID3v2__Header[] = { {&_swigt__p_TagLib__ID3v2__Header, 0, 0, 0},{0, 0, 0, 0}};
20050
20064
  static swig_cast_info _swigc__p_TagLib__ID3v2__Tag[] = { {&_swigt__p_TagLib__ID3v2__Tag, 0, 0, 0},{0, 0, 0, 0}};
20051
20065
  static swig_cast_info _swigc__p_TagLib__ListT_Frame_p_t[] = { {&_swigt__p_TagLib__ListT_Frame_p_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -20101,6 +20115,7 @@ static swig_cast_info *swig_cast_initial[] = {
20101
20115
  _swigc__p_TagLib__ID3v2__CommentsFrame,
20102
20116
  _swigc__p_TagLib__ID3v2__Frame,
20103
20117
  _swigc__p_TagLib__ID3v2__FrameFactory,
20118
+ _swigc__p_TagLib__ID3v2__GeneralEncapsulatedObjectFrame,
20104
20119
  _swigc__p_TagLib__ID3v2__Header,
20105
20120
  _swigc__p_TagLib__ID3v2__Tag,
20106
20121
  _swigc__p_TagLib__ListT_Frame_p_t,
@@ -20810,10 +20825,10 @@ cVorbis_File.klass = rb_define_class_under(mTagLibVorbis, "File", ((swig_class *
20810
20825
  rb_undef_alloc_func(cVorbis_File.klass);
20811
20826
  cVorbis_File.mark = 0;
20812
20827
  cVorbis_File.trackObjects = 0;
20813
- rb_define_module_function(mTagLib, "genre", VALUEFUNC(_wrap_genre), -1);
20814
- rb_define_module_function(mTagLib, "genreIndex", VALUEFUNC(_wrap_genreIndex), -1);
20815
- rb_define_module_function(mTagLib, "genreList", VALUEFUNC(_wrap_genreList), -1);
20816
- rb_define_module_function(mTagLib, "genreMap", VALUEFUNC(_wrap_genreMap), -1);
20828
+ rb_define_module_function(mTagLibID3v1,"genre", VALUEFUNC(_wrap_ID3v1_genre),-1);
20829
+ rb_define_module_function(mTagLibID3v1,"genreIndex", VALUEFUNC(_wrap_ID3v1_genreIndex),-1);
20830
+ rb_define_module_function(mTagLibID3v1,"genreList", VALUEFUNC(_wrap_ID3v1_genreList),-1);
20831
+ rb_define_module_function(mTagLibID3v1,"genreMap", VALUEFUNC(_wrap_ID3v1_genreMap),-1);
20817
20832
 
20818
20833
  cID3v1_Tag.klass = rb_define_class_under(mTagLibID3v1, "Tag", ((swig_class *) SWIGTYPE_p_TagLib__Tag->clientdata)->klass);
20819
20834
  SWIG_TypeClientData(SWIGTYPE_p_TagLib__ID3v1__Tag, (void *) &cID3v1_Tag);
@@ -20870,6 +20885,12 @@ cID3v2_CommentsFrame.klass = rb_define_class_under(mTagLibID3v2, "CommentsFrame"
20870
20885
  cID3v2_CommentsFrame.mark = 0;
20871
20886
  cID3v2_CommentsFrame.trackObjects = 0;
20872
20887
 
20888
+ cID3v2_GeneralEncapsulatedObjectFrame.klass = rb_define_class_under(mTagLibID3v2, "GeneralEncapsulatedObjectFrame", rb_cObject);
20889
+ SWIG_TypeClientData(SWIGTYPE_p_TagLib__ID3v2__GeneralEncapsulatedObjectFrame, (void *) &cID3v2_GeneralEncapsulatedObjectFrame);
20890
+ rb_undef_alloc_func(cID3v2_GeneralEncapsulatedObjectFrame.klass);
20891
+ cID3v2_GeneralEncapsulatedObjectFrame.mark = 0;
20892
+ cID3v2_GeneralEncapsulatedObjectFrame.trackObjects = 0;
20893
+
20873
20894
  cID3v2_FrameFactory.klass = rb_define_class_under(mTagLibID3v2, "FrameFactory", rb_cObject);
20874
20895
  SWIG_TypeClientData(SWIGTYPE_p_TagLib__ID3v2__FrameFactory, (void *) &cID3v2_FrameFactory);
20875
20896
  rb_undef_alloc_func(cID3v2_FrameFactory.klass);
data/lib/TagLib.rb CHANGED
@@ -1,2 +1,4 @@
1
1
  require 'taglib/TagLib'
2
-
2
+ module TagLib
3
+ VERSION="0.2.2"
4
+ end
data/lib/TagLib_doc.rb CHANGED
@@ -6,62 +6,7 @@
6
6
  #
7
7
  #
8
8
  module TagLib
9
- # Singleton methods
10
- def self.genreList()
11
- end
12
- def self.genreIndex()
13
- end
14
- def self.genre()
15
- end
16
- def self.genreMap()
17
- end
18
- # <b>
19
- # This class provides a simple abstraction for creating and handling files. .</b>
20
- #
21
- #
22
- # FileRef exists to provide a minimal, generic and value-based wrapper around a File. It is lightweight and implicitly shared, and as such suitable for pass-by-value use. This hides some of the uglier details of TagLib::File and the non-generic portions of the concrete file implementations.This class is useful in a &quot;simple usage&quot; situation where it is desirable to be able to get and set some of the tag information that is similar across file types.Also note that it is probably a good idea to plug this into your mime type system rather than using the constructor that accepts a file name using the FileTypeResolver.FileTypeResolver addFileTypeResolver()
23
- #
24
- #
25
- class TagLib::FileRef
26
- # Singleton methods
27
- def self.defaultFileExtensions()
28
- end
29
- #
30
- # Returns the audio properties for this FileRef. If no audio properties were read then this will returns a null pointer.
31
- #
32
- def audioProperties()
33
- end
34
- #
35
- # Saves the file. Returns true on success.
36
- #
37
- def save()
38
- end
39
- #
40
- # Returns a pointer to represented file&apos;s tag.This pointer will become invalid when this FileRef and all copies pass out of scope.
41
- # File::tag()
42
- #
43
- #
44
- def tag()
45
- end
46
- #
47
- # Returns true if the file (and as such other pointers) are null.
48
- #
49
- def isNull()
50
- end
51
- def null?()
52
- end
53
- #
54
- # Returns a pointer to the file represented by this handler class.As a general rule this call should be avoided since if you need to work with file objects directly, you are probably better served instantiating the File subclasses (i.e. MPEG::File) manually and working with their APIs.This handle exists to provide a minimal, generic and value-based wrapper around a File. Accessing the file directly generally indicates a moving away from this simplicity (and into things beyond the scope of FileRef).This pointer will become invalid when this FileRef and all copies pass out of scope.
55
- #
56
- #
57
- def file()
58
- end
59
- end
60
- class TagLib::FrameListMap
61
- def isEmpty()
62
- end
63
- def contains()
64
- end
9
+ class TagLib::FrameListMap
65
10
  def clear()
66
11
  end
67
12
  def size()
@@ -70,6 +15,10 @@
70
15
  end
71
16
  def insert()
72
17
  end
18
+ def contains()
19
+ end
20
+ def isEmpty()
21
+ end
73
22
  def length()
74
23
  end
75
24
  end
@@ -80,16 +29,6 @@
80
29
  # This is an attempt to abstract away the difference in the meta data formats of various audio codecs and tagging schemes. As such it is generally a subset of what is available in the specific formats but should be suitable for most applications. This is meant to compliment the generic APIs found in TagLib::AudioProperties, TagLib::File and TagLib::FileRef.
81
30
  #
82
31
  class TagLib::Tag
83
- #
84
- # Returns true if the tag does not contain any data. This should be reimplemented in subclasses that provide more than the basic tagging abilities in this class.
85
- #
86
- def isEmpty()
87
- end
88
- #
89
- # Returns the genre name; if no genre is present in the tag String::null will be returned.
90
- #
91
- def genre()
92
- end
93
32
  def genre=()
94
33
  end
95
34
  #
@@ -98,16 +37,14 @@
98
37
  def setComment( s)
99
38
  end
100
39
  #
101
- # Returns the year; if there is no year set, this will return 0.
102
- #
103
- def year()
104
- end
105
- #
106
40
  # Returns the track number; if there is no track number set, this will return 0.
107
41
  #
108
42
  def track()
109
43
  end
110
- def year=()
44
+ #
45
+ # Returns the year; if there is no year set, this will return 0.
46
+ #
47
+ def year()
111
48
  end
112
49
  def track=()
113
50
  end
@@ -121,7 +58,7 @@
121
58
  #
122
59
  def title()
123
60
  end
124
- def empty?()
61
+ def year=()
125
62
  end
126
63
  def title=()
127
64
  end
@@ -136,10 +73,19 @@
136
73
  def setYear(uint i)
137
74
  end
138
75
  #
76
+ # Returns the track comment; if no comment is present in the tag String::null will be returned.
77
+ #
78
+ def comment()
79
+ end
80
+ def empty?()
81
+ end
82
+ #
139
83
  # Returns the artist name; if no artist name is present in the tag String::null will be returned.
140
84
  #
141
85
  def artist()
142
86
  end
87
+ def comment=()
88
+ end
143
89
  def artist=()
144
90
  end
145
91
  #
@@ -153,17 +99,10 @@
153
99
  def setTrack(uint i)
154
100
  end
155
101
  #
156
- # Returns the track comment; if no comment is present in the tag String::null will be returned.
157
- #
158
- def comment()
159
- end
160
- #
161
102
  # Returns the album name; if no album name is present in the tag String::null will be returned.
162
103
  #
163
104
  def album()
164
105
  end
165
- def comment=()
166
- end
167
106
  def album=()
168
107
  end
169
108
  #
@@ -171,27 +110,23 @@
171
110
  #
172
111
  def setAlbum( s)
173
112
  end
174
- end
175
- # <b>
176
- # A wide string class suitable for unicode. .</b>
177
113
  #
114
+ # Returns true if the tag does not contain any data. This should be reimplemented in subclasses that provide more than the basic tagging abilities in this class.
178
115
  #
179
- # This is an implicitly shared wide string. For storage it uses TagLib::wstring, but as this is an implementation detail this of course could change. Strings are stored internally as UTF-16BE. (Without the BOM (Byte Order Mark)The use of implicit sharing means that copying a string is cheap, the only cost comes into play when the copy is modified. Prior to that the string just has a pointer to the data of the parent String. This also makes this class suitable as a function return type.In addition to adding implicit sharing, this class keeps track of four possible encodings, which are the four supported by the ID3v2 standard.
180
- #
181
- class TagLib::String
116
+ def isEmpty()
117
+ end
182
118
  #
183
- # Creates and returns a C-String based on the data. This string is still owned by the String (class) and as such should not be deleted by the user.If unicode if false (the default) this string will be encoded in Latin1. If it is true the returned C-String will be UTF-8 encoded.This string remains valid until the String instance is destroyed or another export method is called.This however has the side effect that this C-String will remain in memory in addition to other memory that is consumed by the String instance. So, this method should not be used on large strings or where memory is critical.
184
- #
119
+ # Returns the genre name; if no genre is present in the tag String::null will be returned.
185
120
  #
186
- def toCString(bool unicode = false)
121
+ def genre()
187
122
  end
188
123
  end
189
124
  class TagLib::FrameList
190
- def isEmpty()
125
+ def size()
191
126
  end
192
127
  def contains()
193
128
  end
194
- def size()
129
+ def isEmpty()
195
130
  end
196
131
  end
197
132
  # <b>
@@ -223,6 +158,20 @@
223
158
  end
224
159
  end
225
160
  # <b>
161
+ # A wide string class suitable for unicode. .</b>
162
+ #
163
+ #
164
+ # This is an implicitly shared wide string. For storage it uses TagLib::wstring, but as this is an implementation detail this of course could change. Strings are stored internally as UTF-16BE. (Without the BOM (Byte Order Mark)The use of implicit sharing means that copying a string is cheap, the only cost comes into play when the copy is modified. Prior to that the string just has a pointer to the data of the parent String. This also makes this class suitable as a function return type.In addition to adding implicit sharing, this class keeps track of four possible encodings, which are the four supported by the ID3v2 standard.
165
+ #
166
+ class TagLib::String
167
+ #
168
+ # Creates and returns a C-String based on the data. This string is still owned by the String (class) and as such should not be deleted by the user.If unicode if false (the default) this string will be encoded in Latin1. If it is true the returned C-String will be UTF-8 encoded.This string remains valid until the String instance is destroyed or another export method is called.This however has the side effect that this C-String will remain in memory in addition to other memory that is consumed by the String instance. So, this method should not be used on large strings or where memory is critical.
169
+ #
170
+ #
171
+ def toCString(bool unicode = false)
172
+ end
173
+ end
174
+ # <b>
226
175
  # A byte vector. .</b>
227
176
  #
228
177
  #
@@ -241,10 +190,6 @@
241
190
  end
242
191
  end
243
192
  class TagLib::GenreMap
244
- def isEmpty()
245
- end
246
- def contains()
247
- end
248
193
  def clear()
249
194
  end
250
195
  def size()
@@ -253,6 +198,10 @@
253
198
  end
254
199
  def insert()
255
200
  end
201
+ def contains()
202
+ end
203
+ def isEmpty()
204
+ end
256
205
  def length()
257
206
  end
258
207
  def []()
@@ -265,18 +214,14 @@
265
214
  # A List specialization with some handy features useful for ByteVectors.
266
215
  #
267
216
  class TagLib::ByteVectorList
268
- def isEmpty()
217
+ def size()
269
218
  end
270
219
  def contains()
271
220
  end
272
- def size()
221
+ def isEmpty()
273
222
  end
274
223
  end
275
224
  class TagLib::ItemListMap
276
- def isEmpty()
277
- end
278
- def contains()
279
- end
280
225
  def clear()
281
226
  end
282
227
  def size()
@@ -285,6 +230,10 @@
285
230
  end
286
231
  def insert()
287
232
  end
233
+ def contains()
234
+ end
235
+ def isEmpty()
236
+ end
288
237
  def length()
289
238
  end
290
239
  end
@@ -295,12 +244,30 @@
295
244
  # This is a spcialization of the List class with some members convention for string operations.
296
245
  #
297
246
  class TagLib::StringList
298
- def isEmpty()
247
+ def size()
299
248
  end
300
249
  def contains()
301
250
  end
251
+ def isEmpty()
252
+ end
253
+ end
254
+ class TagLib::FieldListMap
255
+ def clear()
256
+ end
302
257
  def size()
303
258
  end
259
+ def empty?()
260
+ end
261
+ def insert()
262
+ end
263
+ def contains()
264
+ end
265
+ def isEmpty()
266
+ end
267
+ def length()
268
+ end
269
+ def []()
270
+ end
304
271
  end
305
272
  # <b>
306
273
  # A file class with some useful methods for tag manipulation. .</b>
@@ -320,23 +287,8 @@
320
287
  #
321
288
  def seek(long offset,Position p = Beginning)
322
289
  end
323
- #
324
- # Returns true if the file is read only (or if the file can not be opened).
325
- #
326
- def readOnly()
327
- end
328
- #
329
- # Returns a pointer to this file&apos;s audio properties. This should be reimplemented in the concrete subclasses. If no audio properties were read then this will return a null pointer.
330
- #
331
- def audioProperties()
332
- end
333
290
  def find2()
334
291
  end
335
- #
336
- # Reset the end-of-file and error flags on the file.
337
- #
338
- def clear()
339
- end
340
292
  def valid?()
341
293
  end
342
294
  #
@@ -345,24 +297,27 @@
345
297
  #
346
298
  def save()
347
299
  end
348
- #
349
- # Returns a pointer to this file&apos;s tag. This should be reimplemented in the concrete subclasses.
350
- #
351
- def tag()
352
- end
353
300
  def isWritable()
354
301
  end
355
302
  def find3()
356
303
  end
304
+ #
305
+ # Reset the end-of-file and error flags on the file.
306
+ #
307
+ def clear()
308
+ end
357
309
  def read_only?()
358
310
  end
359
311
  #
312
+ # Returns a pointer to this file&apos;s tag. This should be reimplemented in the concrete subclasses.
313
+ #
314
+ def tag()
315
+ end
316
+ #
360
317
  # Since the file can currently only be opened as an argument to the constructor (sort-of by design), this returns if that open succeeded.
361
318
  #
362
319
  def isOpen()
363
320
  end
364
- def writable?()
365
- end
366
321
  #
367
322
  # Reads a block of size length at the current get pointer.
368
323
  #
@@ -374,11 +329,7 @@
374
329
  #
375
330
  def rfind( ByteVector pattern,long fromOffset = 0, ByteVector before = ByteVector::null)
376
331
  end
377
- #
378
- # Insert data at position start in the file overwriting replace bytes of the original content.This method is slow since it requires rewriting all of the file after the insertion point.
379
- #
380
- #
381
- def insert( ByteVector data,ulong start = 0,ulong replace = 0)
332
+ def writable?()
382
333
  end
383
334
  #
384
335
  # Attempts to write the block data at the current get pointer. If the file is currently only opened read only -- i.e. readOnly() returns true -- this attempts to reopen the file in read/write mode.This should be used instead of using the streaming output operator for a ByteVector. And even this function is significantly slower than doing output with a char[].
@@ -387,9 +338,10 @@
387
338
  def writeBlock( ByteVector data)
388
339
  end
389
340
  #
390
- # Returns the current offset withing the file.
341
+ # Insert data at position start in the file overwriting replace bytes of the original content.This method is slow since it requires rewriting all of the file after the insertion point.
342
+ #
391
343
  #
392
- def tell()
344
+ def insert( ByteVector data,ulong start = 0,ulong replace = 0)
393
345
  end
394
346
  #
395
347
  # Removes a block of the file starting a start and continuing for length bytes.This method is slow since it involves rewriting all of the file after the removed portion.
@@ -400,674 +352,617 @@
400
352
  def open?()
401
353
  end
402
354
  #
403
- # Returns the length of the file.
355
+ # Returns true if the file is open and readble and valid information for the Tag and / or AudioProperties was found.
404
356
  #
405
- def length()
357
+ def isValid()
406
358
  end
407
359
  #
408
- # Returns true if the file is open and readble and valid information for the Tag and / or AudioProperties was found.
360
+ # Returns the current offset withing the file.
409
361
  #
410
- def isValid()
362
+ def tell()
411
363
  end
412
364
  def find1()
413
365
  end
414
- end
415
- class TagLib::FieldListMap
416
- def isEmpty()
417
- end
418
- def contains()
419
- end
420
- def clear()
421
- end
422
- def size()
423
- end
424
- def empty?()
425
- end
426
- def insert()
427
- end
366
+ #
367
+ # Returns the length of the file.
368
+ #
428
369
  def length()
429
370
  end
430
- def []()
371
+ #
372
+ # Returns true if the file is read only (or if the file can not be opened).
373
+ #
374
+ def readOnly()
375
+ end
376
+ #
377
+ # Returns a pointer to this file&apos;s audio properties. This should be reimplemented in the concrete subclasses. If no audio properties were read then this will return a null pointer.
378
+ #
379
+ def audioProperties()
431
380
  end
432
381
  end
433
382
  # <b>
434
- # A namespace for the classes used by Ogg-based metadata files. .</b>
383
+ # This class provides a simple abstraction for creating and handling files. .</b>
435
384
  #
436
385
  #
386
+ # FileRef exists to provide a minimal, generic and value-based wrapper around a File. It is lightweight and implicitly shared, and as such suitable for pass-by-value use. This hides some of the uglier details of TagLib::File and the non-generic portions of the concrete file implementations.This class is useful in a &quot;simple usage&quot; situation where it is desirable to be able to get and set some of the tag information that is similar across file types.Also note that it is probably a good idea to plug this into your mime type system rather than using the constructor that accepts a file name using the FileTypeResolver.FileTypeResolver addFileTypeResolver()
437
387
  #
438
388
  #
439
- module TagLib::Ogg
440
- # <b>
441
- # An implementation of the page headers associated with each Ogg::Page. .</b>
442
- #
389
+ class TagLib::FileRef
390
+ # Singleton methods
391
+ def self.defaultFileExtensions()
392
+ end
443
393
  #
444
- # This class implements Ogg page headers which contain the information about Ogg pages needed to break them into packets which can be passed on to the codecs.
394
+ # Saves the file. Returns true on success.
445
395
  #
446
- class TagLib::Ogg::PageHeader
396
+ def save()
397
+ end
447
398
  #
448
- # Marks this page as the last page of the Ogg stream.lastPageOfStream()
399
+ # Returns a pointer to represented file&apos;s tag.This pointer will become invalid when this FileRef and all copies pass out of scope.
400
+ # File::tag()
449
401
  #
450
402
  #
451
- def setLastPageOfStream(bool last)
452
- end
403
+ def tag()
404
+ end
453
405
  #
454
- # Ogg pages contain a list of packets (which are used by the contained codecs). The sizes of these pages is encoded in the page header. This returns a list of the packet sizes in bytes.setPacketSizes()
455
- #
406
+ # Returns true if the file (and as such other pointers) are null.
456
407
  #
457
- def packetSizes()
458
- end
408
+ def isNull()
409
+ end
410
+ def null?()
411
+ end
459
412
  #
460
- # Returns the index of the page within the Ogg stream. This helps make it possible to determine if pages have been lost.setPageSequenceNumber()
413
+ # Returns a pointer to the file represented by this handler class.As a general rule this call should be avoided since if you need to work with file objects directly, you are probably better served instantiating the File subclasses (i.e. MPEG::File) manually and working with their APIs.This handle exists to provide a minimal, generic and value-based wrapper around a File. Accessing the file directly generally indicates a moving away from this simplicity (and into things beyond the scope of FileRef).This pointer will become invalid when this FileRef and all copies pass out of scope.
461
414
  #
462
415
  #
463
- def pageSequenceNumber()
464
- end
416
+ def file()
417
+ end
465
418
  #
466
- # Sets the internal flag indicating if the last packet in this page is complete to completed.lastPacketCompleted()
467
- #
419
+ # Returns the audio properties for this FileRef. If no audio properties were read then this will returns a null pointer.
468
420
  #
469
- def setLastPacketCompleted(bool completed)
470
- end
421
+ def audioProperties()
422
+ end
423
+ end
424
+ # <b>
425
+ # An ID3v1 implementation. .</b>
471
426
  #
472
- # A special value of containing the position of the packet to be interpreted by the codec. In the case of Vorbis this contains the PCM value and is used to calculate the length of the stream.setAbsoluteGranularPosition()
473
- #
474
427
  #
475
- def absoluteGranularPosition()
476
- end
428
+ #
477
429
  #
478
- # Sets the sizes of the packets in this page to sizes. Internally this updates the lacing values in the header.packetSizes()
479
- #
430
+ module TagLib::ID3v1
431
+ # Singleton methods
432
+ def self.genreList()
433
+ end
434
+ def self.genreIndex()
435
+ end
436
+ def self.genre()
437
+ end
438
+ def self.genreMap()
439
+ end
440
+ # <b>
441
+ # The main class in the ID3v1 implementation. .</b>
480
442
  #
481
- def setPacketSizes( List&lt; int &gt; sizes)
482
- end
483
443
  #
484
- # Sets the page&apos;s position in the stream to sequenceNumber.pageSequenceNumber()
485
- #
444
+ # This is an implementation of the ID3v1 format. ID3v1 is both the simplist and most common of tag formats but is rather limited. Because of its pervasiveness and the way that applications have been written around the fields that it provides, the generic TagLib::Tag API is a mirror of what is provided by ID3v1.ID3v1 tags should generally only contain Latin1 information. However because many applications do not follow this rule there is now support for overriding the ID3v1 string handling using the ID3v1::StringHandler class. Please see the documentation for that class for more information.StringHandler
445
+ # Most fields are truncated to a maximum of 28-30 bytes. The truncation happens automatically when the tag is rendered.
446
+ #
486
447
  #
487
- def setPageSequenceNumber(int sequenceNumber)
448
+ class TagLib::ID3v1::Tag < TagLib::Tag
449
+ def genre=()
488
450
  end
489
451
  #
490
- # Returns the complete header size.
452
+ # Sets the comment to s. If s is String::null then this value will be cleared.
491
453
  #
492
- def size()
454
+ def setComment( s)
493
455
  end
494
456
  #
495
- # This returns true if this is the first page of the Ogg (logical) stream.setFirstPageOfStream()
496
- #
457
+ # Returns the track number; if there is no track number set, this will return 0.
497
458
  #
498
- def firstPageOfStream()
459
+ def track()
499
460
  end
500
461
  #
501
- # A special value of containing the position of the packet to be interpreted by the codec. It is only supported here so that it may be coppied from one page to another.absoluteGranularPosition()
502
- #
462
+ # Returns the year; if there is no year set, this will return 0.
503
463
  #
504
- def setAbsoluteGranularPosition(long long agp)
464
+ def year()
505
465
  end
506
- #
507
- # Some packets can be continued across multiple pages. If the first packet in the current page is a continuation this will return true. If this is page starts with a new packet this will return false.lastPacketCompleted() setFirstPacketContinued()
508
- #
509
- #
510
- def firstPacketContinued()
466
+ def track=()
511
467
  end
512
468
  #
513
- # Returns the size of the data portion of the page -- i.e. the size of the page less the header size.
469
+ # Sets the genre to s. If s is String::null then this value will be cleared. For tag formats that use a fixed set of genres, the appropriate value will be selected based on a string comparison. A list of available genres for those formats should be available in that type&apos;s implementation.
514
470
  #
515
- def dataSize()
471
+ def setGenre( s)
516
472
  end
517
473
  #
518
- # Marks this page as the first page of the Ogg stream.firstPageOfStream()
519
- #
474
+ # Returns the track name; if no track name is present in the tag String::null will be returned.
520
475
  #
521
- def setFirstPageOfStream(bool first)
476
+ def title()
522
477
  end
523
- #
524
- # Every Ogg logical stream is given a random serial number which is common to every page in that logical stream. This returns the serial number of the stream associated with this packet.setStreamSerialNumber()
525
- #
526
- #
527
- def streamSerialNumber()
478
+ def year=()
528
479
  end
529
- #
530
- # Sets the internal flag indicating if the first packet in this page is continued to continued.firstPacketContinued()
531
- #
532
- #
533
- def setFirstPacketContinued(bool continued)
480
+ def title=()
534
481
  end
535
482
  #
536
- # This returns true if this is the last page of the Ogg (logical) stream.setLastPageOfStream()
537
- #
483
+ # Sets the title to s. If s is String::null then this value will be cleared.
538
484
  #
539
- def lastPageOfStream()
485
+ def setTitle( s)
540
486
  end
541
487
  #
542
- # Every Ogg logical stream is given a random serial number which is common to every page in that logical stream. This sets this pages serial number. This method should be used when adding new pages to a logical stream.streamSerialNumber()
543
- #
488
+ # Sets the year to i. If s is 0 then this value will be cleared.
544
489
  #
545
- def setStreamSerialNumber(uint n)
490
+ def setYear(uint i)
546
491
  end
547
492
  #
548
- # Returns true if the header parsed properly and is valid.
493
+ # Returns the track comment; if no comment is present in the tag String::null will be returned.
549
494
  #
550
- def isValid()
495
+ def comment()
551
496
  end
552
- #
553
- # Render the page header to binary data.The checksum -- bytes 22 - 25 -- will be left empty and must be filled in when rendering the entire page.
554
- #
555
- #
556
- def render()
497
+ def empty?()
557
498
  end
558
499
  #
559
- # Returns true if the last packet of this page is completely contained in this page.firstPacketContinued() setLastPacketCompleted()
560
- #
500
+ # Returns the artist name; if no artist name is present in the tag String::null will be returned.
561
501
  #
562
- def lastPacketCompleted()
502
+ def artist()
563
503
  end
564
- end
565
- # <b>
566
- # An implementation of Ogg pages. .</b>
567
- #
568
- #
569
- # This is an implementation of the pages that make up an Ogg stream. This handles parsing pages and breaking them down into packets and handles the details of packets spanning multiple pages and pages that contiain multiple packets.In most Xiph.org formats the comments are found in the first few packets, this however is a reasonably complete implementation of Ogg pages that could potentially be useful for non-meta data purposes.
570
- #
571
- class TagLib::Ogg::Page
572
- #
573
- # Checks to see if the specified packet is contained in the current page.ContainsPacketFlags
574
- #
575
- #
576
- def containsPacket(int index)
504
+ def comment=()
577
505
  end
578
- #
579
- # Returns the page&apos;s position within the file (in bytes).
580
- #
581
- def fileOffset()
506
+ def artist=()
582
507
  end
583
508
  #
584
- # Returns the number of packets (whole or partial) in this page.
509
+ # Sets the artist to s. If s is String::null then this value will be cleared.
585
510
  #
586
- def packetCount()
511
+ def setArtist( s)
587
512
  end
588
513
  #
589
- # Returns the size of the page in bytes.
514
+ # Sets the track to i. If s is 0 then this value will be cleared.
590
515
  #
591
- def size()
516
+ def setTrack(uint i)
592
517
  end
593
518
  #
594
- # Returns a pointer to the header for this page. This pointer will become invalid when the page is deleted.
519
+ # Returns the album name; if no album name is present in the tag String::null will be returned.
595
520
  #
596
- def header()
521
+ def album()
597
522
  end
598
523
  #
599
- # Returns a list of the packets in this page.Either or both the first and last packets may be only partial.
600
- # PageHeader::firstPacketContinued()
601
- #
524
+ # Renders the in memory values to a ByteVector suitable for writing to the file.
602
525
  #
603
- def packets()
526
+ def render()
604
527
  end
605
- #
606
- # Returns the index of the first packet wholly or partially contained in this page.setFirstPacketIndex()
607
- #
608
- #
609
- def firstPacketIndex()
528
+ def album=()
610
529
  end
611
530
  #
612
- # Sets the index of the first packet in the page.firstPacketIndex()
613
- #
531
+ # Sets the album to s. If s is String::null then this value will be cleared.
614
532
  #
615
- def setFirstPacketIndex(int index)
533
+ def setAlbum( s)
534
+ end
535
+ def isEmpty()
616
536
  end
617
537
  #
618
- #
538
+ # Returns the genre name; if no genre is present in the tag String::null will be returned.
619
539
  #
620
- def render()
540
+ def genre()
621
541
  end
622
542
  end
543
+ end
623
544
  # <b>
624
- # Ogg Vorbis comment implementation. .</b>
545
+ # A namespace containing classes for Vorbis metadata. .</b>
625
546
  #
626
547
  #
627
- # This class is an implementation of the Ogg Vorbis comment specification, to be found in section 5 of the Ogg Vorbis specification. Because this format is also used in other (currently unsupported) Xiph.org formats, it has been made part of a generic implementation rather than being limited to strictly Vorbis.Vorbis comments are a simple vector of keys and values, called fields. Multiple values for a given key are supported.fieldListMap()
628
548
  #
629
549
  #
630
- class TagLib::Ogg::XiphComment < TagLib::Tag
631
- #
632
- # Returns true if the tag does not contain any data. This should be reimplemented in subclasses that provide more than the basic tagging abilities in this class.
633
- #
634
- def isEmpty()
635
- end
636
- #
637
- # Returns a reference to the map of field lists. Because Xiph comments support multiple fields with the same key, a pure Map would not work. As such this is a Map of string lists, keyed on the comment field name.The standard set of Xiph/Vorbis fields (which may or may not be contained in any specific comment) is:
638
- #
639
- # TITLE
640
- #
641
- # VERSION
642
- #
643
- # ALBUM
644
- #
645
- # ARTIST
646
- #
647
- # PERFORMER
648
- #
649
- # COPYRIGHT
550
+ module TagLib::Vorbis
551
+ # <b>
552
+ # An implementation of audio property reading for Ogg Vorbis. .</b>
650
553
  #
651
- # ORGANIZATION
652
554
  #
653
- # DESCRIPTION
555
+ # This reads the data from an Ogg Vorbis stream found in the AudioProperties API.
654
556
  #
655
- # GENRE
557
+ class TagLib::Vorbis::Properties < TagLib::AudioProperties
656
558
  #
657
- # DATE
559
+ # Returns the minimum bitrate as read from the Vorbis identification header.
658
560
  #
659
- # LOCATION
561
+ def bitrateMinimum()
562
+ end
660
563
  #
661
- # CONTACT
564
+ # Returns the most appropriate bit rate for the file in kb/s. For constant bitrate formats this is simply the bitrate of the file. For variable bitrate formats this is either the average or nominal bitrate.
662
565
  #
663
- # ISRC
566
+ def bitrate()
567
+ end
664
568
  #
665
- # For a more detailed description of these fields, please see the Ogg Vorbis specification, section 5.2.2.1.The Ogg Vorbis comment specification does allow these key values to be either upper or lower case. However, it is conventional for them to be upper case. As such, TagLib, when parsing a Xiph/Vorbis comment, converts all fields to uppercase. When you are using this data structure, you will need to specify the field name in upper case.
666
- # You should not modify this data structure directly, instead use addField() and removeField().
667
- #
569
+ # Returns the sample rate in Hz.
668
570
  #
669
- def fieldListMap()
571
+ def sampleRate()
670
572
  end
671
573
  #
672
- # Returns true if the field is contained within the comment.This is safer than checking for membership in the FieldListMap.
673
- #
574
+ # Returns the Vorbis version, currently &quot;0&quot; (as specified by the spec).
674
575
  #
675
- def contains( key)
576
+ def vorbisVersion()
676
577
  end
677
578
  #
678
- # Returns the genre name; if no genre is present in the tag String::null will be returned.
579
+ # Returns the number of audio channels.
679
580
  #
680
- def genre()
681
- end
682
- def genre=()
581
+ def channels()
683
582
  end
684
583
  #
685
- # Sets the comment to s. If s is String::null then this value will be cleared.
584
+ # Returns the maximum bitrate as read from the Vorbis identification header.
686
585
  #
687
- def setComment( s)
586
+ def bitrateMaximum()
688
587
  end
689
588
  #
690
- # Returns the year; if there is no year set, this will return 0.
589
+ # Returns the length of the file in seconds.
691
590
  #
692
- def year()
591
+ def length()
693
592
  end
694
593
  #
695
- # Returns the track number; if there is no track number set, this will return 0.
594
+ # Returns the nominal bitrate as read from the Vorbis identification header.
696
595
  #
697
- def track()
596
+ def bitrateNominal()
698
597
  end
598
+ end
599
+ # <b>
600
+ # An implementation of Ogg::File with Vorbis specific methods. .</b>
699
601
  #
700
- # Returns the vendor ID of the Ogg Vorbis encoder. libvorbis 1.0 as the most common case always returns &quot;Xiph.Org libVorbis I 20020717&quot;.
701
602
  #
702
- def vendorID()
703
- end
704
- def year=()
603
+ # This is the central class in the Ogg Vorbis metadata processing collection of classes. It&apos;s built upon Ogg::File which handles processing of the Ogg logical bitstream and breaking it down into pages which are handled by the codec implementations, in this case Vorbis specifically.
604
+ #
605
+ class TagLib::Vorbis::File < TagLib::Ogg::File
606
+ def name()
705
607
  end
706
- def track=()
608
+ def seek()
609
+ end
610
+ def find2()
611
+ end
612
+ def firstPageHeader()
613
+ end
614
+ def valid?()
707
615
  end
708
616
  #
709
- # Sets the genre to s. If s is String::null then this value will be cleared. For tag formats that use a fixed set of genres, the appropriate value will be selected based on a string comparison. A list of available genres for those formats should be available in that type&apos;s implementation.
617
+ # Save the file and its associated tags. This should be reimplemented in the concrete subclasses. Returns true if the save succeeds.On UNIX multiple processes are able to write to the same file at the same time. This can result in serious file corruption. If you are developing a program that makes use of TagLib from multiple processes you must insure that you are only doing writes to a particular file from one of them.
618
+ #
710
619
  #
711
- def setGenre( s)
620
+ def save()
621
+ end
622
+ def isWritable()
623
+ end
624
+ def find3()
625
+ end
626
+ def clear()
627
+ end
628
+ def lastPageHeader()
629
+ end
630
+ def read_only?()
712
631
  end
713
632
  #
714
- # Returns the track name; if no track name is present in the tag String::null will be returned.
633
+ # Returns the XiphComment for this file. XiphComment implements the tag interface, so this serves as the reimplementation of TagLib::File::tag().
715
634
  #
716
- def title()
635
+ def tag()
717
636
  end
718
- def empty?()
637
+ def isOpen()
719
638
  end
720
- def title=()
639
+ def readBlock()
640
+ end
641
+ def rfind()
642
+ end
643
+ def writable?()
644
+ end
645
+ def writeBlock()
646
+ end
647
+ def packet()
648
+ end
649
+ def insert()
650
+ end
651
+ def removeBlock()
652
+ end
653
+ def open?()
654
+ end
655
+ def isValid()
656
+ end
657
+ def tell()
658
+ end
659
+ def find1()
660
+ end
661
+ def setPacket()
662
+ end
663
+ def length()
664
+ end
665
+ def readOnly()
721
666
  end
722
667
  #
723
- # Sets the title to s. If s is String::null then this value will be cleared.
668
+ # Returns the Vorbis::Properties for this file. If no audio properties were read then this will return a null pointer.
724
669
  #
725
- def setTitle( s)
670
+ def audioProperties()
726
671
  end
672
+ end
673
+ end
674
+ # <b>
675
+ # An implementation of TagLib::File with MPEG (MP3) specific methods. .</b>
727
676
  #
728
- # Add the field specified by key with the data value. If replace is true, then all of the other fields with the same key will be removed first.If the field value is empty, the field will be removed.
729
677
  #
730
- def addField( key, value,bool replace = true)
731
- end
678
+ #
732
679
  #
733
- # Sets the year to i. If s is 0 then this value will be cleared.
680
+ module TagLib::MPEG
681
+ # <b>
682
+ # An implementation of MP3 frame headers. .</b>
734
683
  #
735
- def setYear(uint i)
736
- end
737
684
  #
738
- # Returns the artist name; if no artist name is present in the tag String::null will be returned.
685
+ # This is an implementation of MPEG Layer III headers. The API follows more or less the binary format of these headers. I&apos;ve used this document as a reference.
739
686
  #
740
- def artist()
687
+ class TagLib::MPEG::Header
688
+ #
689
+ # Returns true if the copyrighted bit is set.
690
+ #
691
+ def isCopyrighted()
741
692
  end
742
- def artist=()
693
+ #
694
+ # Returns the MPEG Version of the header.
695
+ #
696
+ def version()
743
697
  end
744
698
  #
745
- # Sets the artist to s. If s is String::null then this value will be cleared.
699
+ # Returns the bitrate encoded in the header.
746
700
  #
747
- def setArtist( s)
701
+ def bitrate()
748
702
  end
749
703
  #
750
- # Remove the field specified by key with the data value. If value is null, all of the fields with the given key will be removed.
704
+ # Returns the layer version. This will be between the values 1-3.
751
705
  #
752
- def removeField( key, value = String::null)
706
+ def layer()
753
707
  end
754
708
  #
755
- # Sets the track to i. If s is 0 then this value will be cleared.
709
+ # Returns true if the &quot;original&quot; bit is set.
756
710
  #
757
- def setTrack(uint i)
711
+ def isOriginal()
758
712
  end
759
713
  #
760
- # Returns the track comment; if no comment is present in the tag String::null will be returned.
714
+ # Returns the sample rate in Hz.
761
715
  #
762
- def comment()
716
+ def sampleRate()
763
717
  end
764
718
  #
765
- # Returns the album name; if no album name is present in the tag String::null will be returned.
719
+ # Returns true if the MPEG protection bit is enabled.
766
720
  #
767
- def album()
721
+ def protectionEnabled()
768
722
  end
769
723
  #
770
- # Returns the number of fields present in the comment.
724
+ # Returns the frame length.
771
725
  #
772
- def fieldCount()
726
+ def frameLength()
773
727
  end
774
- def comment=()
728
+ #
729
+ # Returns true if the frame is padded.
730
+ #
731
+ def isPadded()
775
732
  end
776
733
  #
777
- # Renders the comment to a ByteVector suitable for inserting into a file.If addFramingBit is true the standard Vorbis comment framing bit will be appended. However some formats (notably FLAC) do not work with this in place.
734
+ # Returns the number of frames per sample.
778
735
  #
779
- def render(bool addFramingBit)
736
+ def samplesPerFrame()
780
737
  end
781
- def album=()
738
+ #
739
+ # Returns true if the frame is at least an appropriate size and has legal values.
740
+ #
741
+ def isValid()
782
742
  end
783
743
  #
784
- # Sets the album to s. If s is String::null then this value will be cleared.
744
+ # Returns the channel mode for this frame.
785
745
  #
786
- def setAlbum( s)
746
+ def channelMode()
787
747
  end
788
748
  end
789
749
  # <b>
790
- # An implementation of TagLib::File with some helpers for Ogg based formats. .</b>
750
+ # An implementation of audio property reading for MP3. .</b>
791
751
  #
792
752
  #
793
- # This is an implementation of Ogg file page and packet rendering and is of use to Ogg based formats. While the API is small this handles the non-trivial details of breaking up an Ogg stream into packets and makes these available (via subclassing) to the codec meta data implementations.
753
+ # This reads the data from an MPEG Layer III stream found in the AudioProperties API.
794
754
  #
795
- class TagLib::Ogg::File < TagLib::File
755
+ class TagLib::MPEG::Properties < TagLib::AudioProperties
796
756
  #
797
- # Sets the packet with index i to the value p.
757
+ # Returns true if the copyrighted bit is set.
798
758
  #
799
- def setPacket(uint i, ByteVector p)
800
- end
801
- def name()
802
- end
803
- def seek()
804
- end
805
- def readOnly()
806
- end
807
- def audioProperties()
808
- end
809
- def find2()
759
+ def isCopyrighted()
810
760
  end
811
761
  #
812
- # Returns a pointer to the PageHeader for the first page in the stream or null if the page could not be found.
762
+ # Returns the MPEG Version of the file.
813
763
  #
814
- def firstPageHeader()
815
- end
816
- def clear()
817
- end
818
- def valid?()
764
+ def version()
819
765
  end
820
766
  #
821
- # Save the file and its associated tags. This should be reimplemented in the concrete subclasses. Returns true if the save succeeds.On UNIX multiple processes are able to write to the same file at the same time. This can result in serious file corruption. If you are developing a program that makes use of TagLib from multiple processes you must insure that you are only doing writes to a particular file from one of them.
822
- #
767
+ # Returns the most appropriate bit rate for the file in kb/s. For constant bitrate formats this is simply the bitrate of the file. For variable bitrate formats this is either the average or nominal bitrate.
823
768
  #
824
- def save()
825
- end
826
- def tag()
827
- end
828
- def isWritable()
829
- end
830
- def find3()
769
+ def bitrate()
831
770
  end
832
771
  #
833
- # Returns a pointer to the PageHeader for the last page in the stream or null if the page could not be found.
772
+ # Returns the layer version. This will be between the values 1-3.
834
773
  #
835
- def lastPageHeader()
836
- end
837
- def read_only?()
838
- end
839
- def isOpen()
840
- end
841
- def writable?()
842
- end
843
- def readBlock()
844
- end
845
- def rfind()
774
+ def layer()
846
775
  end
847
- def insert()
776
+ #
777
+ # Returns true if the &quot;original&quot; bit is set.
778
+ #
779
+ def isOriginal()
848
780
  end
849
- def writeBlock()
781
+ #
782
+ # Returns the sample rate in Hz.
783
+ #
784
+ def sampleRate()
850
785
  end
851
786
  #
852
- # Returns the packet contents for the i-th packet (starting from zero) in the Ogg bitstream.The requires reading at least the packet header for every page up to the requested page.
853
- #
787
+ # Returns true if the MPEG protection bit is enabled.
854
788
  #
855
- def packet(uint i)
789
+ def protectionEnabled()
856
790
  end
857
- def tell()
791
+ #
792
+ # Returns a pointer to the XingHeader if one exists or null if no XingHeader was found.
793
+ #
794
+ def xingHeader()
858
795
  end
859
- def removeBlock()
796
+ #
797
+ # Returns the number of audio channels.
798
+ #
799
+ def channels()
860
800
  end
861
- def open?()
801
+ #
802
+ # Returns the channel mode for this frame.
803
+ #
804
+ def channelMode()
862
805
  end
806
+ #
807
+ # Returns the length of the file in seconds.
808
+ #
863
809
  def length()
864
810
  end
865
- def isValid()
866
- end
867
- def find1()
868
- end
869
811
  end
870
812
  # <b>
871
- # A namespace containing classes for Speex metadata. .</b>
813
+ # An implementation of the Xing VBR headers. .</b>
872
814
  #
873
815
  #
874
- #
816
+ # This is a minimalistic implementation of the Xing VBR headers. Xing headers are often added to VBR (variable bit rate) MP3 streams to make it easy to compute the length and quality of a VBR stream. Our implementation is only concerned with the total size of the stream (so that we can calculate the total playing time and the average bitrate). It uses this text and the XMMS sources as references.
875
817
  #
876
- module TagLib::Ogg::Speex
877
- # <b>
878
- # An implementation of audio property reading for Ogg Speex. .</b>
818
+ class TagLib::MPEG::XingHeader
879
819
  #
820
+ # Returns the total number of frames.
880
821
  #
881
- # This reads the data from an Ogg Speex stream found in the AudioProperties API.
822
+ def totalFrames()
823
+ end
882
824
  #
883
- class TagLib::Ogg::Speex::Properties < TagLib::AudioProperties
825
+ # Returns the total size of stream in bytes.
884
826
  #
885
- # Returns the most appropriate bit rate for the file in kb/s. For constant bitrate formats this is simply the bitrate of the file. For variable bitrate formats this is either the average or nominal bitrate.
827
+ def totalSize()
828
+ end
886
829
  #
887
- def bitrate()
888
- end
830
+ # Returns true if the data was parsed properly and if there is a valid Xing header present.
889
831
  #
890
- # Returns the Speex version, currently &quot;0&quot; (as specified by the spec).
832
+ def isValid()
833
+ end
834
+ end
835
+ # <b>
836
+ # An MPEG file class with some useful methods specific to MPEG. .</b>
891
837
  #
892
- def speexVersion()
893
- end
894
838
  #
895
- # Returns the sample rate in Hz.
839
+ # This implements the generic TagLib::File API and additionally provides access to properties that are distinct to MPEG files, notably access to the different ID3 tags.
896
840
  #
897
- def sampleRate()
898
- end
841
+ class TagLib::MPEG::File < TagLib::File
842
+ def name()
843
+ end
899
844
  #
900
- # Returns the number of audio channels.
845
+ # Returns the position in the file of the next MPEG frame, using the current position as start
901
846
  #
902
- def channels()
903
- end
847
+ def nextFrameOffset(long position)
848
+ end
849
+ def seek()
850
+ end
851
+ def find2()
852
+ end
853
+ def valid?()
854
+ end
904
855
  #
905
- # Returns the length of the file in seconds.
856
+ # Returns a pointer to the APE tag of the file.If create is false (the default) this will return a null pointer if there is no valid APE tag. If create is true it will create an APE tag if one does not exist.The Tag is still owned by the MPEG::File and should not be deleted by the user. It will be deleted when the file (object) is destroyed.
857
+ #
906
858
  #
907
- def length()
908
- end
909
- end
910
- # <b>
911
- # An implementation of Ogg::File with Speex specific methods. .</b>
859
+ def APETag(bool create = false)
860
+ end
912
861
  #
862
+ # Save the file. This will attempt to save all of the tag types that are specified by OR-ing together TagTypes values. The save() method above uses AllTags. This returns true if saving was successful.If stripOthers is true this strips all tags not included in the mask, but does not modify them in memory, so later calls to save() which make use of these tags will remain valid. This also strips empty tags.
913
863
  #
914
- # This is the central class in the Ogg Speex metadata processing collection of classes. It&apos;s built upon Ogg::File which handles processing of the Ogg logical bitstream and breaking it down into pages which are handled by the codec implementations, in this case Speex specifically.
864
+ def save(int tags,bool stripOthers)
865
+ end
866
+ def isWritable()
867
+ end
915
868
  #
916
- class TagLib::Ogg::Speex::File < TagLib::Ogg::File
917
- def setPacket()
918
- end
919
- def name()
920
- end
921
- def seek()
922
- end
923
- def readOnly()
924
- end
869
+ # Returns the position in the file of the previous MPEG frame, using the current position as start
925
870
  #
926
- # Returns the Speex::Properties for this file. If no audio properties were read then this will return a null pointer.
871
+ def previousFrameOffset(long position)
872
+ end
873
+ def find3()
874
+ end
875
+ def clear()
876
+ end
877
+ def read_only?()
878
+ end
927
879
  #
928
- def audioProperties()
929
- end
930
- def find2()
931
- end
932
- def firstPageHeader()
933
- end
934
- def clear()
935
- end
936
- def valid?()
937
- end
880
+ # Returns a pointer to a tag that is the union of the ID3v2 and ID3v1 tags. The ID3v2 tag is given priority in reading the information -- if requested information exists in both the ID3v2 tag and the ID3v1 tag, the information from the ID3v2 tag will be returned.If you would like more granular control over the content of the tags, with the concession of generality, use the tag-type specific calls.As this tag is not implemented as an ID3v2 tag or an ID3v1 tag, but a union of the two this pointer may not be cast to the specific tag types.
881
+ # ID3v1Tag() ID3v2Tag() APETag()
882
+ #
938
883
  #
939
- # Save the file and its associated tags. This should be reimplemented in the concrete subclasses. Returns true if the save succeeds.On UNIX multiple processes are able to write to the same file at the same time. This can result in serious file corruption. If you are developing a program that makes use of TagLib from multiple processes you must insure that you are only doing writes to a particular file from one of them.
884
+ def tag()
885
+ end
886
+ def isOpen()
887
+ end
888
+ def readBlock()
889
+ end
890
+ #
891
+ # Returns a pointer to the ID3v2 tag of the file.If create is false (the default) this will return a null pointer if there is no valid ID3v2 tag. If create is true it will create an ID3v2 tag if one does not exist.The Tag is still owned by the MPEG::File and should not be deleted by the user. It will be deleted when the file (object) is destroyed.
940
892
  #
941
893
  #
942
- def save()
943
- end
894
+ def ID3v2Tag(bool create = false)
895
+ end
944
896
  #
945
- # Returns the XiphComment for this file. XiphComment implements the tag interface, so this serves as the reimplementation of TagLib::File::tag().
897
+ # Returns the position in the file of the last MPEG frame.
946
898
  #
947
- def tag()
948
- end
949
- def isWritable()
950
- end
951
- def find3()
952
- end
953
- def lastPageHeader()
954
- end
955
- def read_only?()
956
- end
957
- def isOpen()
958
- end
959
- def writable?()
960
- end
961
- def readBlock()
962
- end
963
- def rfind()
964
- end
965
- def insert()
966
- end
967
- def writeBlock()
968
- end
969
- def packet()
970
- end
971
- def tell()
972
- end
973
- def removeBlock()
974
- end
975
- def open?()
976
- end
977
- def length()
978
- end
979
- def isValid()
980
- end
981
- def find1()
982
- end
983
- end
899
+ def lastFrameOffset()
984
900
  end
985
- module TagLib::Ogg::Flac
986
- class TagLib::Ogg::Flac::File < TagLib::Ogg::File
987
- def setPacket()
988
- end
989
- def name()
990
- end
991
- def seek()
992
- end
993
- def readOnly()
994
- end
995
- def audioProperties()
996
- end
997
- def find2()
998
- end
999
- def firstPageHeader()
1000
- end
1001
- def clear()
1002
- end
1003
- def valid?()
1004
- end
1005
- def save()
1006
- end
1007
- def tag()
1008
- end
1009
- def isWritable()
1010
- end
1011
- def find3()
1012
- end
1013
- def lastPageHeader()
1014
- end
1015
- def read_only?()
1016
- end
1017
- def isOpen()
1018
- end
1019
- def writable?()
1020
- end
1021
- def readBlock()
1022
- end
1023
- def rfind()
1024
- end
1025
- def insert()
1026
- end
1027
- def writeBlock()
1028
- end
1029
- def packet()
1030
- end
1031
- def tell()
1032
- end
1033
- def removeBlock()
1034
- end
1035
- def open?()
1036
- end
1037
- def length()
1038
- end
1039
- def isValid()
1040
- end
1041
- def streamLength()
1042
- end
1043
- def find1()
1044
- end
1045
- end
901
+ def rfind()
902
+ end
903
+ def writable?()
904
+ end
905
+ #
906
+ # This will strip the tags that match the OR-ed together TagTypes from the file. By default it strips all tags. It returns true if the tags are successfully stripped.If freeMemory is true the ID3 and APE tags will be deleted and pointers to them will be invalidated.
907
+ #
908
+ def strip(int tags,bool freeMemory)
909
+ end
910
+ def writeBlock()
911
+ end
912
+ #
913
+ # Returns a pointer to the ID3v1 tag of the file.If create is false (the default) this will return a null pointer if there is no valid ID3v1 tag. If create is true it will create an ID3v1 tag if one does not exist.The Tag is still owned by the MPEG::File and should not be deleted by the user. It will be deleted when the file (object) is destroyed.
914
+ #
915
+ #
916
+ def ID3v1Tag(bool create = false)
917
+ end
918
+ def insert()
919
+ end
920
+ def removeBlock()
921
+ end
922
+ def open?()
923
+ end
924
+ def isValid()
925
+ end
926
+ #
927
+ # Returns the position in the file of the first MPEG frame.
928
+ #
929
+ def firstFrameOffset()
930
+ end
931
+ def tell()
932
+ end
933
+ def find1()
934
+ end
935
+ def length()
936
+ end
937
+ def readOnly()
938
+ end
939
+ #
940
+ # Set the ID3v2::FrameFactory to something other than the default.ID3v2FrameFactory
941
+ #
942
+ #
943
+ def setID3v2FrameFactory( ID3v2::FrameFactory factory)
944
+ end
945
+ #
946
+ # Returns the MPEG::Properties for this file. If no audio properties were read then this will return a null pointer.
947
+ #
948
+ def audioProperties()
1046
949
  end
950
+ end
1047
951
  end
1048
952
  # <b>
1049
- # An ID3v1 implementation. .</b>
953
+ # An implementation of the APE tagging format. .</b>
1050
954
  #
1051
955
  #
1052
956
  #
1053
957
  #
1054
- module TagLib::ID3v1
958
+ module TagLib::APE
1055
959
  # <b>
1056
- # The main class in the ID3v1 implementation. .</b>
960
+ # An APE tag implementation. .</b>
1057
961
  #
1058
962
  #
1059
- # This is an implementation of the ID3v1 format. ID3v1 is both the simplist and most common of tag formats but is rather limited. Because of its pervasiveness and the way that applications have been written around the fields that it provides, the generic TagLib::Tag API is a mirror of what is provided by ID3v1.ID3v1 tags should generally only contain Latin1 information. However because many applications do not follow this rule there is now support for overriding the ID3v1 string handling using the ID3v1::StringHandler class. Please see the documentation for that class for more information.StringHandler
1060
- # Most fields are truncated to a maximum of 28-30 bytes. The truncation happens automatically when the tag is rendered.
1061
963
  #
1062
964
  #
1063
- class TagLib::ID3v1::Tag < TagLib::Tag
1064
- def isEmpty()
1065
- end
1066
- #
1067
- # Returns the genre name; if no genre is present in the tag String::null will be returned.
1068
- #
1069
- def genre()
1070
- end
965
+ class TagLib::APE::Tag < TagLib::Tag
1071
966
  def genre=()
1072
967
  end
1073
968
  #
@@ -1076,16 +971,19 @@
1076
971
  def setComment( s)
1077
972
  end
1078
973
  #
1079
- # Returns the year; if there is no year set, this will return 0.
974
+ # Removes the key item from the tag
1080
975
  #
1081
- def year()
976
+ def removeItem( key)
1082
977
  end
1083
978
  #
1084
979
  # Returns the track number; if there is no track number set, this will return 0.
1085
980
  #
1086
981
  def track()
1087
982
  end
1088
- def year=()
983
+ #
984
+ # Returns the year; if there is no year set, this will return 0.
985
+ #
986
+ def year()
1089
987
  end
1090
988
  def track=()
1091
989
  end
@@ -1095,11 +993,16 @@
1095
993
  def setGenre( s)
1096
994
  end
1097
995
  #
1098
- # Returns the track name; if no track name is present in the tag String::null will be returned.
996
+ # Adds to the item specified by key the data value. If replace is true, then all of the other values on the same key will be removed first.
1099
997
  #
1100
- def title()
998
+ def addValue( key, value,bool replace = true)
1101
999
  end
1102
- def empty?()
1000
+ #
1001
+ # Returns the track name; if no track name is present in the tag String::null will be returned.
1002
+ #
1003
+ def title()
1004
+ end
1005
+ def year=()
1103
1006
  end
1104
1007
  def title=()
1105
1008
  end
@@ -1114,10 +1017,24 @@
1114
1017
  def setYear(uint i)
1115
1018
  end
1116
1019
  #
1020
+ # Returns the track comment; if no comment is present in the tag String::null will be returned.
1021
+ #
1022
+ def comment()
1023
+ end
1024
+ def empty?()
1025
+ end
1026
+ #
1117
1027
  # Returns the artist name; if no artist name is present in the tag String::null will be returned.
1118
1028
  #
1119
1029
  def artist()
1120
1030
  end
1031
+ #
1032
+ # Sets the key item to the value of item. If an item with the key is already present, it will be replaced.
1033
+ #
1034
+ def setItem( key, Item item)
1035
+ end
1036
+ def comment=()
1037
+ end
1121
1038
  def artist=()
1122
1039
  end
1123
1040
  #
@@ -1126,22 +1043,20 @@
1126
1043
  def setArtist( s)
1127
1044
  end
1128
1045
  #
1129
- # Sets the track to i. If s is 0 then this value will be cleared.
1046
+ # Returns a pointer to the tag&apos;s footer.
1130
1047
  #
1131
- def setTrack(uint i)
1048
+ def footer()
1132
1049
  end
1133
1050
  #
1134
- # Returns the track comment; if no comment is present in the tag String::null will be returned.
1051
+ # Sets the track to i. If s is 0 then this value will be cleared.
1135
1052
  #
1136
- def comment()
1053
+ def setTrack(uint i)
1137
1054
  end
1138
1055
  #
1139
1056
  # Returns the album name; if no album name is present in the tag String::null will be returned.
1140
1057
  #
1141
1058
  def album()
1142
1059
  end
1143
- def comment=()
1144
- end
1145
1060
  #
1146
1061
  # Renders the in memory values to a ByteVector suitable for writing to the file.
1147
1062
  #
@@ -1154,249 +1069,220 @@
1154
1069
  #
1155
1070
  def setAlbum( s)
1156
1071
  end
1157
- end
1158
- end
1159
- # <b>
1160
- # A namespace containing classes for Vorbis metadata. .</b>
1161
1072
  #
1073
+ # Returns a reference to the item list map. This is an ItemListMap of all of the items in the tag.This is the most powerfull structure for accessing the items of the tag.You should not modify this data structure directly, instead use setItem() and removeItem().
1074
+ #
1162
1075
  #
1163
- #
1076
+ def itemListMap()
1077
+ end
1078
+ def isEmpty()
1079
+ end
1164
1080
  #
1165
- module TagLib::Vorbis
1166
- # <b>
1167
- # An implementation of audio property reading for Ogg Vorbis. .</b>
1081
+ # Returns the genre name; if no genre is present in the tag String::null will be returned.
1082
+ #
1083
+ def genre()
1084
+ end
1085
+ end
1086
+ # <b>
1087
+ # An implementation of APE-items. .</b>
1168
1088
  #
1169
1089
  #
1170
- # This reads the data from an Ogg Vorbis stream found in the AudioProperties API.
1090
+ # This class provides the features of items in the APEv2 standard.
1171
1091
  #
1172
- class TagLib::Vorbis::Properties < TagLib::AudioProperties
1092
+ class TagLib::APE::Item
1173
1093
  #
1174
- # Returns the nominal bitrate as read from the Vorbis identification header.
1094
+ # Set the item to read-only.
1175
1095
  #
1176
- def bitrateNominal()
1096
+ def setReadOnly(bool readOnly)
1177
1097
  end
1178
1098
  #
1179
- # Returns the minimum bitrate as read from the Vorbis identification header.
1099
+ # Returns the binary value.DeprecatedThis will be removed in the next binary incompatible version as it is not kept in sync with the things that are set using setValue() and friends.
1180
1100
  #
1181
- def bitrateMinimum()
1101
+ def value()
1182
1102
  end
1183
1103
  #
1184
- # Returns the most appropriate bit rate for the file in kb/s. For constant bitrate formats this is simply the bitrate of the file. For variable bitrate formats this is either the average or nominal bitrate.
1104
+ # Parse the item from the ByteVector data.
1185
1105
  #
1186
- def bitrate()
1106
+ def parse( ByteVector data)
1187
1107
  end
1188
1108
  #
1189
- # Returns the sample rate in Hz.
1109
+ # Returns the list of values.
1190
1110
  #
1191
- def sampleRate()
1111
+ def values()
1192
1112
  end
1193
1113
  #
1194
- # Returns the Vorbis version, currently &quot;0&quot; (as specified by the spec).
1114
+ # Appends values to extend the current list of values.toStringList()
1115
+ #
1195
1116
  #
1196
- def vorbisVersion()
1117
+ def appendValues( List values)
1197
1118
  end
1198
1119
  #
1199
- # Returns the number of audio channels.
1120
+ # Returns the key.
1200
1121
  #
1201
- def channels()
1122
+ def key()
1202
1123
  end
1203
1124
  #
1204
- # Returns the maximum bitrate as read from the Vorbis identification header.
1125
+ # Return true if the item is read-only.
1205
1126
  #
1206
- def bitrateMaximum()
1127
+ def isReadOnly()
1207
1128
  end
1208
1129
  #
1209
- # Returns the length of the file in seconds.
1130
+ # Sets the key for the item to key.
1210
1131
  #
1211
- def length()
1132
+ def setKey( key)
1212
1133
  end
1213
- end
1214
- # <b>
1215
- # An implementation of Ogg::File with Vorbis specific methods. .</b>
1216
- #
1217
1134
  #
1218
- # This is the central class in the Ogg Vorbis metadata processing collection of classes. It&apos;s built upon Ogg::File which handles processing of the Ogg logical bitstream and breaking it down into pages which are handled by the codec implementations, in this case Vorbis specifically.
1135
+ # Returns the value as a single string. In case of multiple strings, the first is returned.
1219
1136
  #
1220
- class TagLib::Vorbis::File < TagLib::Ogg::File
1221
- def setPacket()
1222
- end
1223
- def name()
1224
- end
1225
- def seek()
1226
- end
1227
- def readOnly()
1137
+ def toString()
1228
1138
  end
1229
1139
  #
1230
- # Returns the Vorbis::Properties for this file. If no audio properties were read then this will return a null pointer.
1140
+ # Returns the size of the full item.
1231
1141
  #
1232
- def audioProperties()
1233
- end
1234
- def find2()
1235
- end
1236
- def firstPageHeader()
1237
- end
1238
- def clear()
1239
- end
1240
- def valid?()
1142
+ def size()
1241
1143
  end
1242
1144
  #
1243
- # Save the file and its associated tags. This should be reimplemented in the concrete subclasses. Returns true if the save succeeds.On UNIX multiple processes are able to write to the same file at the same time. This can result in serious file corruption. If you are developing a program that makes use of TagLib from multiple processes you must insure that you are only doing writes to a particular file from one of them.
1145
+ # Sets the type of the item to type.ItemTypes
1244
1146
  #
1245
1147
  #
1246
- def save()
1148
+ def setType(ItemTypes type)
1247
1149
  end
1248
1150
  #
1249
- # Returns the XiphComment for this file. XiphComment implements the tag interface, so this serves as the reimplementation of TagLib::File::tag().
1151
+ # Sets the value of the item to value and clears any previous contents.toString()
1152
+ #
1250
1153
  #
1251
- def tag()
1252
- end
1253
- def isWritable()
1254
- end
1255
- def find3()
1256
- end
1257
- def lastPageHeader()
1258
- end
1259
- def read_only?()
1260
- end
1261
- def isOpen()
1262
- end
1263
- def writable?()
1264
- end
1265
- def readBlock()
1266
- end
1267
- def rfind()
1268
- end
1269
- def insert()
1270
- end
1271
- def writeBlock()
1272
- end
1273
- def packet()
1274
- end
1275
- def tell()
1154
+ def setValue( value)
1276
1155
  end
1277
- def removeBlock()
1156
+ #
1157
+ # Deprecatedvalues
1158
+ #
1159
+ #
1160
+ def toStringList()
1278
1161
  end
1279
- def open?()
1162
+ #
1163
+ # Sets the value of the item to the list of values in value and clears any previous contents.toStringList()
1164
+ #
1165
+ #
1166
+ def setValues( List values)
1280
1167
  end
1281
- def length()
1168
+ #
1169
+ # Render the item to a ByteVector.
1170
+ #
1171
+ def render()
1282
1172
  end
1283
- def isValid()
1173
+ #
1174
+ # Returns if the item has any real content.
1175
+ #
1176
+ def isEmpty()
1284
1177
  end
1285
- def find1()
1178
+ #
1179
+ # Appends value to create (or extend) the current list of values.toString()
1180
+ #
1181
+ #
1182
+ def appendValue( value)
1286
1183
  end
1287
1184
  end
1288
- end
1289
1185
  # <b>
1290
- # An implementation of TagLib::File with MPEG (MP3) specific methods. .</b>
1291
- #
1186
+ # An implementation of APE footers. .</b>
1292
1187
  #
1293
- #
1294
1188
  #
1295
- module TagLib::MPEG
1296
- # <b>
1297
- # An implementation of audio property reading for MP3. .</b>
1189
+ # This class implements APE footers (and headers). It attempts to follow, both semantically and programatically, the structure specified in the APE v2.0 standard. The API is based on the properties of APE footer and headers specified there.
1298
1190
  #
1191
+ class TagLib::APE::Footer
1299
1192
  #
1300
- # This reads the data from an MPEG Layer III stream found in the AudioProperties API.
1193
+ # Returns true if a header is present in the tag.
1301
1194
  #
1302
- class TagLib::MPEG::Properties < TagLib::AudioProperties
1195
+ def headerPresent()
1196
+ end
1303
1197
  #
1304
- # Returns true if the copyrighted bit is set.
1198
+ # Set the item count to s. itemCount()
1199
+ #
1305
1200
  #
1306
- def isCopyrighted()
1201
+ def setItemCount(uint s)
1307
1202
  end
1308
1203
  #
1309
- # Returns the layer version. This will be between the values 1-3.
1204
+ # Renders the footer back to binary format.
1310
1205
  #
1311
- def layer()
1206
+ def renderFooter()
1312
1207
  end
1313
1208
  #
1314
- # Returns the MPEG Version of the file.
1209
+ # Returns the version number. (Note: This is the 1000 or 2000.)
1315
1210
  #
1316
1211
  def version()
1317
1212
  end
1318
1213
  #
1319
- # Returns true if the &quot;original&quot; bit is set.
1214
+ # Returns true if a footer is present in the tag.
1320
1215
  #
1321
- def isOriginal()
1216
+ def footerPresent()
1322
1217
  end
1323
1218
  #
1324
- # Returns the most appropriate bit rate for the file in kb/s. For constant bitrate formats this is simply the bitrate of the file. For variable bitrate formats this is either the average or nominal bitrate.
1219
+ # Returns the tag size in bytes. This is the size of the frame content and footer. The size of the entire tag will be this plus the header size, if present.completeTagSize()
1220
+ #
1325
1221
  #
1326
- def bitrate()
1222
+ def tagSize()
1327
1223
  end
1328
1224
  #
1329
- # Returns true if the MPEG protection bit is enabled.
1225
+ # Renders the header corresponding to the footer. If headerPresent is set to false, it returns an empty ByteVector.
1330
1226
  #
1331
- def protectionEnabled()
1227
+ def renderHeader()
1332
1228
  end
1333
1229
  #
1334
- # Returns a pointer to the XingHeader if one exists or null if no XingHeader was found.
1230
+ # Returns true this is actually the header.
1335
1231
  #
1336
- def xingHeader()
1232
+ def isHeader()
1337
1233
  end
1338
1234
  #
1339
- # Returns the sample rate in Hz.
1235
+ # Returns the tag size, including if present, the header size.tagSize()
1236
+ #
1340
1237
  #
1341
- def sampleRate()
1238
+ def completeTagSize()
1342
1239
  end
1343
1240
  #
1344
- # Returns the number of audio channels.
1241
+ # Sets whether the header should be rendered or not
1345
1242
  #
1346
- def channels()
1243
+ def setHeaderPresent(bool b)
1347
1244
  end
1348
1245
  #
1349
- # Returns the channel mode for this frame.
1246
+ # Set the tag size to s. tagSize()
1247
+ #
1350
1248
  #
1351
- def channelMode()
1249
+ def setTagSize(uint s)
1352
1250
  end
1353
1251
  #
1354
- # Returns the length of the file in seconds.
1252
+ # Returns the number of items in the tag.
1355
1253
  #
1356
- def length()
1254
+ def itemCount()
1255
+ end
1256
+ #
1257
+ # Sets the data that will be used as the footer. 32 bytes, starting from data will be used.
1258
+ #
1259
+ def setData( ByteVector data)
1357
1260
  end
1358
1261
  end
1262
+ end
1359
1263
  # <b>
1360
- # An implementation of MP3 frame headers. .</b>
1264
+ # An implementation of MPC metadata. .</b>
1361
1265
  #
1362
1266
  #
1363
- # This is an implementation of MPEG Layer III headers. The API follows more or less the binary format of these headers. I&apos;ve used this document as a reference.
1267
+ # This is implementation of MPC metadata.This supports ID3v1 and APE (v1 and v2) style comments as well as reading stream properties from the file. ID3v2 tags are invalid in MPC-files, but will be skipped and ignored.
1364
1268
  #
1365
- class TagLib::MPEG::Header
1269
+ module TagLib::MPC
1270
+ # <b>
1271
+ # An implementation of audio property reading for MPC. .</b>
1366
1272
  #
1367
- # Returns true if the copyrighted bit is set.
1368
1273
  #
1369
- def isCopyrighted()
1370
- end
1371
- #
1372
- # Returns the layer version. This will be between the values 1-3.
1373
- #
1374
- def layer()
1375
- end
1376
- #
1377
- # Returns the MPEG Version of the header.
1378
- #
1379
- def version()
1380
- end
1381
- #
1382
- # Returns true if the &quot;original&quot; bit is set.
1274
+ # This reads the data from an MPC stream found in the AudioProperties API.
1383
1275
  #
1384
- def isOriginal()
1385
- end
1276
+ class TagLib::MPC::Properties < TagLib::AudioProperties
1386
1277
  #
1387
- # Returns the bitrate encoded in the header.
1278
+ # Returns the most appropriate bit rate for the file in kb/s. For constant bitrate formats this is simply the bitrate of the file. For variable bitrate formats this is either the average or nominal bitrate.
1388
1279
  #
1389
1280
  def bitrate()
1390
1281
  end
1391
1282
  #
1392
- # Returns true if the MPEG protection bit is enabled.
1393
- #
1394
- def protectionEnabled()
1395
- end
1396
- #
1397
- # Returns the frame length.
1283
+ # Returns the version of the bitstream (SV4-SV7)
1398
1284
  #
1399
- def frameLength()
1285
+ def mpcVersion()
1400
1286
  end
1401
1287
  #
1402
1288
  # Returns the sample rate in Hz.
@@ -1404,631 +1290,615 @@
1404
1290
  def sampleRate()
1405
1291
  end
1406
1292
  #
1407
- # Returns true if the frame is padded.
1408
- #
1409
- def isPadded()
1410
- end
1411
- #
1412
- # Returns the number of frames per sample.
1413
- #
1414
- def samplesPerFrame()
1415
- end
1416
- #
1417
- # Returns the channel mode for this frame.
1418
- #
1419
- def channelMode()
1420
- end
1421
- #
1422
- # Returns true if the frame is at least an appropriate size and has legal values.
1423
- #
1424
- def isValid()
1425
- end
1426
- end
1427
- # <b>
1428
- # An implementation of the Xing VBR headers. .</b>
1429
- #
1430
- #
1431
- # This is a minimalistic implementation of the Xing VBR headers. Xing headers are often added to VBR (variable bit rate) MP3 streams to make it easy to compute the length and quality of a VBR stream. Our implementation is only concerned with the total size of the stream (so that we can calculate the total playing time and the average bitrate). It uses this text and the XMMS sources as references.
1432
- #
1433
- class TagLib::MPEG::XingHeader
1434
- #
1435
- # Returns the total number of frames.
1436
- #
1437
- def totalFrames()
1438
- end
1439
- #
1440
- # Returns the total size of stream in bytes.
1293
+ # Returns the number of audio channels.
1441
1294
  #
1442
- def totalSize()
1295
+ def channels()
1443
1296
  end
1444
1297
  #
1445
- # Returns true if the data was parsed properly and if there is a valid Xing header present.
1298
+ # Returns the length of the file in seconds.
1446
1299
  #
1447
- def isValid()
1300
+ def length()
1448
1301
  end
1449
1302
  end
1450
1303
  # <b>
1451
- # An MPEG file class with some useful methods specific to MPEG. .</b>
1304
+ # An implementation of TagLib::File with MPC specific methods. .</b>
1452
1305
  #
1453
1306
  #
1454
- # This implements the generic TagLib::File API and additionally provides access to properties that are distinct to MPEG files, notably access to the different ID3 tags.
1307
+ # This implements and provides an interface for MPC files to the TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing the abstract TagLib::File API as well as providing some additional information specific to MPC files. The only invalid tag combination supported is an ID3v1 tag after an APE tag.
1455
1308
  #
1456
- class TagLib::MPEG::File < TagLib::File
1309
+ class TagLib::MPC::File < TagLib::File
1457
1310
  def name()
1458
1311
  end
1459
1312
  def seek()
1460
1313
  end
1461
- def readOnly()
1314
+ def find2()
1315
+ end
1316
+ def valid?()
1462
1317
  end
1463
1318
  #
1464
- # Returns a pointer to the APE tag of the file.If create is false (the default) this will return a null pointer if there is no valid APE tag. If create is true it will create an APE tag if one does not exist.The Tag is still owned by the MPEG::File and should not be deleted by the user. It will be deleted when the file (object) is destroyed.
1319
+ # Returns a pointer to the APE tag of the file.If create is false (the default) this will return a null pointer if there is no valid APE tag. If create is true it will create a APE tag if one does not exist. If there is already an ID3v1 tag, thes new APE tag will be placed before it.The Tag is still owned by the APE::File and should not be deleted by the user. It will be deleted when the file (object) is destroyed.
1465
1320
  #
1466
1321
  #
1467
1322
  def APETag(bool create = false)
1468
1323
  end
1469
1324
  #
1470
- # Returns the MPEG::Properties for this file. If no audio properties were read then this will return a null pointer.
1325
+ # Saves the file.
1471
1326
  #
1472
- def audioProperties()
1327
+ def save()
1473
1328
  end
1474
- #
1475
- # Returns the position in the file of the previous MPEG frame, using the current position as start
1476
- #
1477
- def previousFrameOffset(long position)
1329
+ def isWritable()
1478
1330
  end
1479
- def find2()
1331
+ def find3()
1480
1332
  end
1481
1333
  def clear()
1482
1334
  end
1483
- def valid?()
1335
+ def read_only?()
1484
1336
  end
1485
1337
  #
1486
- # Save the file. This will attempt to save all of the tag types that are specified by OR-ing together TagTypes values. The save() method above uses AllTags. This returns true if saving was successful.If stripOthers is true this strips all tags not included in the mask, but does not modify them in memory, so later calls to save() which make use of these tags will remain valid. This also strips empty tags.
1338
+ # Returns the Tag for this file. This will be an APE tag, an ID3v1 tag or a combination of the two.
1487
1339
  #
1488
- def save(int tags,bool stripOthers)
1340
+ def tag()
1489
1341
  end
1490
- #
1491
- # Returns a pointer to the ID3v2 tag of the file.If create is false (the default) this will return a null pointer if there is no valid ID3v2 tag. If create is true it will create an ID3v2 tag if one does not exist.The Tag is still owned by the MPEG::File and should not be deleted by the user. It will be deleted when the file (object) is destroyed.
1492
- #
1493
- #
1494
- def ID3v2Tag(bool create = false)
1342
+ def isOpen()
1495
1343
  end
1496
- #
1497
- # Returns a pointer to a tag that is the union of the ID3v2 and ID3v1 tags. The ID3v2 tag is given priority in reading the information -- if requested information exists in both the ID3v2 tag and the ID3v1 tag, the information from the ID3v2 tag will be returned.If you would like more granular control over the content of the tags, with the concession of generality, use the tag-type specific calls.As this tag is not implemented as an ID3v2 tag or an ID3v1 tag, but a union of the two this pointer may not be cast to the specific tag types.
1498
- # ID3v1Tag() ID3v2Tag() APETag()
1499
- #
1500
- #
1501
- def tag()
1344
+ def readBlock()
1502
1345
  end
1503
- def isWritable()
1346
+ def rfind()
1504
1347
  end
1505
1348
  #
1506
- # Returns the position in the file of the last MPEG frame.
1349
+ # Deprecatedstrip
1350
+ #
1507
1351
  #
1508
- def lastFrameOffset()
1509
- end
1510
- def find3()
1511
- end
1512
- def read_only?()
1513
- end
1514
- def isOpen()
1352
+ def remove(int tags = AllTags)
1515
1353
  end
1516
1354
  def writable?()
1517
1355
  end
1518
- def readBlock()
1519
- end
1520
1356
  #
1521
- # This will strip the tags that match the OR-ed together TagTypes from the file. By default it strips all tags. It returns true if the tags are successfully stripped.If freeMemory is true the ID3 and APE tags will be deleted and pointers to them will be invalidated.
1357
+ # This will remove the tags that match the OR-ed together TagTypes from the file. By default it removes all tags.This will also invalidate pointers to the tags as their memory will be freed.
1358
+ # In order to make the removal permanent save() still needs to be called.
1359
+ #
1522
1360
  #
1523
- def strip(int tags,bool freeMemory)
1361
+ def strip(int tags = AllTags)
1362
+ end
1363
+ def writeBlock()