taglib-ruby 0.6.0 → 0.7.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/CHANGES.md +9 -0
- data/README.md +40 -9
- data/Rakefile +1 -2
- data/docs/taglib/aiff.rb +63 -0
- data/docs/taglib/base.rb +22 -1
- data/docs/taglib/id3v2.rb +21 -2
- data/docs/taglib/riff.rb +3 -0
- data/docs/taglib/wav.rb +63 -0
- data/ext/extconf_common.rb +15 -1
- data/ext/taglib_aiff/extconf.rb +4 -0
- data/ext/taglib_aiff/taglib_aiff.i +68 -0
- data/ext/taglib_aiff/taglib_aiff_wrap.cxx +2920 -0
- data/ext/taglib_base/includes.i +7 -2
- data/ext/taglib_base/taglib_base_wrap.cxx +109 -115
- data/ext/taglib_flac/taglib_flac_wrap.cxx +108 -114
- data/ext/taglib_id3v1/taglib_id3v1_wrap.cxx +109 -115
- data/ext/taglib_id3v2/taglib_id3v2.i +3 -1
- data/ext/taglib_id3v2/taglib_id3v2_wrap.cxx +139 -119
- data/ext/taglib_mp4/taglib_mp4_wrap.cxx +109 -115
- data/ext/taglib_mpeg/taglib_mpeg_wrap.cxx +108 -114
- data/ext/taglib_ogg/taglib_ogg_wrap.cxx +109 -115
- data/ext/taglib_vorbis/taglib_vorbis_wrap.cxx +108 -114
- data/ext/taglib_wav/extconf.rb +4 -0
- data/ext/taglib_wav/taglib_wav.i +66 -0
- data/ext/taglib_wav/taglib_wav_wrap.cxx +3057 -0
- data/lib/taglib.rb +2 -0
- data/lib/taglib/aiff.rb +7 -0
- data/lib/taglib/version.rb +1 -1
- data/lib/taglib/wav.rb +7 -0
- data/taglib-ruby.gemspec +27 -2
- data/tasks/ext.rake +17 -10
- data/tasks/swig.rake +10 -0
- data/test/aiff_examples_test.rb +39 -0
- data/test/aiff_file_test.rb +94 -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/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/id3v2_unknown_frames_test.rb +30 -0
- data/test/wav_examples_test.rb +42 -0
- data/test/wav_file_test.rb +96 -0
- data/test/wav_file_write_test.rb +88 -0
- metadata +49 -45
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 mp4-create
|
3
|
+
all:: add-relative-volume id3v1-create vorbis-create flac-create mp4-create wav-create wav-dump
|
4
4
|
|
5
5
|
add-relative-volume: add-relative-volume.cpp
|
6
6
|
g++ -o $@ $< -ltag -I/usr/include/taglib
|
@@ -17,5 +17,11 @@ flac-create: flac-create.cpp
|
|
17
17
|
mp4-create: mp4-create.cpp
|
18
18
|
g++ -o $@ $< -ltag -I/usr/include/taglib
|
19
19
|
|
20
|
+
wav-create: wav-create.cpp
|
21
|
+
g++ -o $@ $< -ltag -I/usr/include/taglib
|
22
|
+
|
23
|
+
wav-dump: wav-dump.cpp
|
24
|
+
g++ -o $@ $< -ltag -I/usr/include/taglib
|
25
|
+
|
20
26
|
clean::
|
21
|
-
-rm add-relative-volume id3v1-create vorbis-create flac-create mp4-create
|
27
|
+
-rm add-relative-volume id3v1-create vorbis-create flac-create mp4-create wav-create wav-dump
|
Binary file
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#include <taglib/taglib.h>
|
2
|
+
#include <taglib/wavfile.h>
|
3
|
+
#include <taglib/wavproperties.h>
|
4
|
+
#include <taglib/attachedpictureframe.h>
|
5
|
+
|
6
|
+
#include "get_picture_data.cpp"
|
7
|
+
|
8
|
+
using namespace TagLib;
|
9
|
+
|
10
|
+
|
11
|
+
int main(int argc, char **argv) {
|
12
|
+
if (argc != 2) {
|
13
|
+
std::cout << "usage: " << argv[0] << " file.wav" << std::endl;
|
14
|
+
exit(1);
|
15
|
+
}
|
16
|
+
char *filename = argv[1];
|
17
|
+
|
18
|
+
RIFF::WAV::File file(filename);
|
19
|
+
ID3v2::Tag *tag = file.tag();
|
20
|
+
|
21
|
+
tag->setArtist("WAV Dummy Artist Name");
|
22
|
+
tag->setAlbum("WAV Dummy Album Title");
|
23
|
+
tag->setTitle("WAV Dummy Track Title");
|
24
|
+
tag->setTrack(5);
|
25
|
+
tag->setYear(2014);
|
26
|
+
tag->setGenre("Jazz");
|
27
|
+
tag->setComment("WAV Dummy Comment");
|
28
|
+
|
29
|
+
tag->removeFrames("APIC");
|
30
|
+
|
31
|
+
ByteVector picture_data;
|
32
|
+
ID3v2::AttachedPictureFrame *apic;
|
33
|
+
|
34
|
+
picture_data = getPictureData("globe_east_540.jpg");
|
35
|
+
apic = new ID3v2::AttachedPictureFrame();
|
36
|
+
apic->setPicture(picture_data);
|
37
|
+
apic->setMimeType("image/jpeg");
|
38
|
+
apic->setType(ID3v2::AttachedPictureFrame::FrontCover);
|
39
|
+
apic->setDescription("WAV Dummy Front Cover-Art");
|
40
|
+
apic->setTextEncoding(String::UTF8);
|
41
|
+
tag->addFrame(apic);
|
42
|
+
|
43
|
+
picture_data = getPictureData("globe_east_90.jpg");
|
44
|
+
apic = new ID3v2::AttachedPictureFrame();
|
45
|
+
apic->setPicture(picture_data);
|
46
|
+
apic->setMimeType("image/jpeg");
|
47
|
+
apic->setType(ID3v2::AttachedPictureFrame::Other);
|
48
|
+
apic->setDescription("WAV Dummy Thumbnail");
|
49
|
+
apic->setTextEncoding(String::UTF8);
|
50
|
+
tag->addFrame(apic);
|
51
|
+
|
52
|
+
file.save();
|
53
|
+
}
|
54
|
+
|
55
|
+
// vim: set filetype=cpp sw=2 ts=2 expandtab:
|
@@ -0,0 +1,74 @@
|
|
1
|
+
#include <taglib/taglib.h>
|
2
|
+
#include <taglib/wavfile.h>
|
3
|
+
#include <taglib/wavproperties.h>
|
4
|
+
#include <taglib/attachedpictureframe.h>
|
5
|
+
|
6
|
+
using namespace TagLib;
|
7
|
+
|
8
|
+
|
9
|
+
void dump_id3v2(ID3v2::Tag *tag)
|
10
|
+
{
|
11
|
+
if (!tag || tag->isEmpty())
|
12
|
+
{
|
13
|
+
std::cout << " NO TAGS" << std::endl;
|
14
|
+
return;
|
15
|
+
}
|
16
|
+
|
17
|
+
std::cout << " ID3v2." << tag->header()->majorVersion() << "." << tag->header()->revisionNumber() << std::endl;
|
18
|
+
std::cout << " title: '" << tag->title() << "'" << std::endl;
|
19
|
+
std::cout << " artist: '" << tag->artist() << "'" << std::endl;
|
20
|
+
std::cout << " album: '" << tag->album() << "'" << std::endl;
|
21
|
+
std::cout << " track: " << tag->track() << std::endl;
|
22
|
+
std::cout << " year: " << tag->year() << std::endl;
|
23
|
+
std::cout << " genre: '" << tag->genre() << "'" << std::endl;
|
24
|
+
std::cout << " comment: '" << tag->comment() << "'" << std::endl;
|
25
|
+
|
26
|
+
std::cout << " Frames" << std::endl;
|
27
|
+
const ID3v2::FrameList frameList = tag->frameList();
|
28
|
+
for(ID3v2::FrameList::ConstIterator it = frameList.begin(); it != frameList.end(); ++it)
|
29
|
+
std::cout << " " << (*it)->frameID() << " - " << (*it)->toString() << std::endl;
|
30
|
+
|
31
|
+
const ID3v2::FrameList apicList = tag->frameList("APIC");
|
32
|
+
for(ID3v2::FrameList::ConstIterator it = apicList.begin(); it != apicList.end(); ++it)
|
33
|
+
{
|
34
|
+
const ID3v2::AttachedPictureFrame *apic = static_cast<ID3v2::AttachedPictureFrame *>(*it);
|
35
|
+
std::cout << " Picture" << std::endl;
|
36
|
+
std::cout << " type: " << apic->type() << std::endl;
|
37
|
+
std::cout << " mime_type: '" << apic->mimeType() << "'" << std::endl;
|
38
|
+
std::cout << " description: '" << apic->description() << "'" << std::endl;
|
39
|
+
std::cout << " size: " << apic->picture().size() << " bytes" << std::endl;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
void dump_audio_properties(AudioProperties *properties)
|
44
|
+
{
|
45
|
+
std::cout << " Audio Properties" << std::endl;
|
46
|
+
std::cout << " length: " << properties->length() << " (seconds)" << std::endl;
|
47
|
+
std::cout << " bitrate: " << properties->bitrate() << " (kbits/sec)" << std::endl;
|
48
|
+
std::cout << " sample_rate: " << properties->sampleRate() << " (Hz)" << std::endl;
|
49
|
+
std::cout << " channels: " << properties->channels() << std::endl;
|
50
|
+
}
|
51
|
+
|
52
|
+
void dump_wav_properties(RIFF::WAV::Properties *properties)
|
53
|
+
{
|
54
|
+
std::cout << " WAV-specific Properties" << std::endl;
|
55
|
+
std::cout << " sample_width: " << properties->sampleWidth() << " (bits)" << std::endl;
|
56
|
+
}
|
57
|
+
|
58
|
+
int main(int argc, char **argv) {
|
59
|
+
if (argc != 2) {
|
60
|
+
std::cout << "usage: " << argv[0] << " file.wav" << std::endl;
|
61
|
+
exit(1);
|
62
|
+
}
|
63
|
+
char *filename = argv[1];
|
64
|
+
|
65
|
+
std::cout << "WAV file '" << filename << "'..." << std::endl;
|
66
|
+
|
67
|
+
RIFF::WAV::File file(filename);
|
68
|
+
|
69
|
+
dump_id3v2(file.tag());
|
70
|
+
dump_audio_properties(file.audioProperties());
|
71
|
+
dump_wav_properties(file.audioProperties());
|
72
|
+
}
|
73
|
+
|
74
|
+
// vim: set filetype=cpp sw=2 ts=2 expandtab:
|
Binary file
|
data/test/file_test.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class TestFile < Test::Unit::TestCase
|
4
|
+
context "The sample.mp3 file" do
|
5
|
+
setup do
|
6
|
+
@mpeg_file = TagLib::MPEG::File.new("test/data/sample.mp3", false)
|
7
|
+
end
|
8
|
+
|
9
|
+
context "filename" do
|
10
|
+
should "be the right name" do
|
11
|
+
assert_equal 'test/data/sample.mp3', @mpeg_file.name
|
12
|
+
end
|
13
|
+
|
14
|
+
if HAVE_ENCODING
|
15
|
+
should "have the right encoding" do
|
16
|
+
assert_equal Encoding.find('filesystem'), @mpeg_file.name.encoding
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class TestID3v2UnknownFrames < Test::Unit::TestCase
|
4
|
+
context "UnknownFrame" do
|
5
|
+
setup do
|
6
|
+
read_properties = false
|
7
|
+
@file = TagLib::MPEG::File.new("test/data/sample.mp3", read_properties)
|
8
|
+
@tag = @file.id3v2_tag
|
9
|
+
end
|
10
|
+
|
11
|
+
should "should be returned with correct class" do
|
12
|
+
f = TagLib::ID3v2::UnknownFrame.new("TDAT")
|
13
|
+
assert_not_nil f
|
14
|
+
@tag.add_frame(f)
|
15
|
+
frames = @tag.frame_list("TDAT")
|
16
|
+
tdat = frames.first
|
17
|
+
assert_not_nil tdat
|
18
|
+
# By looking at ID alone, it would have returned a
|
19
|
+
# TextIdentificationFrame. So make sure the correct
|
20
|
+
# class is returned here, because it would result in
|
21
|
+
# segfaults when calling methods on it.
|
22
|
+
assert_equal TagLib::ID3v2::UnknownFrame, tdat.class
|
23
|
+
end
|
24
|
+
|
25
|
+
teardown do
|
26
|
+
@file.close
|
27
|
+
@file = nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class WAVExamples < Test::Unit::TestCase
|
4
|
+
|
5
|
+
DATA_FILE_PREFIX = "test/data/wav-"
|
6
|
+
|
7
|
+
context "TagLib::RIFF::WAV::File" do
|
8
|
+
|
9
|
+
should "Run TagLib::RIFF::WAV::File examples" do
|
10
|
+
|
11
|
+
|
12
|
+
# Reading the title
|
13
|
+
|
14
|
+
title = TagLib::RIFF::WAV::File.open("#{DATA_FILE_PREFIX}sample.wav") do |file|
|
15
|
+
file.tag.title
|
16
|
+
end
|
17
|
+
|
18
|
+
# Reading WAV-specific audio properties
|
19
|
+
|
20
|
+
TagLib::RIFF::WAV::File.open("#{DATA_FILE_PREFIX}sample.wav") do |file|
|
21
|
+
file.audio_properties.sample_width #=> 8
|
22
|
+
end
|
23
|
+
|
24
|
+
# Saving ID3v2 cover-art to disk
|
25
|
+
|
26
|
+
TagLib::RIFF::WAV::File.open("#{DATA_FILE_PREFIX}sample.wav") do |file|
|
27
|
+
id3v2_tag = file.tag
|
28
|
+
cover = id3v2_tag.frame_list('APIC').first
|
29
|
+
ext = cover.mime_type.rpartition('/')[2]
|
30
|
+
File.open("#{DATA_FILE_PREFIX}cover-art.#{ext}", "wb") { |f| f.write cover.picture }
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
# checks
|
35
|
+
assert_equal "WAV Dummy Track Title", title
|
36
|
+
assert_equal true, File.exist?("#{DATA_FILE_PREFIX}cover-art.jpeg")
|
37
|
+
FileUtils.rm("#{DATA_FILE_PREFIX}cover-art.jpeg")
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class WAVFileTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
SAMPLE_FILE = "test/data/wav-sample.wav"
|
6
|
+
PICTURE_FILE = "test/data/globe_east_540.jpg"
|
7
|
+
|
8
|
+
context "TagLib::RIFF::WAV::File" do
|
9
|
+
setup do
|
10
|
+
@file = TagLib::RIFF::WAV::File.new(SAMPLE_FILE)
|
11
|
+
@tag = @file.tag
|
12
|
+
end
|
13
|
+
|
14
|
+
should "open" do
|
15
|
+
assert_not_nil @file
|
16
|
+
end
|
17
|
+
|
18
|
+
should "have an ID3v2 tag" do
|
19
|
+
assert_not_nil @tag
|
20
|
+
assert_equal TagLib::ID3v2::Tag, @tag.class
|
21
|
+
end
|
22
|
+
|
23
|
+
should "contain basic tag information" do
|
24
|
+
assert_equal "WAV Dummy Track Title", @tag.title
|
25
|
+
assert_equal "WAV Dummy Artist Name", @tag.artist
|
26
|
+
assert_equal "WAV Dummy Album Title", @tag.album
|
27
|
+
assert_equal "WAV Dummy Comment", @tag.comment
|
28
|
+
assert_equal "Jazz", @tag.genre
|
29
|
+
assert_equal 2014, @tag.year
|
30
|
+
assert_equal 5, @tag.track
|
31
|
+
assert_equal false, @tag.empty?
|
32
|
+
end
|
33
|
+
|
34
|
+
context "APIC frame" do
|
35
|
+
setup do
|
36
|
+
@picture_data = File.open(PICTURE_FILE, 'rb') { |f| f.read }
|
37
|
+
@apic = @tag.frame_list('APIC').first
|
38
|
+
end
|
39
|
+
|
40
|
+
should "exist" do
|
41
|
+
assert_not_nil @apic
|
42
|
+
assert_equal TagLib::ID3v2::AttachedPictureFrame, @apic.class
|
43
|
+
end
|
44
|
+
|
45
|
+
should "have a type" do
|
46
|
+
assert_equal TagLib::ID3v2::AttachedPictureFrame::FrontCover, @apic.type
|
47
|
+
end
|
48
|
+
|
49
|
+
should "have a mime type" do
|
50
|
+
assert_equal "image/jpeg", @apic.mime_type
|
51
|
+
end
|
52
|
+
|
53
|
+
should "have picture bytes" do
|
54
|
+
assert_equal 61649, @apic.picture.size
|
55
|
+
assert_equal @picture_data, @apic.picture
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "audio properties" do
|
60
|
+
setup do
|
61
|
+
@properties = @file.audio_properties
|
62
|
+
end
|
63
|
+
|
64
|
+
should "exist" do
|
65
|
+
assert_not_nil @properties
|
66
|
+
end
|
67
|
+
|
68
|
+
should "contain basic information" do
|
69
|
+
assert_equal 0, @properties.length
|
70
|
+
assert_equal 88, @properties.bitrate
|
71
|
+
assert_equal 11025, @properties.sample_rate
|
72
|
+
assert_equal 1, @properties.channels
|
73
|
+
end
|
74
|
+
|
75
|
+
should "contain WAV-specific information" do
|
76
|
+
assert_equal 8, @properties.sample_width
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
teardown do
|
81
|
+
@file.close
|
82
|
+
@file = nil
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "TagLib::RIFF::WAV::File.open" do
|
87
|
+
should "have open method" do
|
88
|
+
title = nil
|
89
|
+
TagLib::RIFF::WAV::File.open(SAMPLE_FILE, false) do |file|
|
90
|
+
title = file.tag.title
|
91
|
+
end
|
92
|
+
assert_equal "WAV Dummy Track Title", title
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
|
3
|
+
class WAVFileWriteTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
SAMPLE_FILE = "test/data/wav-sample.wav"
|
6
|
+
OUTPUT_FILE = "test/data/_output.wav"
|
7
|
+
PICTURE_FILE = "test/data/globe_east_90.jpg"
|
8
|
+
|
9
|
+
def reloaded
|
10
|
+
TagLib::RIFF::WAV::File.open(OUTPUT_FILE, false) do |file|
|
11
|
+
yield file
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "TagLib::RIFF::WAV::File" do
|
16
|
+
setup do
|
17
|
+
FileUtils.cp SAMPLE_FILE, OUTPUT_FILE
|
18
|
+
@file = TagLib::RIFF::WAV::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 "have one picture frame" do
|
37
|
+
assert_equal 2, @file.tag.frame_list('APIC').size
|
38
|
+
end
|
39
|
+
|
40
|
+
should "be able to remove all picture frames" do
|
41
|
+
@file.tag.remove_frames('APIC')
|
42
|
+
success = @file.save
|
43
|
+
assert success
|
44
|
+
@file.close
|
45
|
+
@file = nil
|
46
|
+
|
47
|
+
reloaded do |file|
|
48
|
+
assert_equal 0, file.tag.frame_list('APIC').size
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
should "be able to add a picture frame" do
|
53
|
+
picture_data = File.open(PICTURE_FILE, 'rb') { |f| f.read }
|
54
|
+
|
55
|
+
apic = TagLib::ID3v2::AttachedPictureFrame.new
|
56
|
+
apic.mime_type = "image/jpeg"
|
57
|
+
apic.description = "desc"
|
58
|
+
apic.text_encoding = TagLib::String::UTF8
|
59
|
+
apic.picture = picture_data
|
60
|
+
apic.type = TagLib::ID3v2::AttachedPictureFrame::BackCover
|
61
|
+
|
62
|
+
@file.tag.add_frame(apic)
|
63
|
+
success = @file.save
|
64
|
+
assert success
|
65
|
+
@file.close
|
66
|
+
@file = nil
|
67
|
+
|
68
|
+
reloaded do |file|
|
69
|
+
assert_equal 3, file.tag.frame_list('APIC').size
|
70
|
+
end
|
71
|
+
|
72
|
+
reloaded do |file|
|
73
|
+
written_apic = file.tag.frame_list("APIC")[2]
|
74
|
+
assert_equal "image/jpeg", written_apic.mime_type
|
75
|
+
assert_equal "desc", written_apic.description
|
76
|
+
assert_equal picture_data, written_apic.picture
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
teardown do
|
81
|
+
if @file
|
82
|
+
@file.close
|
83
|
+
@file = nil
|
84
|
+
end
|
85
|
+
FileUtils.rm OUTPUT_FILE
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
metadata
CHANGED
@@ -1,107 +1,93 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taglib-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.7.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Robin Stocker
|
9
8
|
- Jacob Vosmaer
|
9
|
+
- Thomas Chevereau
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2014-08-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
18
|
requirements:
|
20
|
-
- - ~>
|
19
|
+
- - "~>"
|
21
20
|
- !ruby/object:Gem::Version
|
22
21
|
version: '1.2'
|
23
22
|
type: :development
|
24
23
|
prerelease: false
|
25
24
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
25
|
requirements:
|
28
|
-
- - ~>
|
26
|
+
- - "~>"
|
29
27
|
- !ruby/object:Gem::Version
|
30
28
|
version: '1.2'
|
31
29
|
- !ruby/object:Gem::Dependency
|
32
30
|
name: rake-compiler
|
33
31
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
32
|
requirements:
|
36
|
-
- - ~>
|
33
|
+
- - "~>"
|
37
34
|
- !ruby/object:Gem::Version
|
38
|
-
version: '0.
|
35
|
+
version: '0.9'
|
39
36
|
type: :development
|
40
37
|
prerelease: false
|
41
38
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
39
|
requirements:
|
44
|
-
- - ~>
|
40
|
+
- - "~>"
|
45
41
|
- !ruby/object:Gem::Version
|
46
|
-
version: '0.
|
42
|
+
version: '0.9'
|
47
43
|
- !ruby/object:Gem::Dependency
|
48
44
|
name: shoulda-context
|
49
45
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
46
|
requirements:
|
52
|
-
- - ~>
|
47
|
+
- - "~>"
|
53
48
|
- !ruby/object:Gem::Version
|
54
49
|
version: '1.0'
|
55
50
|
type: :development
|
56
51
|
prerelease: false
|
57
52
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
53
|
requirements:
|
60
|
-
- - ~>
|
54
|
+
- - "~>"
|
61
55
|
- !ruby/object:Gem::Version
|
62
56
|
version: '1.0'
|
63
57
|
- !ruby/object:Gem::Dependency
|
64
58
|
name: yard
|
65
59
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
60
|
requirements:
|
68
|
-
- - ~>
|
61
|
+
- - "~>"
|
69
62
|
- !ruby/object:Gem::Version
|
70
63
|
version: '0.7'
|
71
64
|
type: :development
|
72
65
|
prerelease: false
|
73
66
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
67
|
requirements:
|
76
|
-
- - ~>
|
68
|
+
- - "~>"
|
77
69
|
- !ruby/object:Gem::Version
|
78
70
|
version: '0.7'
|
79
71
|
- !ruby/object:Gem::Dependency
|
80
72
|
name: kramdown
|
81
73
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
74
|
requirements:
|
84
|
-
- - ~>
|
75
|
+
- - "~>"
|
85
76
|
- !ruby/object:Gem::Version
|
86
77
|
version: '1.0'
|
87
78
|
type: :development
|
88
79
|
prerelease: false
|
89
80
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
81
|
requirements:
|
92
|
-
- - ~>
|
82
|
+
- - "~>"
|
93
83
|
- !ruby/object:Gem::Version
|
94
84
|
version: '1.0'
|
95
|
-
description:
|
96
|
-
|
85
|
+
description: |
|
86
|
+
Ruby interface for the taglib C++ library, for reading and writing
|
97
87
|
meta-data (tags) of many audio formats.
|
98
88
|
|
99
|
-
|
100
89
|
In contrast to other libraries, this one wraps the C++ API using SWIG,
|
101
|
-
|
102
90
|
not only the minimal C API. This means that all tags can be accessed.
|
103
|
-
|
104
|
-
'
|
105
91
|
email:
|
106
92
|
- robin@nibor.org
|
107
93
|
executables: []
|
@@ -114,12 +100,14 @@ extensions:
|
|
114
100
|
- ext/taglib_vorbis/extconf.rb
|
115
101
|
- ext/taglib_flac/extconf.rb
|
116
102
|
- ext/taglib_mp4/extconf.rb
|
103
|
+
- ext/taglib_aiff/extconf.rb
|
104
|
+
- ext/taglib_wav/extconf.rb
|
117
105
|
extra_rdoc_files:
|
118
106
|
- CHANGES.md
|
119
107
|
- LICENSE.txt
|
120
108
|
- README.md
|
121
109
|
files:
|
122
|
-
- .yardopts
|
110
|
+
- ".yardopts"
|
123
111
|
- CHANGES.md
|
124
112
|
- Gemfile
|
125
113
|
- Guardfile
|
@@ -127,6 +115,7 @@ files:
|
|
127
115
|
- README.md
|
128
116
|
- Rakefile
|
129
117
|
- docs/default/fulldoc/html/css/common.css
|
118
|
+
- docs/taglib/aiff.rb
|
130
119
|
- docs/taglib/base.rb
|
131
120
|
- docs/taglib/flac.rb
|
132
121
|
- docs/taglib/id3v1.rb
|
@@ -134,8 +123,13 @@ files:
|
|
134
123
|
- docs/taglib/mp4.rb
|
135
124
|
- docs/taglib/mpeg.rb
|
136
125
|
- docs/taglib/ogg.rb
|
126
|
+
- docs/taglib/riff.rb
|
137
127
|
- docs/taglib/vorbis.rb
|
128
|
+
- docs/taglib/wav.rb
|
138
129
|
- ext/extconf_common.rb
|
130
|
+
- ext/taglib_aiff/extconf.rb
|
131
|
+
- ext/taglib_aiff/taglib_aiff.i
|
132
|
+
- ext/taglib_aiff/taglib_aiff_wrap.cxx
|
139
133
|
- ext/taglib_base/extconf.rb
|
140
134
|
- ext/taglib_base/includes.i
|
141
135
|
- ext/taglib_base/taglib_base.i
|
@@ -162,9 +156,13 @@ files:
|
|
162
156
|
- ext/taglib_vorbis/extconf.rb
|
163
157
|
- ext/taglib_vorbis/taglib_vorbis.i
|
164
158
|
- ext/taglib_vorbis/taglib_vorbis_wrap.cxx
|
159
|
+
- ext/taglib_wav/extconf.rb
|
160
|
+
- ext/taglib_wav/taglib_wav.i
|
161
|
+
- ext/taglib_wav/taglib_wav_wrap.cxx
|
165
162
|
- ext/valgrind-suppressions.txt
|
166
163
|
- ext/win.cmake
|
167
164
|
- lib/taglib.rb
|
165
|
+
- lib/taglib/aiff.rb
|
168
166
|
- lib/taglib/base.rb
|
169
167
|
- lib/taglib/flac.rb
|
170
168
|
- lib/taglib/id3v1.rb
|
@@ -174,14 +172,19 @@ files:
|
|
174
172
|
- lib/taglib/ogg.rb
|
175
173
|
- lib/taglib/version.rb
|
176
174
|
- lib/taglib/vorbis.rb
|
175
|
+
- lib/taglib/wav.rb
|
177
176
|
- taglib-ruby.gemspec
|
178
177
|
- tasks/docs_coverage.rake
|
179
178
|
- tasks/ext.rake
|
180
179
|
- tasks/gemspec_check.rake
|
181
180
|
- tasks/swig.rake
|
181
|
+
- test/aiff_examples_test.rb
|
182
|
+
- test/aiff_file_test.rb
|
183
|
+
- test/aiff_file_write_test.rb
|
182
184
|
- test/base_test.rb
|
183
185
|
- test/data/Makefile
|
184
186
|
- test/data/add-relative-volume.cpp
|
187
|
+
- test/data/aiff-sample.aiff
|
185
188
|
- test/data/crash.mp3
|
186
189
|
- test/data/flac-create.cpp
|
187
190
|
- test/data/flac.flac
|
@@ -197,12 +200,16 @@ files:
|
|
197
200
|
- test/data/unicode.mp3
|
198
201
|
- test/data/vorbis-create.cpp
|
199
202
|
- test/data/vorbis.oga
|
200
|
-
- test/
|
203
|
+
- test/data/wav-create.cpp
|
204
|
+
- test/data/wav-dump.cpp
|
205
|
+
- test/data/wav-sample.wav
|
206
|
+
- test/file_test.rb
|
201
207
|
- test/fileref_open_test.rb
|
202
208
|
- test/fileref_properties_test.rb
|
203
209
|
- test/fileref_write_test.rb
|
204
210
|
- test/flac_file_test.rb
|
205
211
|
- test/flac_file_write_test.rb
|
212
|
+
- test/helper.rb
|
206
213
|
- test/id3v1_tag_test.rb
|
207
214
|
- test/id3v2_frames_test.rb
|
208
215
|
- test/id3v2_header_test.rb
|
@@ -210,6 +217,7 @@ files:
|
|
210
217
|
- test/id3v2_relative_volume_test.rb
|
211
218
|
- test/id3v2_tag_test.rb
|
212
219
|
- test/id3v2_unicode_test.rb
|
220
|
+
- test/id3v2_unknown_frames_test.rb
|
213
221
|
- test/id3v2_write_test.rb
|
214
222
|
- test/mp4_file_test.rb
|
215
223
|
- test/mp4_file_write_test.rb
|
@@ -219,37 +227,33 @@ files:
|
|
219
227
|
- test/unicode_filename_test.rb
|
220
228
|
- test/vorbis_file_test.rb
|
221
229
|
- test/vorbis_tag_test.rb
|
230
|
+
- test/wav_examples_test.rb
|
231
|
+
- test/wav_file_test.rb
|
232
|
+
- test/wav_file_write_test.rb
|
222
233
|
homepage: http://robinst.github.io/taglib-ruby/
|
223
234
|
licenses:
|
224
235
|
- MIT
|
236
|
+
metadata: {}
|
225
237
|
post_install_message:
|
226
238
|
rdoc_options: []
|
227
239
|
require_paths:
|
228
240
|
- lib
|
229
241
|
required_ruby_version: !ruby/object:Gem::Requirement
|
230
|
-
none: false
|
231
242
|
requirements:
|
232
|
-
- -
|
243
|
+
- - ">="
|
233
244
|
- !ruby/object:Gem::Version
|
234
245
|
version: '0'
|
235
|
-
segments:
|
236
|
-
- 0
|
237
|
-
hash: -3989506221310826679
|
238
246
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
|
-
none: false
|
240
247
|
requirements:
|
241
|
-
- -
|
248
|
+
- - ">="
|
242
249
|
- !ruby/object:Gem::Version
|
243
250
|
version: '0'
|
244
|
-
segments:
|
245
|
-
- 0
|
246
|
-
hash: -3989506221310826679
|
247
251
|
requirements:
|
248
252
|
- taglib (libtag1-dev in Debian/Ubuntu, taglib-devel in Fedora/RHEL)
|
249
253
|
rubyforge_project:
|
250
|
-
rubygems_version:
|
254
|
+
rubygems_version: 2.2.2
|
251
255
|
signing_key:
|
252
|
-
specification_version:
|
256
|
+
specification_version: 4
|
253
257
|
summary: Ruby interface for the taglib C++ library
|
254
258
|
test_files: []
|
255
259
|
has_rdoc:
|