taglib-ruby 0.5.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.yardopts +1 -1
- data/CHANGES.md +11 -0
- data/LICENSE.txt +0 -2
- data/README.md +7 -9
- data/docs/taglib/base.rb +35 -7
- data/docs/taglib/id3v2.rb +37 -5
- data/docs/taglib/mp4.rb +267 -0
- data/docs/taglib/mpeg.rb +23 -8
- data/ext/taglib_base/includes.i +2 -2
- data/ext/taglib_base/taglib_base.i +3 -0
- data/ext/taglib_base/taglib_base_wrap.cxx +11 -12
- data/ext/taglib_flac/taglib_flac_wrap.cxx +21 -25
- data/ext/taglib_id3v1/taglib_id3v1_wrap.cxx +4 -8
- data/ext/taglib_id3v2/taglib_id3v2.i +3 -0
- data/ext/taglib_id3v2/taglib_id3v2_wrap.cxx +528 -69
- data/ext/taglib_mp4/extconf.rb +4 -0
- data/ext/taglib_mp4/taglib_mp4.i +225 -0
- data/ext/taglib_mp4/taglib_mp4_wrap.cxx +4830 -0
- data/ext/taglib_mpeg/taglib_mpeg.i +15 -0
- data/ext/taglib_mpeg/taglib_mpeg_wrap.cxx +174 -88
- data/ext/taglib_ogg/taglib_ogg_wrap.cxx +2 -6
- data/ext/taglib_vorbis/taglib_vorbis_wrap.cxx +8 -12
- data/lib/taglib.rb +1 -0
- data/lib/taglib/mp4.rb +33 -0
- data/lib/taglib/version.rb +2 -2
- data/taglib-ruby.gemspec +19 -3
- data/tasks/ext.rake +3 -0
- data/tasks/swig.rake +6 -1
- data/test/base_test.rb +11 -0
- data/test/data/Makefile +5 -2
- data/test/data/flac-create.cpp +2 -22
- data/test/data/get_picture_data.cpp +22 -0
- data/test/data/mp4-create.cpp +38 -0
- data/test/data/mp4.m4a +0 -0
- data/test/fileref_write_test.rb +9 -0
- data/test/flac_file_test.rb +2 -1
- data/test/id3v2_header_test.rb +61 -0
- data/test/id3v2_write_test.rb +17 -0
- data/test/mp4_file_test.rb +51 -0
- data/test/mp4_file_write_test.rb +66 -0
- data/test/mp4_items_test.rb +183 -0
- metadata +39 -8
data/test/id3v2_write_test.rb
CHANGED
@@ -54,6 +54,23 @@ class TestID3v2Write < Test::Unit::TestCase
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
should "be able to save ID3v2.3 when compiled against TagLib >= 1.8" do
|
58
|
+
if TagLib::TAGLIB_MAJOR_VERSION > 1 ||
|
59
|
+
(TagLib::TAGLIB_MAJOR_VERSION == 1 && TagLib::TAGLIB_MINOR_VERSION >= 8)
|
60
|
+
success = @file.save(TagLib::MPEG::File::ID3v2, true, 3)
|
61
|
+
assert_equal true, success
|
62
|
+
@file.close
|
63
|
+
@file = nil
|
64
|
+
|
65
|
+
header = File.open(OUTPUT_FILE, 'rb') do |f|
|
66
|
+
f.read(5)
|
67
|
+
end
|
68
|
+
# 3 stands for v2.3
|
69
|
+
s = "ID3" + 3.chr + 0.chr
|
70
|
+
assert_equal s, header
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
57
74
|
should "be able to set fields to nil" do
|
58
75
|
tag = @file.id3v2_tag
|
59
76
|
tag.title = nil
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class MP4FileTest < Test::Unit::TestCase
|
4
|
+
context "TagLib::MP4::File" do
|
5
|
+
setup do
|
6
|
+
@file = TagLib::MP4::File.new("test/data/mp4.m4a")
|
7
|
+
@tag = @file.tag
|
8
|
+
end
|
9
|
+
|
10
|
+
should "contain basic tag information" do
|
11
|
+
assert_equal "Title", @tag.title
|
12
|
+
assert_equal "Artist", @tag.artist
|
13
|
+
assert_equal "Album", @tag.album
|
14
|
+
assert_equal "Comment", @tag.comment
|
15
|
+
assert_equal "Pop", @tag.genre
|
16
|
+
assert_equal 2011, @tag.year
|
17
|
+
assert_equal 7, @tag.track
|
18
|
+
assert_equal false, @tag.empty?
|
19
|
+
end
|
20
|
+
|
21
|
+
context "audio properties" do
|
22
|
+
setup do
|
23
|
+
@properties = @file.audio_properties
|
24
|
+
end
|
25
|
+
|
26
|
+
should "exist" do
|
27
|
+
assert_not_nil @properties
|
28
|
+
end
|
29
|
+
|
30
|
+
should "contain basic information" do
|
31
|
+
assert_equal 1, @properties.length
|
32
|
+
assert_equal 54, @properties.bitrate
|
33
|
+
assert_equal 44100, @properties.sample_rate
|
34
|
+
# The test file is mono, this appears to be a TagLib bug
|
35
|
+
assert_equal 2, @properties.channels
|
36
|
+
end
|
37
|
+
|
38
|
+
should "contain mp4-specific information" do
|
39
|
+
assert_equal 16, @properties.bits_per_sample
|
40
|
+
# Properties#encrypted? raises a NoMethodError
|
41
|
+
# assert_equal false, @properties.encrypted?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
teardown do
|
46
|
+
@file.close
|
47
|
+
@file = nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class MP4FileWriteTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
SAMPLE_FILE = "test/data/mp4.m4a"
|
6
|
+
OUTPUT_FILE = "test/data/output.m4a"
|
7
|
+
PICTURE_FILE = "test/data/globe_east_540.jpg"
|
8
|
+
|
9
|
+
def reloaded
|
10
|
+
TagLib::MP4::File.open(OUTPUT_FILE, false) do |file|
|
11
|
+
yield file
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "TagLib::MP4::File" do
|
16
|
+
setup do
|
17
|
+
FileUtils.cp SAMPLE_FILE, OUTPUT_FILE
|
18
|
+
@file = TagLib::MP4::File.new(OUTPUT_FILE, false)
|
19
|
+
end
|
20
|
+
|
21
|
+
should "be able to save the title" do
|
22
|
+
tag = @file.tag
|
23
|
+
assert_not_nil tag
|
24
|
+
tag.title = "New Title"
|
25
|
+
success = @file.save
|
26
|
+
assert success
|
27
|
+
@file.close
|
28
|
+
@file = nil
|
29
|
+
|
30
|
+
written_title = reloaded do |file|
|
31
|
+
file.tag.title
|
32
|
+
end
|
33
|
+
assert_equal "New Title", written_title
|
34
|
+
end
|
35
|
+
|
36
|
+
should "be able to add and save new cover art" do
|
37
|
+
item_list_map = @file.tag.item_list_map
|
38
|
+
cover_art_list = item_list_map['covr'].to_cover_art_list
|
39
|
+
assert_equal 1, cover_art_list.size
|
40
|
+
|
41
|
+
data = File.open(PICTURE_FILE, 'rb') { |f| f.read }
|
42
|
+
new_cover_art = TagLib::MP4::CoverArt.new(TagLib::MP4::CoverArt::JPEG, data)
|
43
|
+
|
44
|
+
cover_art_list << new_cover_art
|
45
|
+
item_list_map.insert('covr', TagLib::MP4::Item.from_cover_art_list(cover_art_list))
|
46
|
+
assert_equal 2, item_list_map['covr'].to_cover_art_list.size
|
47
|
+
|
48
|
+
success = @file.save
|
49
|
+
assert success
|
50
|
+
|
51
|
+
reloaded do |file|
|
52
|
+
written_cover_art = file.tag.item_list_map['covr'].to_cover_art_list.last
|
53
|
+
assert_equal TagLib::MP4::CoverArt::JPEG, written_cover_art.format
|
54
|
+
assert_equal data, written_cover_art.data
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
teardown do
|
59
|
+
if @file
|
60
|
+
@file.close
|
61
|
+
@file = nil
|
62
|
+
end
|
63
|
+
FileUtils.rm OUTPUT_FILE
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,183 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
3
|
+
|
4
|
+
class MP4ItemsTest < Test::Unit::TestCase
|
5
|
+
ITUNES_LEADER = "\xC2\xA9"
|
6
|
+
|
7
|
+
context "The mp4.m4a file's items" do
|
8
|
+
setup do
|
9
|
+
@file = TagLib::MP4::File.new("test/data/mp4.m4a")
|
10
|
+
@tag = @file.tag
|
11
|
+
@item_list_map = @file.tag.item_list_map
|
12
|
+
@item_keys = [
|
13
|
+
"cover", "#{ITUNES_LEADER}nam", "#{ITUNES_LEADER}ART", "#{ITUNES_LEADER}alb",
|
14
|
+
"#{ITUNES_LEADER}cmt", "#{ITUNES_LEADER}gen", "#{ITUNES_LEADER}day",
|
15
|
+
"trkn", "#{ITUNES_LEADER}too", "#{ITUNES_LEADER}cpy"
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
context "item_list_map" do
|
20
|
+
should "exist" do
|
21
|
+
assert_not_nil @item_list_map
|
22
|
+
end
|
23
|
+
|
24
|
+
should "not be empty" do
|
25
|
+
assert_equal false, @item_list_map.empty?
|
26
|
+
end
|
27
|
+
|
28
|
+
should "contain 10 items" do
|
29
|
+
assert_equal @item_keys.count, @item_list_map.size
|
30
|
+
end
|
31
|
+
|
32
|
+
should "have keys" do
|
33
|
+
assert_equal true, @item_list_map.contains("trkn")
|
34
|
+
assert_equal true, @item_list_map.has_key?("#{ITUNES_LEADER}too")
|
35
|
+
assert_equal true, @item_list_map.include?("#{ITUNES_LEADER}cpy")
|
36
|
+
assert_equal false, @item_list_map.include?("none such key")
|
37
|
+
end
|
38
|
+
|
39
|
+
should "look up keys" do
|
40
|
+
assert_nil @item_list_map["none such key"]
|
41
|
+
assert_equal ["Title"], @item_list_map["#{ITUNES_LEADER}nam"].to_string_list
|
42
|
+
end
|
43
|
+
|
44
|
+
should "be clearable" do
|
45
|
+
assert_equal 10, @item_list_map.size
|
46
|
+
comment = @item_list_map["#{ITUNES_LEADER}cmt"]
|
47
|
+
@item_list_map.clear
|
48
|
+
assert_equal true, @item_list_map.empty?
|
49
|
+
begin
|
50
|
+
comment.to_string_list
|
51
|
+
flunk("Should have raised ObjectPreviouslyDeleted.")
|
52
|
+
rescue => e
|
53
|
+
assert_equal "ObjectPreviouslyDeleted", e.class.to_s
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
should "be convertable to an array" do
|
58
|
+
array = @item_list_map.to_a
|
59
|
+
assert_equal 10, array.count
|
60
|
+
array.each do |object|
|
61
|
+
assert_equal Array, object.class
|
62
|
+
assert_equal 2, object.count
|
63
|
+
assert_equal String, object.first.class
|
64
|
+
assert_equal TagLib::MP4::Item, object.last.class
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
should "be removable" do
|
70
|
+
assert_equal 10, @item_list_map.size
|
71
|
+
title = @item_list_map["#{ITUNES_LEADER}nam"]
|
72
|
+
@item_list_map.erase("#{ITUNES_LEADER}nam")
|
73
|
+
assert_equal 9, @item_list_map.size
|
74
|
+
begin
|
75
|
+
title.to_string_list
|
76
|
+
flunk("Should have raised ObjectPreviouslyDeleted.")
|
77
|
+
rescue => e
|
78
|
+
assert_equal "ObjectPreviouslyDeleted", e.class.to_s
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "inserting items" do
|
83
|
+
should "insert a new item" do
|
84
|
+
new_title = TagLib::MP4::Item.from_string_list(['new title'])
|
85
|
+
@item_list_map.insert("#{ITUNES_LEADER}nam", new_title)
|
86
|
+
new_title = nil
|
87
|
+
GC.start
|
88
|
+
assert_equal ['new title'], @item_list_map["#{ITUNES_LEADER}nam"].to_string_list
|
89
|
+
end
|
90
|
+
|
91
|
+
should "unlink items that get replaced" do
|
92
|
+
title = @item_list_map["#{ITUNES_LEADER}nam"]
|
93
|
+
@item_list_map.insert("#{ITUNES_LEADER}nam", TagLib::MP4::Item.from_int(1))
|
94
|
+
begin
|
95
|
+
title.to_string_list
|
96
|
+
flunk("Should have raised ObjectPreviouslyDeleted.")
|
97
|
+
rescue => e
|
98
|
+
assert_equal "ObjectPreviouslyDeleted", e.class.to_s
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context "TagLib::MP4::Item" do
|
104
|
+
should "be creatable from an int" do
|
105
|
+
item = TagLib::MP4::Item.from_int(-42)
|
106
|
+
assert_equal TagLib::MP4::Item, item.class
|
107
|
+
assert_equal -42, item.to_int
|
108
|
+
end
|
109
|
+
|
110
|
+
should "be creatable from a boolean" do
|
111
|
+
item = TagLib::MP4::Item.from_bool(false)
|
112
|
+
assert_equal TagLib::MP4::Item, item.class
|
113
|
+
assert_equal false, item.to_bool
|
114
|
+
end
|
115
|
+
|
116
|
+
context ".from_int_pair" do
|
117
|
+
should "be creatable from a pair of ints" do
|
118
|
+
item = TagLib::MP4::Item.from_int_pair([123, 456])
|
119
|
+
assert_equal TagLib::MP4::Item, item.class
|
120
|
+
assert_equal [123, 456], item.to_int_pair
|
121
|
+
end
|
122
|
+
|
123
|
+
should "raise an error when passed something other than an Array" do
|
124
|
+
begin
|
125
|
+
TagLib::MP4::Item.from_int_pair(1)
|
126
|
+
flunk("Should have raised ArgumentError.")
|
127
|
+
rescue => e
|
128
|
+
assert_equal "ArgumentError", e.class.to_s
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
should "raise an error when passed an Array with more than two elements" do
|
133
|
+
begin
|
134
|
+
TagLib::MP4::Item.from_int_pair([1, 2, 3])
|
135
|
+
flunk("Should have raised ArgumentError.")
|
136
|
+
rescue => e
|
137
|
+
assert_equal "ArgumentError", e.class.to_s
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
should "raise an error when passed an Array with less than two elements" do
|
142
|
+
begin
|
143
|
+
TagLib::MP4::Item.from_int_pair([1])
|
144
|
+
flunk("Should have raised ArgumentError.")
|
145
|
+
rescue => e
|
146
|
+
assert_equal "ArgumentError", e.class.to_s
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
context "created from an array of strings" do
|
152
|
+
should "interpreted as strings with an encoding" do
|
153
|
+
item = TagLib::MP4::Item.from_string_list(["héllo"])
|
154
|
+
assert_equal TagLib::MP4::Item, item.class
|
155
|
+
assert_equal ["héllo"], item.to_string_list
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
should "be creatable from a CoverArt list" do
|
160
|
+
cover_art = TagLib::MP4::CoverArt.new(TagLib::MP4::CoverArt::JPEG, 'foo')
|
161
|
+
item = TagLib::MP4::Item.from_cover_art_list([cover_art])
|
162
|
+
assert_equal TagLib::MP4::Item, item.class
|
163
|
+
new_cover_art = item.to_cover_art_list.first
|
164
|
+
assert_equal 'foo', new_cover_art.data
|
165
|
+
assert_equal TagLib::MP4::CoverArt::JPEG, new_cover_art.format
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
context "TagLib::MP4::CoverArt" do
|
170
|
+
should "be creatable from a string" do
|
171
|
+
cover_art = TagLib::MP4::CoverArt.new(TagLib::MP4::CoverArt::JPEG, 'foo')
|
172
|
+
assert_equal TagLib::MP4::CoverArt::JPEG, cover_art.format
|
173
|
+
assert_equal 'foo', cover_art.data
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
teardown do
|
178
|
+
@file.close
|
179
|
+
@file = nil
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taglib-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Robin Stocker
|
9
|
+
- Jacob Vosmaer
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2013-04-26 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: bundler
|
@@ -18,7 +19,7 @@ dependencies:
|
|
18
19
|
requirements:
|
19
20
|
- - ~>
|
20
21
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.
|
22
|
+
version: '1.2'
|
22
23
|
type: :development
|
23
24
|
prerelease: false
|
24
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +27,7 @@ dependencies:
|
|
26
27
|
requirements:
|
27
28
|
- - ~>
|
28
29
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.
|
30
|
+
version: '1.2'
|
30
31
|
- !ruby/object:Gem::Dependency
|
31
32
|
name: rake-compiler
|
32
33
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,6 +76,22 @@ dependencies:
|
|
75
76
|
- - ~>
|
76
77
|
- !ruby/object:Gem::Version
|
77
78
|
version: '0.7'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: kramdown
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ~>
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '1.0'
|
87
|
+
type: :development
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ~>
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '1.0'
|
78
95
|
description: ! 'Ruby interface for the taglib C++ library, for reading and writing
|
79
96
|
|
80
97
|
meta-data (tags) of many audio formats.
|
@@ -96,6 +113,7 @@ extensions:
|
|
96
113
|
- ext/taglib_ogg/extconf.rb
|
97
114
|
- ext/taglib_vorbis/extconf.rb
|
98
115
|
- ext/taglib_flac/extconf.rb
|
116
|
+
- ext/taglib_mp4/extconf.rb
|
99
117
|
extra_rdoc_files:
|
100
118
|
- CHANGES.md
|
101
119
|
- LICENSE.txt
|
@@ -113,6 +131,7 @@ files:
|
|
113
131
|
- docs/taglib/flac.rb
|
114
132
|
- docs/taglib/id3v1.rb
|
115
133
|
- docs/taglib/id3v2.rb
|
134
|
+
- docs/taglib/mp4.rb
|
116
135
|
- docs/taglib/mpeg.rb
|
117
136
|
- docs/taglib/ogg.rb
|
118
137
|
- docs/taglib/vorbis.rb
|
@@ -121,6 +140,7 @@ files:
|
|
121
140
|
- ext/taglib_base/includes.i
|
122
141
|
- ext/taglib_base/taglib_base.i
|
123
142
|
- ext/taglib_base/taglib_base_wrap.cxx
|
143
|
+
- ext/taglib_flac/extconf.rb
|
124
144
|
- ext/taglib_flac/taglib_flac.i
|
125
145
|
- ext/taglib_flac/taglib_flac_wrap.cxx
|
126
146
|
- ext/taglib_id3v1/extconf.rb
|
@@ -130,6 +150,9 @@ files:
|
|
130
150
|
- ext/taglib_id3v2/relativevolumeframe.i
|
131
151
|
- ext/taglib_id3v2/taglib_id3v2.i
|
132
152
|
- ext/taglib_id3v2/taglib_id3v2_wrap.cxx
|
153
|
+
- ext/taglib_mp4/extconf.rb
|
154
|
+
- ext/taglib_mp4/taglib_mp4.i
|
155
|
+
- ext/taglib_mp4/taglib_mp4_wrap.cxx
|
133
156
|
- ext/taglib_mpeg/extconf.rb
|
134
157
|
- ext/taglib_mpeg/taglib_mpeg.i
|
135
158
|
- ext/taglib_mpeg/taglib_mpeg_wrap.cxx
|
@@ -146,6 +169,7 @@ files:
|
|
146
169
|
- lib/taglib/flac.rb
|
147
170
|
- lib/taglib/id3v1.rb
|
148
171
|
- lib/taglib/id3v2.rb
|
172
|
+
- lib/taglib/mp4.rb
|
149
173
|
- lib/taglib/mpeg.rb
|
150
174
|
- lib/taglib/ogg.rb
|
151
175
|
- lib/taglib/version.rb
|
@@ -155,15 +179,19 @@ files:
|
|
155
179
|
- tasks/ext.rake
|
156
180
|
- tasks/gemspec_check.rake
|
157
181
|
- tasks/swig.rake
|
182
|
+
- test/base_test.rb
|
158
183
|
- test/data/Makefile
|
159
184
|
- test/data/add-relative-volume.cpp
|
160
185
|
- test/data/crash.mp3
|
161
186
|
- test/data/flac-create.cpp
|
162
187
|
- test/data/flac.flac
|
188
|
+
- test/data/get_picture_data.cpp
|
163
189
|
- test/data/globe_east_540.jpg
|
164
190
|
- test/data/globe_east_90.jpg
|
165
191
|
- test/data/id3v1-create.cpp
|
166
192
|
- test/data/id3v1.mp3
|
193
|
+
- test/data/mp4-create.cpp
|
194
|
+
- test/data/mp4.m4a
|
167
195
|
- test/data/relative-volume.mp3
|
168
196
|
- test/data/sample.mp3
|
169
197
|
- test/data/unicode.mp3
|
@@ -177,18 +205,21 @@ files:
|
|
177
205
|
- test/flac_file_write_test.rb
|
178
206
|
- test/id3v1_tag_test.rb
|
179
207
|
- test/id3v2_frames_test.rb
|
208
|
+
- test/id3v2_header_test.rb
|
180
209
|
- test/id3v2_memory_test.rb
|
181
210
|
- test/id3v2_relative_volume_test.rb
|
182
211
|
- test/id3v2_tag_test.rb
|
183
212
|
- test/id3v2_unicode_test.rb
|
184
213
|
- test/id3v2_write_test.rb
|
214
|
+
- test/mp4_file_test.rb
|
215
|
+
- test/mp4_file_write_test.rb
|
216
|
+
- test/mp4_items_test.rb
|
185
217
|
- test/mpeg_file_test.rb
|
186
218
|
- test/tag_test.rb
|
187
219
|
- test/unicode_filename_test.rb
|
188
220
|
- test/vorbis_file_test.rb
|
189
221
|
- test/vorbis_tag_test.rb
|
190
|
-
|
191
|
-
homepage: http://robinst.github.com/taglib-ruby/
|
222
|
+
homepage: http://robinst.github.io/taglib-ruby/
|
192
223
|
licenses:
|
193
224
|
- MIT
|
194
225
|
post_install_message:
|
@@ -203,7 +234,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
203
234
|
version: '0'
|
204
235
|
segments:
|
205
236
|
- 0
|
206
|
-
hash: -
|
237
|
+
hash: -3989506221310826679
|
207
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
239
|
none: false
|
209
240
|
requirements:
|
@@ -212,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
243
|
version: '0'
|
213
244
|
segments:
|
214
245
|
- 0
|
215
|
-
hash: -
|
246
|
+
hash: -3989506221310826679
|
216
247
|
requirements:
|
217
248
|
- taglib (libtag1-dev in Debian/Ubuntu, taglib-devel in Fedora/RHEL)
|
218
249
|
rubyforge_project:
|