taglib-ruby 0.6.0 → 1.1.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.
- checksums.yaml +7 -0
- data/.yardopts +1 -1
- data/{CHANGES.md → CHANGELOG.md} +46 -11
- data/README.md +61 -17
- data/Rakefile +12 -3
- data/docs/taglib/aiff.rb +95 -0
- data/docs/taglib/base.rb +30 -2
- data/docs/taglib/flac.rb +60 -4
- data/docs/taglib/id3v1.rb +29 -0
- data/docs/taglib/id3v2.rb +22 -3
- data/docs/taglib/mp4.rb +124 -13
- data/docs/taglib/mpeg.rb +30 -1
- data/docs/taglib/ogg.rb +47 -5
- data/docs/taglib/riff.rb +3 -0
- data/docs/taglib/vorbis.rb +1 -1
- data/docs/taglib/wav.rb +116 -0
- data/ext/extconf_common.rb +24 -3
- data/ext/taglib_aiff/extconf.rb +4 -0
- data/ext/taglib_aiff/taglib_aiff.i +84 -0
- data/ext/taglib_aiff/taglib_aiff_wrap.cxx +3111 -0
- data/ext/taglib_base/includes.i +34 -5
- data/ext/taglib_base/taglib_base.i +42 -2
- data/ext/taglib_base/taglib_base_wrap.cxx +226 -186
- data/ext/taglib_flac/taglib_flac.i +21 -18
- data/ext/taglib_flac/taglib_flac_wrap.cxx +519 -955
- data/ext/taglib_flac_picture/extconf.rb +4 -0
- data/ext/taglib_flac_picture/includes.i +15 -0
- data/ext/taglib_flac_picture/taglib_flac_picture.i +15 -0
- data/ext/taglib_flac_picture/taglib_flac_picture_wrap.cxx +3087 -0
- data/ext/taglib_id3v1/taglib_id3v1.i +19 -0
- data/ext/taglib_id3v1/taglib_id3v1_wrap.cxx +391 -193
- data/ext/taglib_id3v2/relativevolumeframe.i +4 -17
- data/ext/taglib_id3v2/taglib_id3v2.i +72 -2
- data/ext/taglib_id3v2/taglib_id3v2_wrap.cxx +3051 -1113
- data/ext/taglib_mp4/taglib_mp4.i +101 -20
- data/ext/taglib_mp4/taglib_mp4_wrap.cxx +1088 -282
- data/ext/taglib_mpeg/taglib_mpeg.i +11 -16
- data/ext/taglib_mpeg/taglib_mpeg_wrap.cxx +646 -317
- data/ext/taglib_ogg/taglib_ogg.i +11 -0
- data/ext/taglib_ogg/taglib_ogg_wrap.cxx +478 -192
- data/ext/taglib_vorbis/taglib_vorbis.i +8 -0
- data/ext/taglib_vorbis/taglib_vorbis_wrap.cxx +202 -156
- data/ext/taglib_wav/extconf.rb +4 -0
- data/ext/taglib_wav/taglib_wav.i +90 -0
- data/ext/taglib_wav/taglib_wav_wrap.cxx +3423 -0
- data/lib/taglib.rb +2 -0
- data/lib/taglib/aiff.rb +7 -0
- data/lib/taglib/mp4.rb +2 -1
- data/lib/taglib/version.rb +2 -2
- data/lib/taglib/wav.rb +11 -0
- data/taglib-ruby.gemspec +42 -8
- data/tasks/ext.rake +48 -20
- data/tasks/gemspec_check.rake +1 -1
- data/tasks/swig.rake +36 -2
- data/test/aiff_examples_test.rb +39 -0
- data/test/aiff_file_test.rb +103 -0
- data/test/aiff_file_write_test.rb +88 -0
- data/test/data/Makefile +8 -2
- data/test/data/aiff-sample.aiff +0 -0
- data/test/data/flac_nopic.flac +0 -0
- data/test/data/vorbis-create.cpp +20 -1
- data/test/data/vorbis.oga +0 -0
- data/test/data/wav-create.cpp +55 -0
- data/test/data/wav-dump.cpp +74 -0
- data/test/data/wav-sample.wav +0 -0
- data/test/file_test.rb +21 -0
- data/test/fileref_properties_test.rb +1 -1
- data/test/flac_file_test.rb +45 -30
- data/test/flac_picture_memory_test.rb +43 -0
- data/test/id3v1_genres_test.rb +23 -0
- data/test/id3v1_tag_test.rb +1 -0
- data/test/id3v2_frames_test.rb +64 -0
- data/test/id3v2_tag_test.rb +6 -6
- data/test/id3v2_unknown_frames_test.rb +30 -0
- data/test/id3v2_write_test.rb +10 -13
- data/test/mp4_file_test.rb +33 -4
- data/test/mp4_file_write_test.rb +5 -5
- data/test/mp4_items_test.rb +83 -29
- data/test/mpeg_file_test.rb +120 -7
- data/test/vorbis_file_test.rb +2 -2
- data/test/vorbis_tag_test.rb +61 -7
- data/test/wav_examples_test.rb +42 -0
- data/test/wav_file_test.rb +108 -0
- data/test/wav_file_write_test.rb +113 -0
- metadata +86 -56
data/lib/taglib.rb
CHANGED
data/lib/taglib/aiff.rb
ADDED
data/lib/taglib/mp4.rb
CHANGED
data/lib/taglib/version.rb
CHANGED
data/lib/taglib/wav.rb
ADDED
data/taglib-ruby.gemspec
CHANGED
@@ -7,7 +7,7 @@ require 'taglib/version'
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "taglib-ruby"
|
9
9
|
s.version = TagLib::Version::STRING
|
10
|
-
s.authors = ["Robin Stocker", "Jacob Vosmaer"]
|
10
|
+
s.authors = ["Robin Stocker", "Jacob Vosmaer", "Thomas Chevereau"]
|
11
11
|
s.email = ["robin@nibor.org"]
|
12
12
|
s.homepage = "http://robinst.github.io/taglib-ruby/"
|
13
13
|
s.licenses = ["MIT"]
|
@@ -23,11 +23,12 @@ DESC
|
|
23
23
|
s.require_paths = ["lib"]
|
24
24
|
s.requirements = ["taglib (libtag1-dev in Debian/Ubuntu, taglib-devel in Fedora/RHEL)"]
|
25
25
|
|
26
|
-
s.add_development_dependency 'bundler', '
|
27
|
-
s.add_development_dependency 'rake-compiler', '~> 0.
|
26
|
+
s.add_development_dependency 'bundler', '>= 1.2', '< 3'
|
27
|
+
s.add_development_dependency 'rake-compiler', '~> 0.9'
|
28
28
|
s.add_development_dependency 'shoulda-context', '~> 1.0'
|
29
|
-
s.add_development_dependency 'yard', '~> 0.
|
30
|
-
s.add_development_dependency 'kramdown', '~>
|
29
|
+
s.add_development_dependency 'yard', '~> 0.9.26'
|
30
|
+
s.add_development_dependency 'kramdown', '~> 2.3.0'
|
31
|
+
s.add_development_dependency 'test-unit', '~> 3.1'
|
31
32
|
|
32
33
|
s.extensions = [
|
33
34
|
"ext/taglib_base/extconf.rb",
|
@@ -37,22 +38,26 @@ DESC
|
|
37
38
|
"ext/taglib_ogg/extconf.rb",
|
38
39
|
"ext/taglib_vorbis/extconf.rb",
|
39
40
|
"ext/taglib_flac/extconf.rb",
|
41
|
+
"ext/taglib_flac_picture/extconf.rb",
|
40
42
|
"ext/taglib_mp4/extconf.rb",
|
43
|
+
"ext/taglib_aiff/extconf.rb",
|
44
|
+
"ext/taglib_wav/extconf.rb",
|
41
45
|
]
|
42
46
|
s.extra_rdoc_files = [
|
43
|
-
"
|
47
|
+
"CHANGELOG.md",
|
44
48
|
"LICENSE.txt",
|
45
49
|
"README.md",
|
46
50
|
]
|
47
51
|
s.files = [
|
48
52
|
".yardopts",
|
49
|
-
"
|
53
|
+
"CHANGELOG.md",
|
50
54
|
"Gemfile",
|
51
55
|
"Guardfile",
|
52
56
|
"LICENSE.txt",
|
53
57
|
"README.md",
|
54
58
|
"Rakefile",
|
55
59
|
"docs/default/fulldoc/html/css/common.css",
|
60
|
+
"docs/taglib/aiff.rb",
|
56
61
|
"docs/taglib/base.rb",
|
57
62
|
"docs/taglib/flac.rb",
|
58
63
|
"docs/taglib/id3v1.rb",
|
@@ -60,8 +65,13 @@ DESC
|
|
60
65
|
"docs/taglib/mp4.rb",
|
61
66
|
"docs/taglib/mpeg.rb",
|
62
67
|
"docs/taglib/ogg.rb",
|
68
|
+
"docs/taglib/riff.rb",
|
63
69
|
"docs/taglib/vorbis.rb",
|
70
|
+
"docs/taglib/wav.rb",
|
64
71
|
"ext/extconf_common.rb",
|
72
|
+
"ext/taglib_aiff/extconf.rb",
|
73
|
+
"ext/taglib_aiff/taglib_aiff.i",
|
74
|
+
"ext/taglib_aiff/taglib_aiff_wrap.cxx",
|
65
75
|
"ext/taglib_base/extconf.rb",
|
66
76
|
"ext/taglib_base/includes.i",
|
67
77
|
"ext/taglib_base/taglib_base.i",
|
@@ -69,6 +79,10 @@ DESC
|
|
69
79
|
"ext/taglib_flac/extconf.rb",
|
70
80
|
"ext/taglib_flac/taglib_flac.i",
|
71
81
|
"ext/taglib_flac/taglib_flac_wrap.cxx",
|
82
|
+
"ext/taglib_flac_picture/extconf.rb",
|
83
|
+
"ext/taglib_flac_picture/includes.i",
|
84
|
+
"ext/taglib_flac_picture/taglib_flac_picture.i",
|
85
|
+
"ext/taglib_flac_picture/taglib_flac_picture_wrap.cxx",
|
72
86
|
"ext/taglib_id3v1/extconf.rb",
|
73
87
|
"ext/taglib_id3v1/taglib_id3v1.i",
|
74
88
|
"ext/taglib_id3v1/taglib_id3v1_wrap.cxx",
|
@@ -88,9 +102,13 @@ DESC
|
|
88
102
|
"ext/taglib_vorbis/extconf.rb",
|
89
103
|
"ext/taglib_vorbis/taglib_vorbis.i",
|
90
104
|
"ext/taglib_vorbis/taglib_vorbis_wrap.cxx",
|
105
|
+
"ext/taglib_wav/extconf.rb",
|
106
|
+
"ext/taglib_wav/taglib_wav.i",
|
107
|
+
"ext/taglib_wav/taglib_wav_wrap.cxx",
|
91
108
|
"ext/valgrind-suppressions.txt",
|
92
109
|
"ext/win.cmake",
|
93
110
|
"lib/taglib.rb",
|
111
|
+
"lib/taglib/aiff.rb",
|
94
112
|
"lib/taglib/base.rb",
|
95
113
|
"lib/taglib/flac.rb",
|
96
114
|
"lib/taglib/id3v1.rb",
|
@@ -100,17 +118,23 @@ DESC
|
|
100
118
|
"lib/taglib/ogg.rb",
|
101
119
|
"lib/taglib/version.rb",
|
102
120
|
"lib/taglib/vorbis.rb",
|
121
|
+
"lib/taglib/wav.rb",
|
103
122
|
"taglib-ruby.gemspec",
|
104
123
|
"tasks/docs_coverage.rake",
|
105
124
|
"tasks/ext.rake",
|
106
125
|
"tasks/gemspec_check.rake",
|
107
126
|
"tasks/swig.rake",
|
127
|
+
"test/aiff_examples_test.rb",
|
128
|
+
"test/aiff_file_test.rb",
|
129
|
+
"test/aiff_file_write_test.rb",
|
108
130
|
"test/base_test.rb",
|
109
131
|
"test/data/Makefile",
|
110
132
|
"test/data/add-relative-volume.cpp",
|
133
|
+
"test/data/aiff-sample.aiff",
|
111
134
|
"test/data/crash.mp3",
|
112
135
|
"test/data/flac-create.cpp",
|
113
136
|
"test/data/flac.flac",
|
137
|
+
"test/data/flac_nopic.flac",
|
114
138
|
"test/data/get_picture_data.cpp",
|
115
139
|
"test/data/globe_east_540.jpg",
|
116
140
|
"test/data/globe_east_90.jpg",
|
@@ -123,12 +147,18 @@ DESC
|
|
123
147
|
"test/data/unicode.mp3",
|
124
148
|
"test/data/vorbis-create.cpp",
|
125
149
|
"test/data/vorbis.oga",
|
126
|
-
"test/
|
150
|
+
"test/data/wav-create.cpp",
|
151
|
+
"test/data/wav-dump.cpp",
|
152
|
+
"test/data/wav-sample.wav",
|
153
|
+
"test/file_test.rb",
|
127
154
|
"test/fileref_open_test.rb",
|
128
155
|
"test/fileref_properties_test.rb",
|
129
156
|
"test/fileref_write_test.rb",
|
130
157
|
"test/flac_file_test.rb",
|
131
158
|
"test/flac_file_write_test.rb",
|
159
|
+
"test/flac_picture_memory_test.rb",
|
160
|
+
"test/helper.rb",
|
161
|
+
"test/id3v1_genres_test.rb",
|
132
162
|
"test/id3v1_tag_test.rb",
|
133
163
|
"test/id3v2_frames_test.rb",
|
134
164
|
"test/id3v2_header_test.rb",
|
@@ -136,6 +166,7 @@ DESC
|
|
136
166
|
"test/id3v2_relative_volume_test.rb",
|
137
167
|
"test/id3v2_tag_test.rb",
|
138
168
|
"test/id3v2_unicode_test.rb",
|
169
|
+
"test/id3v2_unknown_frames_test.rb",
|
139
170
|
"test/id3v2_write_test.rb",
|
140
171
|
"test/mp4_file_test.rb",
|
141
172
|
"test/mp4_file_write_test.rb",
|
@@ -145,5 +176,8 @@ DESC
|
|
145
176
|
"test/unicode_filename_test.rb",
|
146
177
|
"test/vorbis_file_test.rb",
|
147
178
|
"test/vorbis_tag_test.rb",
|
179
|
+
"test/wav_examples_test.rb",
|
180
|
+
"test/wav_file_test.rb",
|
181
|
+
"test/wav_file_write_test.rb"
|
148
182
|
]
|
149
183
|
end
|
data/tasks/ext.rake
CHANGED
@@ -1,23 +1,32 @@
|
|
1
1
|
# Extension tasks and cross-compiling
|
2
2
|
|
3
3
|
host = 'i686-w64-mingw32'
|
4
|
-
plat = '
|
4
|
+
$plat = ENV['PLATFORM'] || 'i386-mingw32'
|
5
5
|
|
6
|
-
|
6
|
+
|
7
|
+
taglib_version = ENV['TAGLIB_VERSION'] || '1.9.1'
|
8
|
+
taglib = "taglib-#{taglib_version}"
|
9
|
+
|
10
|
+
tmp = "#{Dir.pwd}/tmp"
|
11
|
+
tmp_arch = "#{tmp}/#{$plat}"
|
7
12
|
toolchain_file = "#{Dir.pwd}/ext/win.cmake"
|
8
|
-
install_dir = "#{
|
13
|
+
install_dir = "#{tmp_arch}/#{taglib}"
|
9
14
|
install_dll = "#{install_dir}/bin/libtag.dll"
|
10
|
-
|
11
|
-
$cross_config_options = [
|
15
|
+
install_so = "#{install_dir}/lib/libtag.so"
|
16
|
+
$cross_config_options = ["--with-opt-dir=#{install_dir}"]
|
12
17
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
taglib_url = "https://github.com/taglib/taglib/archive/v#{taglib_version}.tar.gz"
|
19
|
+
taglib_options = [ "-DCMAKE_BUILD_TYPE=Release",
|
20
|
+
"-DBUILD_EXAMPLES=OFF",
|
21
|
+
"-DBUILD_TESTS=OFF",
|
22
|
+
"-DBUILD_BINDINGS=OFF", # 1.11 builds bindings by default
|
23
|
+
"-DBUILD_SHARED_LIBS=ON", # 1.11 builds static by default
|
24
|
+
"-DWITH_MP4=ON",# WITH_MP4, WITH_ASF only needed with taglib 1.7, will be default in 1.8
|
25
|
+
"-DWITH_ASF=ON"].join(' ')
|
18
26
|
|
19
27
|
def configure_cross_compile(ext)
|
20
28
|
ext.cross_compile = true
|
29
|
+
ext.cross_platform = $plat
|
21
30
|
ext.cross_config_options.concat($cross_config_options)
|
22
31
|
ext.cross_compiling do |gem|
|
23
32
|
gem.files << "lib/libtag.dll"
|
@@ -43,30 +52,52 @@ end
|
|
43
52
|
Rake::ExtensionTask.new("taglib_vorbis", $gemspec) do |ext|
|
44
53
|
configure_cross_compile(ext)
|
45
54
|
end
|
55
|
+
Rake::ExtensionTask.new("taglib_flac_picture", $gemspec) do |ext|
|
56
|
+
configure_cross_compile(ext)
|
57
|
+
end
|
46
58
|
Rake::ExtensionTask.new("taglib_flac", $gemspec) do |ext|
|
47
59
|
configure_cross_compile(ext)
|
48
60
|
end
|
49
61
|
Rake::ExtensionTask.new("taglib_mp4", $gemspec) do |ext|
|
50
62
|
configure_cross_compile(ext)
|
51
63
|
end
|
64
|
+
Rake::ExtensionTask.new("taglib_aiff", $gemspec) do |ext|
|
65
|
+
configure_cross_compile(ext)
|
66
|
+
end
|
67
|
+
Rake::ExtensionTask.new("taglib_wav", $gemspec) do |ext|
|
68
|
+
configure_cross_compile(ext)
|
69
|
+
end
|
52
70
|
|
53
|
-
task :cross
|
71
|
+
task :cross do
|
54
72
|
# Mkmf just uses "g++" as C++ compiler, despite what's in rbconfig.rb.
|
55
73
|
# So, we need to hack around it by setting CXX to the cross compiler.
|
56
74
|
ENV["CXX"] = "#{host}-g++"
|
57
|
-
install install_dll, "lib/"
|
58
75
|
end
|
59
76
|
|
60
|
-
|
77
|
+
file "#{tmp_arch}/stage/lib/libtag.dll" => [install_dll] do |f|
|
78
|
+
install install_dll, f
|
79
|
+
end
|
61
80
|
|
62
81
|
file install_dll => ["#{tmp}/#{taglib}"] do
|
63
82
|
chdir "#{tmp}/#{taglib}" do
|
64
|
-
sh %(cmake -DCMAKE_INSTALL_PREFIX=#{install_dir} -DCMAKE_TOOLCHAIN_FILE=#{toolchain_file}
|
83
|
+
sh %(cmake -DCMAKE_INSTALL_PREFIX=#{install_dir} -DCMAKE_TOOLCHAIN_FILE=#{toolchain_file} #{taglib_options})
|
65
84
|
sh "make VERBOSE=1"
|
66
85
|
sh "make install"
|
67
86
|
end
|
68
87
|
end
|
69
88
|
|
89
|
+
task :vendor => [install_so]
|
90
|
+
|
91
|
+
file install_so => ["#{tmp_arch}/#{taglib}", "#{tmp_arch}/#{taglib}-build", "#{tmp}/#{taglib}"] do
|
92
|
+
chdir "#{tmp_arch}/#{taglib}-build" do
|
93
|
+
sh %(cmake -DCMAKE_INSTALL_PREFIX=#{install_dir} #{taglib_options} #{tmp}/#{taglib})
|
94
|
+
sh "make install VERBOSE=1"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
directory "#{tmp_arch}/#{taglib}"
|
99
|
+
directory "#{tmp_arch}/#{taglib}-build"
|
100
|
+
|
70
101
|
file "#{tmp}/#{taglib}" => ["#{tmp}/#{taglib}.tar.gz"] do
|
71
102
|
chdir tmp do
|
72
103
|
sh "tar xzf #{taglib}.tar.gz"
|
@@ -76,12 +107,9 @@ end
|
|
76
107
|
file "#{tmp}/#{taglib}.tar.gz" => [tmp] do |t|
|
77
108
|
require 'open-uri'
|
78
109
|
puts "Downloading #{taglib_url}"
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
open(File.basename(t.name), 'wb') do |f|
|
83
|
-
f.write(data)
|
84
|
-
end
|
110
|
+
|
111
|
+
File.open(t.name, 'wb') do |f|
|
112
|
+
IO.copy_stream(open(taglib_url), f)
|
85
113
|
end
|
86
114
|
end
|
87
115
|
|
data/tasks/gemspec_check.rake
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
desc "Checks file list in .gemspec against files tracked in Git"
|
2
2
|
task :gemspec_check do |t|
|
3
|
-
exclude = ['.gitignore', '.
|
3
|
+
exclude = ['.gitignore', '.github/workflows/ci.yml']
|
4
4
|
git_files = `git ls-files`.split("\n") - exclude
|
5
5
|
gemspec_files = $gemspec.files
|
6
6
|
|
data/tasks/swig.rake
CHANGED
@@ -1,11 +1,30 @@
|
|
1
1
|
# Tasks for generating SWIG wrappers in ext
|
2
2
|
|
3
|
+
# Execute SWIG for the specified extension.
|
4
|
+
# Arguments:
|
5
|
+
# mod:: The name of the SWIG wrapper to process.
|
6
|
+
#
|
7
|
+
# If the TAGLIB_DIR environment variable points to a directory,
|
8
|
+
# $TAGLIB_DIR/include will be searched first for taglib headers.
|
3
9
|
def run_swig(mod)
|
4
10
|
swig = `which swig`.chomp
|
5
11
|
if swig.empty?
|
6
12
|
swig = `which swig2.0`.chomp
|
7
13
|
end
|
8
|
-
|
14
|
+
|
15
|
+
# Standard search location for headers
|
16
|
+
include_args = %w{-I/usr/local/include -I/usr/include}
|
17
|
+
|
18
|
+
if ENV.has_key?('TAGLIB_DIR')
|
19
|
+
unless File.directory?(ENV['TAGLIB_DIR'])
|
20
|
+
abort "When defined, the TAGLIB_DIR environment variable must point to a valid directory."
|
21
|
+
end
|
22
|
+
|
23
|
+
# Push it in front to get it searched first.
|
24
|
+
include_args.unshift('-I' + ENV['TAGLIB_DIR'] + '/include')
|
25
|
+
end
|
26
|
+
|
27
|
+
sh "cd ext/#{mod} && #{swig} -c++ -ruby -autorename -initname #{mod} #{include_args.join(' ')} #{mod}.i"
|
9
28
|
end
|
10
29
|
|
11
30
|
task :swig =>
|
@@ -15,8 +34,11 @@ task :swig =>
|
|
15
34
|
'ext/taglib_id3v2/taglib_id3v2_wrap.cxx',
|
16
35
|
'ext/taglib_ogg/taglib_ogg_wrap.cxx',
|
17
36
|
'ext/taglib_vorbis/taglib_vorbis_wrap.cxx',
|
37
|
+
'ext/taglib_flac/taglib_flac_picture_wrap.cxx',
|
18
38
|
'ext/taglib_flac/taglib_flac_wrap.cxx',
|
19
39
|
'ext/taglib_mp4/taglib_mp4_wrap.cxx',
|
40
|
+
'ext/taglib_aiff/taglib_aiff_wrap.cxx',
|
41
|
+
'ext/taglib_wav/taglib_wav_wrap.cxx',
|
20
42
|
]
|
21
43
|
|
22
44
|
base_dependencies = ['ext/taglib_base/taglib_base.i', 'ext/taglib_base/includes.i']
|
@@ -45,10 +67,22 @@ file 'ext/taglib_vorbis/taglib_vorbis_wrap.cxx' => ['ext/taglib_vorbis/taglib_vo
|
|
45
67
|
run_swig('taglib_vorbis')
|
46
68
|
end
|
47
69
|
|
48
|
-
file 'ext/taglib_flac/
|
70
|
+
file 'ext/taglib_flac/taglib_flac_picture_wrap.cxx' => ['ext/taglib_flac_picture/taglib_flac_picture.i'] + base_dependencies do
|
71
|
+
run_swig('taglib_flac_picture')
|
72
|
+
end
|
73
|
+
|
74
|
+
file 'ext/taglib_flac/taglib_flac_wrap.cxx' => ['ext/taglib_flac/taglib_flac.i', 'ext/taglib_flac_picture/taglib_flac_picture.i'] + base_dependencies do
|
49
75
|
run_swig('taglib_flac')
|
50
76
|
end
|
51
77
|
|
52
78
|
file 'ext/taglib_mp4/taglib_mp4_wrap.cxx' => ['ext/taglib_mp4/taglib_mp4.i'] + base_dependencies do
|
53
79
|
run_swig('taglib_mp4')
|
54
80
|
end
|
81
|
+
|
82
|
+
file 'ext/taglib_aiff/taglib_aiff_wrap.cxx' => ['ext/taglib_aiff/taglib_aiff.i'] + base_dependencies do
|
83
|
+
run_swig('taglib_aiff')
|
84
|
+
end
|
85
|
+
|
86
|
+
file 'ext/taglib_wav/taglib_wav_wrap.cxx' => ['ext/taglib_wav/taglib_wav.i'] + base_dependencies do
|
87
|
+
run_swig('taglib_wav')
|
88
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class AIFFExamples < Test::Unit::TestCase
|
4
|
+
|
5
|
+
DATA_FILE_PREFIX = "test/data/aiff-"
|
6
|
+
|
7
|
+
context "TagLib::RIFF::AIFF::File" do
|
8
|
+
|
9
|
+
should "Run TagLib::RIFF::AIFF::File examples" do
|
10
|
+
|
11
|
+
|
12
|
+
# @example Reading the title
|
13
|
+
title = TagLib::RIFF::AIFF::File.open("#{DATA_FILE_PREFIX}sample.aiff") do |file|
|
14
|
+
file.tag.title
|
15
|
+
end
|
16
|
+
|
17
|
+
# @example Reading AIFF-specific audio properties
|
18
|
+
TagLib::RIFF::AIFF::File.open("#{DATA_FILE_PREFIX}sample.aiff") do |file|
|
19
|
+
file.audio_properties.bits_per_sample #=> 16
|
20
|
+
end
|
21
|
+
|
22
|
+
# @example Saving ID3v2 cover-art to disk
|
23
|
+
TagLib::RIFF::AIFF::File.open("#{DATA_FILE_PREFIX}sample.aiff") do |file|
|
24
|
+
id3v2_tag = file.tag
|
25
|
+
cover = id3v2_tag.frame_list('APIC').first
|
26
|
+
ext = cover.mime_type.rpartition('/')[2]
|
27
|
+
File.open("#{DATA_FILE_PREFIX}cover-art.#{ext}", "wb") { |f| f.write cover.picture }
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
# checks
|
32
|
+
assert_equal "AIFF Dummy Track Title - ID3v2.4", title
|
33
|
+
assert_equal true, File.exist?("#{DATA_FILE_PREFIX}cover-art.jpeg")
|
34
|
+
FileUtils.rm("#{DATA_FILE_PREFIX}cover-art.jpeg")
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class AIFFFileTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
SAMPLE_FILE = "test/data/aiff-sample.aiff"
|
6
|
+
PICTURE_FILE = "test/data/globe_east_540.jpg"
|
7
|
+
|
8
|
+
context "TagLib::RIFF::AIFF::File" do
|
9
|
+
setup do
|
10
|
+
@file = TagLib::RIFF::AIFF::File.new(SAMPLE_FILE)
|
11
|
+
@tag = @file.tag
|
12
|
+
File.open(PICTURE_FILE, "rb") do |f|
|
13
|
+
@picture_data = f.read
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
should "have an ID3v2 tag" do
|
18
|
+
assert @file.id3v2_tag?
|
19
|
+
refute_nil @tag
|
20
|
+
assert_equal TagLib::ID3v2::Tag, @tag.class
|
21
|
+
end
|
22
|
+
|
23
|
+
should "contain basic tag information" do
|
24
|
+
assert_equal "AIFF Dummy Track Title - ID3v2.4", @tag.title
|
25
|
+
assert_equal "AIFF Dummy Artist Name", @tag.artist
|
26
|
+
assert_equal "AIFF Dummy Album Title", @tag.album
|
27
|
+
assert_equal "AIFF Dummy Comment", @tag.comment
|
28
|
+
assert_equal "Jazz", @tag.genre
|
29
|
+
assert_equal 2014, @tag.year
|
30
|
+
assert_equal 3, @tag.track
|
31
|
+
assert_equal false, @tag.empty?
|
32
|
+
end
|
33
|
+
|
34
|
+
context "APIC frame" do
|
35
|
+
setup do
|
36
|
+
@apic = @tag.frame_list('APIC').first
|
37
|
+
end
|
38
|
+
|
39
|
+
should "exist" do
|
40
|
+
assert_not_nil @apic
|
41
|
+
assert_equal TagLib::ID3v2::AttachedPictureFrame, @apic.class
|
42
|
+
end
|
43
|
+
|
44
|
+
should "have a type" do
|
45
|
+
assert_equal TagLib::ID3v2::AttachedPictureFrame::FrontCover, @apic.type
|
46
|
+
end
|
47
|
+
|
48
|
+
should "have a mime type" do
|
49
|
+
assert_equal "image/jpeg", @apic.mime_type
|
50
|
+
end
|
51
|
+
|
52
|
+
should "have picture bytes" do
|
53
|
+
assert_equal 61649, @apic.picture.size
|
54
|
+
assert_equal @picture_data, @apic.picture
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "audio properties" do
|
59
|
+
setup do
|
60
|
+
@properties = @file.audio_properties
|
61
|
+
end
|
62
|
+
|
63
|
+
should "exist" do
|
64
|
+
assert_not_nil @properties
|
65
|
+
end
|
66
|
+
|
67
|
+
should "contain basic information" do
|
68
|
+
assert_equal 2, @properties.length_in_seconds
|
69
|
+
assert_equal 2937, @properties.length_in_milliseconds
|
70
|
+
assert_equal 256, @properties.bitrate
|
71
|
+
assert_equal 8000, @properties.sample_rate
|
72
|
+
assert_equal 2, @properties.channels
|
73
|
+
end
|
74
|
+
|
75
|
+
should "contain AIFF-specific information" do
|
76
|
+
assert_equal 16, @properties.bits_per_sample
|
77
|
+
assert_equal 23493, @properties.sample_frames
|
78
|
+
end
|
79
|
+
|
80
|
+
should "do not contain AIFF-C information" do
|
81
|
+
refute @properties.aiff_c?
|
82
|
+
assert_equal "", @properties.compression_type
|
83
|
+
assert_equal "", @properties.compression_name
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
teardown do
|
88
|
+
@file.close
|
89
|
+
@file = nil
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "TagLib::RIFF::AIFF::File.open" do
|
94
|
+
should "have open method" do
|
95
|
+
title = nil
|
96
|
+
TagLib::RIFF::AIFF::File.open(SAMPLE_FILE, false) do |file|
|
97
|
+
title = file.tag.title
|
98
|
+
end
|
99
|
+
assert_equal "AIFF Dummy Track Title - ID3v2.4", title
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|