taglib-ruby 0.5.2-x86-mingw32 → 0.6.0-x86-mingw32
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/extconf.rb +4 -0
- 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/libtag.dll +0 -0
- data/lib/taglib.rb +1 -0
- data/lib/taglib/mp4.rb +33 -0
- data/lib/taglib/version.rb +2 -2
- data/lib/taglib_base.so +0 -0
- data/lib/taglib_flac.so +0 -0
- data/lib/taglib_id3v1.so +0 -0
- data/lib/taglib_id3v2.so +0 -0
- data/lib/taglib_mp4.so +0 -0
- data/lib/taglib_mpeg.so +0 -0
- data/lib/taglib_ogg.so +0 -0
- data/lib/taglib_vorbis.so +0 -0
- 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 +84 -7
@@ -1885,7 +1885,7 @@ TagLib::ByteVector ruby_string_to_taglib_bytevector(VALUE s) {
|
|
1885
1885
|
if (NIL_P(s)) {
|
1886
1886
|
return TagLib::ByteVector::null;
|
1887
1887
|
} else {
|
1888
|
-
return TagLib::ByteVector(RSTRING_PTR(s), RSTRING_LEN(s));
|
1888
|
+
return TagLib::ByteVector(RSTRING_PTR(StringValue(s)), RSTRING_LEN(s));
|
1889
1889
|
}
|
1890
1890
|
}
|
1891
1891
|
|
@@ -1903,7 +1903,7 @@ TagLib::String ruby_string_to_taglib_string(VALUE s) {
|
|
1903
1903
|
if (NIL_P(s)) {
|
1904
1904
|
return TagLib::String::null;
|
1905
1905
|
} else {
|
1906
|
-
return TagLib::String(RSTRING_PTR(CONVERT_TO_UTF8(s)), TagLib::String::UTF8);
|
1906
|
+
return TagLib::String(RSTRING_PTR(CONVERT_TO_UTF8(StringValue(s))), TagLib::String::UTF8);
|
1907
1907
|
}
|
1908
1908
|
}
|
1909
1909
|
|
@@ -2076,11 +2076,7 @@ SWIGINTERN int
|
|
2076
2076
|
SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc)
|
2077
2077
|
{
|
2078
2078
|
if (TYPE(obj) == T_STRING) {
|
2079
|
-
#if defined(StringValuePtr)
|
2080
2079
|
char *cstr = StringValuePtr(obj);
|
2081
|
-
#else
|
2082
|
-
char *cstr = STR2CSTR(obj);
|
2083
|
-
#endif
|
2084
2080
|
size_t size = RSTRING_LEN(obj) + 1;
|
2085
2081
|
if (cptr) {
|
2086
2082
|
if (alloc) {
|
@@ -2161,12 +2157,12 @@ _wrap_new_Properties__SWIG_0(int argc, VALUE *argv, VALUE self) {
|
|
2161
2157
|
}
|
2162
2158
|
res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_TagLib__Vorbis__File, 0 | 0 );
|
2163
2159
|
if (!SWIG_IsOK(res1)) {
|
2164
|
-
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "TagLib::Vorbis::File *","
|
2160
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "TagLib::Vorbis::File *","Properties", 1, argv[0] ));
|
2165
2161
|
}
|
2166
2162
|
arg1 = reinterpret_cast< TagLib::Vorbis::File * >(argp1);
|
2167
2163
|
ecode2 = SWIG_AsVal_int(argv[1], &val2);
|
2168
2164
|
if (!SWIG_IsOK(ecode2)) {
|
2169
|
-
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "TagLib::AudioProperties::ReadStyle","
|
2165
|
+
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "TagLib::AudioProperties::ReadStyle","Properties", 2, argv[1] ));
|
2170
2166
|
}
|
2171
2167
|
arg2 = static_cast< TagLib::AudioProperties::ReadStyle >(val2);
|
2172
2168
|
result = (TagLib::Vorbis::Properties *)new TagLib::Vorbis::Properties(arg1,arg2);
|
@@ -2207,7 +2203,7 @@ _wrap_new_Properties__SWIG_1(int argc, VALUE *argv, VALUE self) {
|
|
2207
2203
|
}
|
2208
2204
|
res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_TagLib__Vorbis__File, 0 | 0 );
|
2209
2205
|
if (!SWIG_IsOK(res1)) {
|
2210
|
-
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "TagLib::Vorbis::File *","
|
2206
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "TagLib::Vorbis::File *","Properties", 1, argv[0] ));
|
2211
2207
|
}
|
2212
2208
|
arg1 = reinterpret_cast< TagLib::Vorbis::File * >(argp1);
|
2213
2209
|
result = (TagLib::Vorbis::Properties *)new TagLib::Vorbis::Properties(arg1);
|
@@ -2485,12 +2481,12 @@ _wrap_new_File__SWIG_0(int argc, VALUE *argv, VALUE self) {
|
|
2485
2481
|
}
|
2486
2482
|
ecode2 = SWIG_AsVal_bool(argv[1], &val2);
|
2487
2483
|
if (!SWIG_IsOK(ecode2)) {
|
2488
|
-
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "bool","
|
2484
|
+
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "bool","File", 2, argv[1] ));
|
2489
2485
|
}
|
2490
2486
|
arg2 = static_cast< bool >(val2);
|
2491
2487
|
ecode3 = SWIG_AsVal_int(argv[2], &val3);
|
2492
2488
|
if (!SWIG_IsOK(ecode3)) {
|
2493
|
-
SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "TagLib::Vorbis::Properties::ReadStyle","
|
2489
|
+
SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "TagLib::Vorbis::Properties::ReadStyle","File", 3, argv[2] ));
|
2494
2490
|
}
|
2495
2491
|
arg3 = static_cast< TagLib::Vorbis::Properties::ReadStyle >(val3);
|
2496
2492
|
result = (TagLib::Vorbis::File *)new TagLib::Vorbis::File(arg1,arg2,arg3);
|
@@ -2521,7 +2517,7 @@ _wrap_new_File__SWIG_1(int argc, VALUE *argv, VALUE self) {
|
|
2521
2517
|
}
|
2522
2518
|
ecode2 = SWIG_AsVal_bool(argv[1], &val2);
|
2523
2519
|
if (!SWIG_IsOK(ecode2)) {
|
2524
|
-
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "bool","
|
2520
|
+
SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "bool","File", 2, argv[1] ));
|
2525
2521
|
}
|
2526
2522
|
arg2 = static_cast< bool >(val2);
|
2527
2523
|
result = (TagLib::Vorbis::File *)new TagLib::Vorbis::File(arg1,arg2);
|
data/lib/libtag.dll
CHANGED
Binary file
|
data/lib/taglib.rb
CHANGED
data/lib/taglib/mp4.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'taglib_mp4'
|
2
|
+
|
3
|
+
module TagLib::MP4
|
4
|
+
|
5
|
+
class File
|
6
|
+
extend ::TagLib::FileOpenable
|
7
|
+
end
|
8
|
+
|
9
|
+
class Tag
|
10
|
+
remove_method :save
|
11
|
+
end
|
12
|
+
|
13
|
+
class Item
|
14
|
+
def self.from_int_pair(ary)
|
15
|
+
if !(ary.is_a? Array)
|
16
|
+
raise ArgumentError, 'argument should be an array'
|
17
|
+
elsif ary.length != 2
|
18
|
+
raise ArgumentError, 'argument should have exactly two elements'
|
19
|
+
else
|
20
|
+
new(*ary)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class ItemListMap
|
26
|
+
alias :clear :_clear
|
27
|
+
alias :insert :_insert
|
28
|
+
alias :[] :fetch
|
29
|
+
remove_method :_clear
|
30
|
+
remove_method :_insert
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
data/lib/taglib/version.rb
CHANGED
data/lib/taglib_base.so
CHANGED
Binary file
|
data/lib/taglib_flac.so
CHANGED
Binary file
|
data/lib/taglib_id3v1.so
CHANGED
Binary file
|
data/lib/taglib_id3v2.so
CHANGED
Binary file
|
data/lib/taglib_mp4.so
ADDED
Binary file
|
data/lib/taglib_mpeg.so
CHANGED
Binary file
|
data/lib/taglib_ogg.so
CHANGED
Binary file
|
data/lib/taglib_vorbis.so
CHANGED
Binary file
|
data/taglib-ruby.gemspec
CHANGED
@@ -7,9 +7,9 @@ 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"]
|
10
|
+
s.authors = ["Robin Stocker", "Jacob Vosmaer"]
|
11
11
|
s.email = ["robin@nibor.org"]
|
12
|
-
s.homepage = "http://robinst.github.
|
12
|
+
s.homepage = "http://robinst.github.io/taglib-ruby/"
|
13
13
|
s.licenses = ["MIT"]
|
14
14
|
s.summary = "Ruby interface for the taglib C++ library"
|
15
15
|
s.description = <<DESC
|
@@ -23,10 +23,11 @@ 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', '~> 1.
|
26
|
+
s.add_development_dependency 'bundler', '~> 1.2'
|
27
27
|
s.add_development_dependency 'rake-compiler', '~> 0.8'
|
28
28
|
s.add_development_dependency 'shoulda-context', '~> 1.0'
|
29
29
|
s.add_development_dependency 'yard', '~> 0.7'
|
30
|
+
s.add_development_dependency 'kramdown', '~> 1.0'
|
30
31
|
|
31
32
|
s.extensions = [
|
32
33
|
"ext/taglib_base/extconf.rb",
|
@@ -36,6 +37,7 @@ DESC
|
|
36
37
|
"ext/taglib_ogg/extconf.rb",
|
37
38
|
"ext/taglib_vorbis/extconf.rb",
|
38
39
|
"ext/taglib_flac/extconf.rb",
|
40
|
+
"ext/taglib_mp4/extconf.rb",
|
39
41
|
]
|
40
42
|
s.extra_rdoc_files = [
|
41
43
|
"CHANGES.md",
|
@@ -55,6 +57,7 @@ DESC
|
|
55
57
|
"docs/taglib/flac.rb",
|
56
58
|
"docs/taglib/id3v1.rb",
|
57
59
|
"docs/taglib/id3v2.rb",
|
60
|
+
"docs/taglib/mp4.rb",
|
58
61
|
"docs/taglib/mpeg.rb",
|
59
62
|
"docs/taglib/ogg.rb",
|
60
63
|
"docs/taglib/vorbis.rb",
|
@@ -63,6 +66,7 @@ DESC
|
|
63
66
|
"ext/taglib_base/includes.i",
|
64
67
|
"ext/taglib_base/taglib_base.i",
|
65
68
|
"ext/taglib_base/taglib_base_wrap.cxx",
|
69
|
+
"ext/taglib_flac/extconf.rb",
|
66
70
|
"ext/taglib_flac/taglib_flac.i",
|
67
71
|
"ext/taglib_flac/taglib_flac_wrap.cxx",
|
68
72
|
"ext/taglib_id3v1/extconf.rb",
|
@@ -72,6 +76,9 @@ DESC
|
|
72
76
|
"ext/taglib_id3v2/relativevolumeframe.i",
|
73
77
|
"ext/taglib_id3v2/taglib_id3v2.i",
|
74
78
|
"ext/taglib_id3v2/taglib_id3v2_wrap.cxx",
|
79
|
+
"ext/taglib_mp4/extconf.rb",
|
80
|
+
"ext/taglib_mp4/taglib_mp4.i",
|
81
|
+
"ext/taglib_mp4/taglib_mp4_wrap.cxx",
|
75
82
|
"ext/taglib_mpeg/extconf.rb",
|
76
83
|
"ext/taglib_mpeg/taglib_mpeg.i",
|
77
84
|
"ext/taglib_mpeg/taglib_mpeg_wrap.cxx",
|
@@ -88,6 +95,7 @@ DESC
|
|
88
95
|
"lib/taglib/flac.rb",
|
89
96
|
"lib/taglib/id3v1.rb",
|
90
97
|
"lib/taglib/id3v2.rb",
|
98
|
+
"lib/taglib/mp4.rb",
|
91
99
|
"lib/taglib/mpeg.rb",
|
92
100
|
"lib/taglib/ogg.rb",
|
93
101
|
"lib/taglib/version.rb",
|
@@ -97,15 +105,19 @@ DESC
|
|
97
105
|
"tasks/ext.rake",
|
98
106
|
"tasks/gemspec_check.rake",
|
99
107
|
"tasks/swig.rake",
|
108
|
+
"test/base_test.rb",
|
100
109
|
"test/data/Makefile",
|
101
110
|
"test/data/add-relative-volume.cpp",
|
102
111
|
"test/data/crash.mp3",
|
103
112
|
"test/data/flac-create.cpp",
|
104
113
|
"test/data/flac.flac",
|
114
|
+
"test/data/get_picture_data.cpp",
|
105
115
|
"test/data/globe_east_540.jpg",
|
106
116
|
"test/data/globe_east_90.jpg",
|
107
117
|
"test/data/id3v1-create.cpp",
|
108
118
|
"test/data/id3v1.mp3",
|
119
|
+
"test/data/mp4-create.cpp",
|
120
|
+
"test/data/mp4.m4a",
|
109
121
|
"test/data/relative-volume.mp3",
|
110
122
|
"test/data/sample.mp3",
|
111
123
|
"test/data/unicode.mp3",
|
@@ -119,11 +131,15 @@ DESC
|
|
119
131
|
"test/flac_file_write_test.rb",
|
120
132
|
"test/id3v1_tag_test.rb",
|
121
133
|
"test/id3v2_frames_test.rb",
|
134
|
+
"test/id3v2_header_test.rb",
|
122
135
|
"test/id3v2_memory_test.rb",
|
123
136
|
"test/id3v2_relative_volume_test.rb",
|
124
137
|
"test/id3v2_tag_test.rb",
|
125
138
|
"test/id3v2_unicode_test.rb",
|
126
139
|
"test/id3v2_write_test.rb",
|
140
|
+
"test/mp4_file_test.rb",
|
141
|
+
"test/mp4_file_write_test.rb",
|
142
|
+
"test/mp4_items_test.rb",
|
127
143
|
"test/mpeg_file_test.rb",
|
128
144
|
"test/tag_test.rb",
|
129
145
|
"test/unicode_filename_test.rb",
|
data/tasks/ext.rake
CHANGED
@@ -46,6 +46,9 @@ end
|
|
46
46
|
Rake::ExtensionTask.new("taglib_flac", $gemspec) do |ext|
|
47
47
|
configure_cross_compile(ext)
|
48
48
|
end
|
49
|
+
Rake::ExtensionTask.new("taglib_mp4", $gemspec) do |ext|
|
50
|
+
configure_cross_compile(ext)
|
51
|
+
end
|
49
52
|
|
50
53
|
task :cross => [:taglib] do
|
51
54
|
# Mkmf just uses "g++" as C++ compiler, despite what's in rbconfig.rb.
|
data/tasks/swig.rake
CHANGED
@@ -5,7 +5,7 @@ def run_swig(mod)
|
|
5
5
|
if swig.empty?
|
6
6
|
swig = `which swig2.0`.chomp
|
7
7
|
end
|
8
|
-
sh "cd ext/#{mod} && #{swig} -c++ -ruby -autorename -initname #{mod} -I/usr/include #{mod}.i"
|
8
|
+
sh "cd ext/#{mod} && #{swig} -c++ -ruby -autorename -initname #{mod} -I/usr/local/include -I/usr/include #{mod}.i"
|
9
9
|
end
|
10
10
|
|
11
11
|
task :swig =>
|
@@ -16,6 +16,7 @@ task :swig =>
|
|
16
16
|
'ext/taglib_ogg/taglib_ogg_wrap.cxx',
|
17
17
|
'ext/taglib_vorbis/taglib_vorbis_wrap.cxx',
|
18
18
|
'ext/taglib_flac/taglib_flac_wrap.cxx',
|
19
|
+
'ext/taglib_mp4/taglib_mp4_wrap.cxx',
|
19
20
|
]
|
20
21
|
|
21
22
|
base_dependencies = ['ext/taglib_base/taglib_base.i', 'ext/taglib_base/includes.i']
|
@@ -47,3 +48,7 @@ end
|
|
47
48
|
file 'ext/taglib_flac/taglib_flac_wrap.cxx' => ['ext/taglib_flac/taglib_flac.i'] + base_dependencies do
|
48
49
|
run_swig('taglib_flac')
|
49
50
|
end
|
51
|
+
|
52
|
+
file 'ext/taglib_mp4/taglib_mp4_wrap.cxx' => ['ext/taglib_mp4/taglib_mp4.i'] + base_dependencies do
|
53
|
+
run_swig('taglib_mp4')
|
54
|
+
end
|
data/test/base_test.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class BaseTest < Test::Unit::TestCase
|
4
|
+
context "TagLib" do
|
5
|
+
should "contain version constants" do
|
6
|
+
assert TagLib::TAGLIB_MAJOR_VERSION.is_a? Integer
|
7
|
+
assert TagLib::TAGLIB_MINOR_VERSION.is_a? Integer
|
8
|
+
assert TagLib::TAGLIB_PATCH_VERSION.is_a? Integer
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/test/data/Makefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
.PHONY: all clean
|
2
2
|
|
3
|
-
all:: add-relative-volume id3v1-create vorbis-create flac-create
|
3
|
+
all:: add-relative-volume id3v1-create vorbis-create flac-create mp4-create
|
4
4
|
|
5
5
|
add-relative-volume: add-relative-volume.cpp
|
6
6
|
g++ -o $@ $< -ltag -I/usr/include/taglib
|
@@ -14,5 +14,8 @@ vorbis-create: vorbis-create.cpp
|
|
14
14
|
flac-create: flac-create.cpp
|
15
15
|
g++ -o $@ $< -ltag -I/usr/include/taglib
|
16
16
|
|
17
|
+
mp4-create: mp4-create.cpp
|
18
|
+
g++ -o $@ $< -ltag -I/usr/include/taglib
|
19
|
+
|
17
20
|
clean::
|
18
|
-
-rm add-relative-volume id3v1-create vorbis-create flac-create
|
21
|
+
-rm add-relative-volume id3v1-create vorbis-create flac-create mp4-create
|
data/test/data/flac-create.cpp
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
#include <iostream>
|
2
|
-
#include <fstream>
|
3
2
|
#include <stdlib.h>
|
4
3
|
|
5
4
|
#include <taglib/taglib.h>
|
6
5
|
#include <taglib/flacfile.h>
|
7
6
|
#include <taglib/xiphcomment.h>
|
8
7
|
|
9
|
-
|
8
|
+
#include "get_picture_data.cpp"
|
10
9
|
|
11
|
-
|
10
|
+
using namespace TagLib;
|
12
11
|
|
13
12
|
int main(int argc, char **argv) {
|
14
13
|
if (argc != 2) {
|
@@ -58,23 +57,4 @@ int main(int argc, char **argv) {
|
|
58
57
|
file.save();
|
59
58
|
}
|
60
59
|
|
61
|
-
ByteVector getPictureData(const char *filename) {
|
62
|
-
std::ifstream is;
|
63
|
-
is.open(filename, std::ios::binary);
|
64
|
-
|
65
|
-
is.seekg(0, std::ios::end);
|
66
|
-
int length = is.tellg();
|
67
|
-
is.seekg(0, std::ios::beg);
|
68
|
-
|
69
|
-
char *buffer = new char[length];
|
70
|
-
|
71
|
-
is.read(buffer, length);
|
72
|
-
is.close();
|
73
|
-
|
74
|
-
ByteVector result(buffer, length);
|
75
|
-
delete[] buffer;
|
76
|
-
|
77
|
-
return result;
|
78
|
-
}
|
79
|
-
|
80
60
|
// vim: set filetype=cpp sw=2 ts=2 expandtab:
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#include <fstream>
|
2
|
+
|
3
|
+
using namespace TagLib;
|
4
|
+
|
5
|
+
ByteVector getPictureData(const char *filename) {
|
6
|
+
std::ifstream is;
|
7
|
+
is.open(filename, std::ios::binary);
|
8
|
+
|
9
|
+
is.seekg(0, std::ios::end);
|
10
|
+
int length = is.tellg();
|
11
|
+
is.seekg(0, std::ios::beg);
|
12
|
+
|
13
|
+
char *buffer = new char[length];
|
14
|
+
|
15
|
+
is.read(buffer, length);
|
16
|
+
is.close();
|
17
|
+
|
18
|
+
ByteVector result(buffer, length);
|
19
|
+
delete[] buffer;
|
20
|
+
|
21
|
+
return result;
|
22
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#include <iostream>
|
2
|
+
#include <stdlib.h>
|
3
|
+
|
4
|
+
#include <taglib/taglib.h>
|
5
|
+
#include <taglib/mp4file.h>
|
6
|
+
|
7
|
+
#include "get_picture_data.cpp"
|
8
|
+
|
9
|
+
using namespace TagLib;
|
10
|
+
|
11
|
+
int main(int argc, char **argv) {
|
12
|
+
if (argc != 2) {
|
13
|
+
std::cout << "usage: " << argv[0] << " file.m4a" << std::endl;
|
14
|
+
exit(1);
|
15
|
+
}
|
16
|
+
char *filename = argv[1];
|
17
|
+
|
18
|
+
MP4::File file(filename);
|
19
|
+
MP4::Tag *tag = file.tag();
|
20
|
+
|
21
|
+
tag->setTitle("Title");
|
22
|
+
tag->setArtist("Artist");
|
23
|
+
tag->setAlbum("Album");
|
24
|
+
tag->setComment("Comment");
|
25
|
+
tag->setGenre("Pop");
|
26
|
+
tag->setYear(2011);
|
27
|
+
tag->setTrack(7);
|
28
|
+
|
29
|
+
ByteVector data = getPictureData("globe_east_90.jpg");
|
30
|
+
MP4::CoverArt cover_art = MP4::CoverArt(MP4::CoverArt::JPEG, data);
|
31
|
+
MP4::CoverArtList cover_art_list = MP4::CoverArtList();
|
32
|
+
cover_art_list.append(cover_art);
|
33
|
+
tag->itemListMap().insert("covr", MP4::Item(cover_art_list));
|
34
|
+
|
35
|
+
file.save();
|
36
|
+
}
|
37
|
+
|
38
|
+
// vim: set filetype=cpp sw=2 ts=2 expandtab:
|
data/test/data/mp4.m4a
ADDED
Binary file
|
data/test/fileref_write_test.rb
CHANGED
@@ -27,6 +27,15 @@ class TestFileRefWrite < Test::Unit::TestCase
|
|
27
27
|
written_file.close
|
28
28
|
end
|
29
29
|
|
30
|
+
should "not segfault when setting int" do
|
31
|
+
begin
|
32
|
+
@file.tag.title = 42
|
33
|
+
flunk("Should have raised a TypeError")
|
34
|
+
rescue TypeError
|
35
|
+
# this is good
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
30
39
|
teardown do
|
31
40
|
if @file
|
32
41
|
@file.close
|
data/test/flac_file_test.rb
CHANGED
@@ -44,7 +44,8 @@ class FlacFileTest < Test::Unit::TestCase
|
|
44
44
|
|
45
45
|
should "contain flac-specific information" do
|
46
46
|
assert_equal 16, @properties.sample_width
|
47
|
-
|
47
|
+
s = ["78d19b86df2cd488b35957e6bd884968"].pack('H*')
|
48
|
+
assert_equal s, @properties.signature
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|