taglib-ruby 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|