lame 0.0.3 → 0.0.4
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/.travis.yml +3 -4
- data/README.md +51 -17
- data/lib/lame.rb +1 -0
- data/lib/lame/buffer.rb +1 -1
- data/lib/lame/encoder.rb +10 -11
- data/lib/lame/encoding/long_buffer_encoder.rb +1 -1
- data/lib/lame/encoding/stereo_buffer_encoder.rb +1 -0
- data/lib/lame/ffi.rb +2 -0
- data/lib/lame/version.rb +1 -1
- data/spec/buffer_spec.rb +8 -8
- data/spec/configuration_spec.rb +76 -76
- data/spec/decoder_spec.rb +34 -34
- data/spec/decoding/decoded_frame_spec.rb +7 -7
- data/spec/decoding/id3_tag_parser_spec.rb +3 -3
- data/spec/decoding/mp3_data_header_parser_spec.rb +21 -21
- data/spec/decoding/mpeg_audio_frame_finder_spec.rb +15 -15
- data/spec/decoding/mpeg_audio_frame_matcher_spec.rb +2 -2
- data/spec/decoding/single_frame_decoder_spec.rb +36 -35
- data/spec/decoding/stream_decoder_spec.rb +10 -10
- data/spec/delegation_spec.rb +37 -37
- data/spec/encoder_spec.rb +100 -100
- data/spec/encoding/flusher_spec.rb +16 -16
- data/spec/encoding/id3_spec.rb +38 -38
- data/spec/encoding/interleaved_buffer_encoder_spec.rb +25 -25
- data/spec/encoding/stereo_buffer_encoder_spec.rb +34 -33
- data/spec/encoding/vbr_info_spec.rb +16 -16
- data/spec/ffi/decode_flags_spec.rb +3 -2
- data/spec/ffi/encoding_spec.rb +22 -22
- data/spec/ffi/global_flags_spec.rb +159 -157
- data/spec/ffi/id3tag_spec.rb +24 -24
- data/spec/ffi/mp3_data_spec.rb +3 -3
- data/spec/integration/encoding_spec.rb +75 -3
- data/spec/integration/id3_tags_spec.rb +18 -18
- data/spec/lib/custom_matchers.rb +4 -4
- data/spec/lib/wave_file_generator.rb +9 -9
- data/spec/spec_helper.rb +0 -1
- metadata +38 -60
data/spec/ffi/id3tag_spec.rb
CHANGED
@@ -20,75 +20,75 @@ module LAME
|
|
20
20
|
|
21
21
|
LAME.id3tag_genre_list(genre_collector_callback, nil)
|
22
22
|
|
23
|
-
genres.
|
24
|
-
genres[0].
|
25
|
-
genres[147].
|
23
|
+
expect(genres.length).to be(148)
|
24
|
+
expect(genres[0]).to eql "Blues"
|
25
|
+
expect(genres[147]).to eql "SynthPop"
|
26
26
|
end
|
27
27
|
|
28
28
|
it "initializes" do
|
29
|
-
LAME.id3tag_init(@flags_pointer).
|
29
|
+
expect(LAME.id3tag_init(@flags_pointer)).to eql nil
|
30
30
|
end
|
31
31
|
|
32
32
|
it "adds v2" do
|
33
|
-
LAME.id3tag_add_v2(@flags_pointer).
|
33
|
+
expect(LAME.id3tag_add_v2(@flags_pointer)).to eql nil
|
34
34
|
end
|
35
35
|
|
36
36
|
it "set v1 only" do
|
37
|
-
LAME.id3tag_v1_only(@flags_pointer).
|
37
|
+
expect(LAME.id3tag_v1_only(@flags_pointer)).to eql nil
|
38
38
|
end
|
39
39
|
|
40
40
|
it "set v2 only" do
|
41
|
-
LAME.id3tag_v2_only(@flags_pointer).
|
41
|
+
expect(LAME.id3tag_v2_only(@flags_pointer)).to eql nil
|
42
42
|
end
|
43
43
|
|
44
44
|
it "pads with spaces" do
|
45
|
-
LAME.id3tag_space_v1(@flags_pointer).
|
45
|
+
expect(LAME.id3tag_space_v1(@flags_pointer)).to eql nil
|
46
46
|
end
|
47
47
|
|
48
48
|
it "pads v2 with 128 extra bytes" do
|
49
|
-
LAME.id3tag_pad_v2(@flags_pointer).
|
49
|
+
expect(LAME.id3tag_pad_v2(@flags_pointer)).to eql nil
|
50
50
|
end
|
51
51
|
|
52
52
|
it "pads v2 with extra bytes" do
|
53
|
-
LAME.id3tag_set_pad(@flags_pointer, 256).
|
53
|
+
expect(LAME.id3tag_set_pad(@flags_pointer, 256)).to eql nil
|
54
54
|
end
|
55
55
|
|
56
56
|
it "sets the title" do
|
57
|
-
LAME.id3tag_set_title(@flags_pointer, pointer_from_string("foo")).
|
57
|
+
expect(LAME.id3tag_set_title(@flags_pointer, pointer_from_string("foo"))).to eql nil
|
58
58
|
end
|
59
59
|
|
60
60
|
it "sets the artist" do
|
61
|
-
LAME.id3tag_set_artist(@flags_pointer, pointer_from_string("foo")).
|
61
|
+
expect(LAME.id3tag_set_artist(@flags_pointer, pointer_from_string("foo"))).to eql nil
|
62
62
|
end
|
63
63
|
|
64
64
|
it "sets the album" do
|
65
|
-
LAME.id3tag_set_album(@flags_pointer, pointer_from_string("foo")).
|
65
|
+
expect(LAME.id3tag_set_album(@flags_pointer, pointer_from_string("foo"))).to eql nil
|
66
66
|
end
|
67
67
|
|
68
68
|
it "sets the year" do
|
69
|
-
LAME.id3tag_set_year(@flags_pointer, pointer_from_string("foo")).
|
69
|
+
expect(LAME.id3tag_set_year(@flags_pointer, pointer_from_string("foo"))).to eql nil
|
70
70
|
end
|
71
71
|
|
72
72
|
it "sets the comment" do
|
73
|
-
LAME.id3tag_set_comment(@flags_pointer, pointer_from_string("foo")).
|
73
|
+
expect(LAME.id3tag_set_comment(@flags_pointer, pointer_from_string("foo"))).to eql nil
|
74
74
|
end
|
75
75
|
|
76
76
|
it "sets the track" do
|
77
|
-
LAME.id3tag_set_track(@flags_pointer, pointer_from_string("1")).
|
77
|
+
expect(LAME.id3tag_set_track(@flags_pointer, pointer_from_string("1"))).to eql 0
|
78
78
|
end
|
79
79
|
|
80
80
|
it "ignores out of range track numbers for id3" do
|
81
|
-
LAME.id3tag_set_track(@flags_pointer, pointer_from_string("256")).
|
81
|
+
expect(LAME.id3tag_set_track(@flags_pointer, pointer_from_string("256"))).to eql -1
|
82
82
|
end
|
83
83
|
|
84
84
|
it "sets the genre" do
|
85
|
-
LAME.id3tag_set_genre(@flags_pointer, pointer_from_string("Rock")).
|
85
|
+
expect(LAME.id3tag_set_genre(@flags_pointer, pointer_from_string("Rock"))).to eql 0
|
86
86
|
end
|
87
87
|
|
88
88
|
# There is a fixed set of allowed fields (see id3tag.c)
|
89
89
|
# LAME 3.99.4 fixed some bugs in setting field values, this could crash for certain tags.
|
90
90
|
it "sets the fieldvalue" do
|
91
|
-
LAME.id3tag_set_fieldvalue(@flags_pointer, pointer_from_string("TIT2=foofoo")).
|
91
|
+
expect(LAME.id3tag_set_fieldvalue(@flags_pointer, pointer_from_string("TIT2=foofoo"))).to eql 0
|
92
92
|
end
|
93
93
|
|
94
94
|
# it "sets the fieldvalue (utf16)" do
|
@@ -103,7 +103,7 @@ module LAME
|
|
103
103
|
buffer.put_char(0, 0xff)
|
104
104
|
buffer.put_char(1, 0xd8)
|
105
105
|
|
106
|
-
LAME.id3tag_set_albumart(@flags_pointer, buffer, buffer_size).
|
106
|
+
expect(LAME.id3tag_set_albumart(@flags_pointer, buffer, buffer_size)).to eql 0
|
107
107
|
end
|
108
108
|
|
109
109
|
it "creates id3v1 tag" do
|
@@ -111,7 +111,7 @@ module LAME
|
|
111
111
|
buffer = ::FFI::MemoryPointer.new(:uchar, buffer_size)
|
112
112
|
LAME.id3tag_set_title(@flags_pointer, pointer_from_string("foo"))
|
113
113
|
LAME.id3tag_set_album(@flags_pointer, pointer_from_string("bar"))
|
114
|
-
LAME.lame_get_id3v1_tag(@flags_pointer, buffer, buffer_size).
|
114
|
+
expect(LAME.lame_get_id3v1_tag(@flags_pointer, buffer, buffer_size)).to eql 128
|
115
115
|
end
|
116
116
|
|
117
117
|
it "creates id3v2 tag" do
|
@@ -120,15 +120,15 @@ module LAME
|
|
120
120
|
LAME.id3tag_add_v2(@flags_pointer)
|
121
121
|
LAME.id3tag_set_title(@flags_pointer, pointer_from_string("foo"))
|
122
122
|
LAME.id3tag_set_album(@flags_pointer, pointer_from_string("bar"))
|
123
|
-
LAME.lame_get_id3v2_tag(@flags_pointer, buffer, buffer_size).
|
123
|
+
expect(LAME.lame_get_id3v2_tag(@flags_pointer, buffer, buffer_size)).to eql 38
|
124
124
|
end
|
125
125
|
|
126
126
|
it "sets id3tag automatic" do
|
127
|
-
LAME.
|
127
|
+
expect(LAME).to have_flag(:write_id3tag_automatic).with_value(1).for(@flags_pointer)
|
128
128
|
end
|
129
129
|
|
130
130
|
it "gets id3tag automatic" do
|
131
|
-
LAME.
|
131
|
+
expect(LAME).to be_able_to_set(:write_id3tag_automatic).to(0).for(@flags_pointer).and_return(nil)
|
132
132
|
end
|
133
133
|
|
134
134
|
end
|
data/spec/ffi/mp3_data_spec.rb
CHANGED
@@ -8,17 +8,17 @@ module LAME
|
|
8
8
|
|
9
9
|
it "is stereo for two channels" do
|
10
10
|
mp3_data[:stereo] = 2
|
11
|
-
mp3_data.channel_mode.
|
11
|
+
expect(mp3_data.channel_mode).to eql :stereo
|
12
12
|
end
|
13
13
|
|
14
14
|
it "is mono for one channel" do
|
15
15
|
mp3_data[:stereo] = 1
|
16
|
-
mp3_data.channel_mode.
|
16
|
+
expect(mp3_data.channel_mode).to eql :mono
|
17
17
|
end
|
18
18
|
|
19
19
|
it "has a sample rate" do
|
20
20
|
mp3_data[:samplerate] = 44100
|
21
|
-
mp3_data.sample_rate.
|
21
|
+
expect(mp3_data.sample_rate).to eql 44100
|
22
22
|
end
|
23
23
|
|
24
24
|
end
|
@@ -4,13 +4,19 @@ require 'wavefile'
|
|
4
4
|
|
5
5
|
describe "Encoding", :slow => true do
|
6
6
|
|
7
|
+
# regular 16-bit, 44.1kHz sine wave:
|
7
8
|
let(:wav_file) { WaveFileGenerator.new(:length => 2).generate }
|
8
9
|
let(:wav_path) { wav_file.path }
|
10
|
+
let(:wav_reader) { WaveFile::Reader.new(wav_path) }
|
11
|
+
|
12
|
+
# 24-bit, 192kHz sine wave:
|
13
|
+
let(:wav_file_24) { WaveFileGenerator.new(length: 2, bits: 24, sample_rate: 192000).generate }
|
14
|
+
let(:wav_path_24) { wav_file_24.path }
|
15
|
+
let(:wav_reader_24) { WaveFile::Reader.new(wav_path_24) }
|
16
|
+
|
9
17
|
let(:mp3_path_raw) { Tempfile.new("output-raw.mp3") }
|
10
18
|
let(:mp3_path_api) { Tempfile.new("output-api.mp3") }
|
11
19
|
|
12
|
-
let(:wav_reader) { WaveFile::Reader.new(wav_path) }
|
13
|
-
|
14
20
|
it "encodes a file by api" do
|
15
21
|
|
16
22
|
encoder = LAME::Encoder.new
|
@@ -87,7 +93,7 @@ describe "Encoding", :slow => true do
|
|
87
93
|
# Digest::MD5.hexdigest(File.read(mp3_path_api)).should eql "d1cd92c106e7aac4f5291fd141a19e10"
|
88
94
|
end
|
89
95
|
|
90
|
-
# This test serves as an example how to use the LAME API
|
96
|
+
# This test serves as an example how to use the LAME C-API
|
91
97
|
it "encodes a wav file" do
|
92
98
|
|
93
99
|
# setup
|
@@ -148,4 +154,70 @@ describe "Encoding", :slow => true do
|
|
148
154
|
# Digest::MD5.hexdigest(File.read(mp3_path_raw)).should eql "84a1ce7994bb4a54fc13fb5381ebac40"
|
149
155
|
end
|
150
156
|
|
157
|
+
it "encodes 24-bit source files using the long encoder" do
|
158
|
+
encoder = LAME::Encoder.new
|
159
|
+
|
160
|
+
encoder.configure do |config|
|
161
|
+
config.input_samplerate = 192000
|
162
|
+
config.id3.write_automatic = false
|
163
|
+
config.vbr.mode = :vbr_default
|
164
|
+
config.vbr.q = 0
|
165
|
+
end
|
166
|
+
|
167
|
+
File.open(mp3_path_api, "wb") do |file|
|
168
|
+
|
169
|
+
wav_reader_24.each_buffer(encoder.framesize) do |read_buffer|
|
170
|
+
# important: shift the 24-bit samples to the system's long-size (32/64-bit)
|
171
|
+
left = read_buffer.samples.map { |s| s[0] << (::LAME::FFI::LONG_SIZE-24) }
|
172
|
+
right = read_buffer.samples.map { |s| s[1] << (::LAME::FFI::LONG_SIZE-24) }
|
173
|
+
|
174
|
+
encoder.encode_long(left, right) do |mp3|
|
175
|
+
file.write mp3
|
176
|
+
end
|
177
|
+
end
|
178
|
+
encoder.flush do |flush_frame|
|
179
|
+
file.write(flush_frame)
|
180
|
+
end
|
181
|
+
|
182
|
+
encoder.vbr_frame do |vbr_frame|
|
183
|
+
file.write(vbr_frame)
|
184
|
+
end
|
185
|
+
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
it "encodes 24-bit source files using the float encoder" do
|
190
|
+
encoder = LAME::Encoder.new
|
191
|
+
|
192
|
+
encoder.configure do |config|
|
193
|
+
config.input_samplerate = 192000
|
194
|
+
config.id3.write_automatic = false
|
195
|
+
config.vbr.mode = :vbr_default
|
196
|
+
config.vbr.q = 0
|
197
|
+
end
|
198
|
+
|
199
|
+
max24 = 2**24/2.0
|
200
|
+
|
201
|
+
File.open(mp3_path_api, "wb") do |file|
|
202
|
+
|
203
|
+
wav_reader_24.each_buffer(encoder.framesize) do |read_buffer|
|
204
|
+
# important: scale the 24-bit input values to floats between -1.0 and +1.0
|
205
|
+
left = read_buffer.samples.map { |s| s[0] / max24 }
|
206
|
+
right = read_buffer.samples.map { |s| s[1] / max24 }
|
207
|
+
|
208
|
+
encoder.encode_float(left, right) do |mp3|
|
209
|
+
file.write mp3
|
210
|
+
end
|
211
|
+
end
|
212
|
+
encoder.flush do |flush_frame|
|
213
|
+
file.write(flush_frame)
|
214
|
+
end
|
215
|
+
|
216
|
+
encoder.vbr_frame do |vbr_frame|
|
217
|
+
file.write(vbr_frame)
|
218
|
+
end
|
219
|
+
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
151
223
|
end
|
@@ -13,17 +13,17 @@ describe "ID3 tags", :slow => true do
|
|
13
13
|
encode_wav_file(false)
|
14
14
|
|
15
15
|
Mp3Info.open(mp3_id3_path) do |info|
|
16
|
-
info.hastag1
|
17
|
-
info.hastag2
|
16
|
+
expect(info.hastag1?).to be_truthy
|
17
|
+
expect(info.hastag2?).to be_falsy
|
18
18
|
|
19
19
|
tags = info.tag1
|
20
|
-
tags["title"].
|
21
|
-
tags["artist"].
|
22
|
-
tags["album"].
|
23
|
-
tags["year"].
|
24
|
-
tags["comments"].
|
25
|
-
tags["tracknum"].
|
26
|
-
tags["genre_s"].
|
20
|
+
expect(tags["title"]).to eql "title"
|
21
|
+
expect(tags["artist"]).to eql "artist"
|
22
|
+
expect(tags["album"]).to eql "album"
|
23
|
+
expect(tags["year"]).to eql 2013
|
24
|
+
expect(tags["comments"]).to eql "comment"
|
25
|
+
expect(tags["tracknum"]).to eql 42
|
26
|
+
expect(tags["genre_s"]).to eql "Rock"
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -31,17 +31,17 @@ describe "ID3 tags", :slow => true do
|
|
31
31
|
encode_wav_file
|
32
32
|
|
33
33
|
Mp3Info.open(mp3_id3_path) do |info|
|
34
|
-
info.hastag1
|
35
|
-
info.hastag2
|
34
|
+
expect(info.hastag1?).to be_truthy
|
35
|
+
expect(info.hastag2?).to be_truthy
|
36
36
|
|
37
37
|
tags = info.tag2
|
38
|
-
tags["TIT2"].
|
39
|
-
tags["TPE1"].
|
40
|
-
tags["TALB"].
|
41
|
-
tags["TYER"].
|
42
|
-
tags["COMM"].
|
43
|
-
tags["TRCK"].
|
44
|
-
tags["TCON"].
|
38
|
+
expect(tags["TIT2"]).to eql "title"
|
39
|
+
expect(tags["TPE1"]).to eql "artist"
|
40
|
+
expect(tags["TALB"]).to eql "album"
|
41
|
+
expect(tags["TYER"]).to eql "2013"
|
42
|
+
expect(tags["COMM"]).to eql "comment"
|
43
|
+
expect(tags["TRCK"]).to eql "42"
|
44
|
+
expect(tags["TCON"]).to eql "Rock"
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
data/spec/lib/custom_matchers.rb
CHANGED
@@ -56,7 +56,7 @@ RSpec::Matchers.define :have_getter do |expected|
|
|
56
56
|
has_value?(actual, expected)
|
57
57
|
end
|
58
58
|
|
59
|
-
|
59
|
+
failure_message do |actual|
|
60
60
|
if !has_getter?(actual, expected)
|
61
61
|
"expected that #{actual} would have a getter for field :#{expected}"
|
62
62
|
elsif @value && !has_value?(actual, expected)
|
@@ -83,7 +83,7 @@ RSpec::Matchers.define :delegate do |from|
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def delegates_setter?
|
86
|
-
LAME.
|
86
|
+
expect(LAME).to receive(:"lame_set_#{target}").with(subject.global_flags, anything)
|
87
87
|
subject.send(:"#{from}=", double)
|
88
88
|
true
|
89
89
|
rescue => e
|
@@ -92,7 +92,7 @@ RSpec::Matchers.define :delegate do |from|
|
|
92
92
|
end
|
93
93
|
|
94
94
|
def delegates_getter?
|
95
|
-
LAME.
|
95
|
+
expect(LAME).to receive(:"lame_get_#{target}").with(subject.global_flags)
|
96
96
|
subject.send(:"#{from}")
|
97
97
|
true
|
98
98
|
rescue => e
|
@@ -100,7 +100,7 @@ RSpec::Matchers.define :delegate do |from|
|
|
100
100
|
false
|
101
101
|
end
|
102
102
|
|
103
|
-
|
103
|
+
failure_message do |actual|
|
104
104
|
"expected #{subject.class} to delegate :#{from} to LAME.lame_set_#{target}"
|
105
105
|
end
|
106
106
|
|
@@ -1,20 +1,20 @@
|
|
1
1
|
class WaveFileGenerator
|
2
|
-
attr_accessor :mode, :bits, :
|
2
|
+
attr_accessor :mode, :bits, :sample_rate, :length, :hertz
|
3
3
|
|
4
4
|
def initialize(options = {})
|
5
|
-
@mode
|
6
|
-
@bits
|
7
|
-
@
|
8
|
-
@length
|
9
|
-
@hertz
|
5
|
+
@mode = options[:mode] || :stereo
|
6
|
+
@bits = options[:bits] || 16
|
7
|
+
@sample_rate = options[:sample_rate] || 44100
|
8
|
+
@length = options[:length] || 1
|
9
|
+
@hertz = options[:hertz] || 440
|
10
10
|
end
|
11
11
|
|
12
12
|
def generate
|
13
13
|
wav_file = Tempfile.new('sine.wav')
|
14
14
|
|
15
|
-
format = WaveFile::Format.new(mode, pcm_type,
|
15
|
+
format = WaveFile::Format.new(mode, pcm_type, sample_rate)
|
16
16
|
WaveFile::Writer.new(wav_file.path, format) do |writer|
|
17
|
-
samples = (0...
|
17
|
+
samples = (0...sample_rate*length).map do |offset|
|
18
18
|
sample = (Math.sin((Math::PI*2 / scale) * offset) * max).round
|
19
19
|
[sample, sample]
|
20
20
|
end
|
@@ -31,7 +31,7 @@ class WaveFileGenerator
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def scale
|
34
|
-
|
34
|
+
sample_rate / hertz
|
35
35
|
end
|
36
36
|
|
37
37
|
def pcm_type
|
data/spec/spec_helper.rb
CHANGED
@@ -19,7 +19,6 @@ require 'lib/setter_getter'
|
|
19
19
|
require 'lib/custom_matchers'
|
20
20
|
|
21
21
|
RSpec.configure do |config|
|
22
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
23
22
|
config.run_all_when_everything_filtered = true
|
24
23
|
config.filter_run :focus
|
25
24
|
config.order = 'random'
|
metadata
CHANGED
@@ -1,128 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lame
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.0.3
|
4
|
+
version: 0.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Roel van Dijk
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-01-16 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
name: ffi
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
15
20
|
type: :runtime
|
16
21
|
prerelease: false
|
17
|
-
name: ffi
|
18
22
|
version_requirements: !ruby/object:Gem::Requirement
|
19
23
|
requirements:
|
20
|
-
- -
|
24
|
+
- - '>='
|
21
25
|
- !ruby/object:Gem::Version
|
22
26
|
version: '0'
|
23
|
-
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
24
29
|
requirement: !ruby/object:Gem::Requirement
|
25
30
|
requirements:
|
26
|
-
- -
|
31
|
+
- - '>='
|
27
32
|
- !ruby/object:Gem::Version
|
28
33
|
version: '0'
|
29
|
-
none: false
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
34
|
type: :development
|
32
35
|
prerelease: false
|
33
|
-
name: rake
|
34
36
|
version_requirements: !ruby/object:Gem::Requirement
|
35
37
|
requirements:
|
36
|
-
- -
|
38
|
+
- - '>='
|
37
39
|
- !ruby/object:Gem::Version
|
38
40
|
version: '0'
|
39
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
40
43
|
requirement: !ruby/object:Gem::Requirement
|
41
44
|
requirements:
|
42
|
-
- -
|
45
|
+
- - '>='
|
43
46
|
- !ruby/object:Gem::Version
|
44
47
|
version: '0'
|
45
|
-
none: false
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
48
|
type: :development
|
48
49
|
prerelease: false
|
49
|
-
name: rspec
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
56
57
|
requirement: !ruby/object:Gem::Requirement
|
57
58
|
requirements:
|
58
|
-
- -
|
59
|
+
- - '>='
|
59
60
|
- !ruby/object:Gem::Version
|
60
61
|
version: '0'
|
61
|
-
none: false
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
62
|
type: :development
|
64
63
|
prerelease: false
|
65
|
-
name: pry
|
66
64
|
version_requirements: !ruby/object:Gem::Requirement
|
67
65
|
requirements:
|
68
|
-
- -
|
66
|
+
- - '>='
|
69
67
|
- !ruby/object:Gem::Version
|
70
68
|
version: '0'
|
71
|
-
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: wavefile
|
72
71
|
requirement: !ruby/object:Gem::Requirement
|
73
72
|
requirements:
|
74
|
-
- -
|
73
|
+
- - '>='
|
75
74
|
- !ruby/object:Gem::Version
|
76
75
|
version: '0'
|
77
|
-
none: false
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
76
|
type: :development
|
80
77
|
prerelease: false
|
81
|
-
name: wavefile
|
82
78
|
version_requirements: !ruby/object:Gem::Requirement
|
83
79
|
requirements:
|
84
|
-
- -
|
80
|
+
- - '>='
|
85
81
|
- !ruby/object:Gem::Version
|
86
82
|
version: '0'
|
87
|
-
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: ruby-mp3info
|
88
85
|
requirement: !ruby/object:Gem::Requirement
|
89
86
|
requirements:
|
90
|
-
- -
|
87
|
+
- - '>='
|
91
88
|
- !ruby/object:Gem::Version
|
92
89
|
version: '0'
|
93
|
-
none: false
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
90
|
type: :development
|
96
91
|
prerelease: false
|
97
|
-
name: ruby-mp3info
|
98
92
|
version_requirements: !ruby/object:Gem::Requirement
|
99
93
|
requirements:
|
100
|
-
- -
|
94
|
+
- - '>='
|
101
95
|
- !ruby/object:Gem::Version
|
102
96
|
version: '0'
|
103
|
-
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
104
99
|
requirement: !ruby/object:Gem::Requirement
|
105
100
|
requirements:
|
106
|
-
- -
|
101
|
+
- - '>='
|
107
102
|
- !ruby/object:Gem::Version
|
108
103
|
version: '0'
|
109
|
-
none: false
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
104
|
type: :development
|
112
105
|
prerelease: false
|
113
|
-
name: coveralls
|
114
106
|
version_requirements: !ruby/object:Gem::Requirement
|
115
107
|
requirements:
|
116
|
-
- -
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '0'
|
119
|
-
none: false
|
120
|
-
requirement: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ! '>='
|
108
|
+
- - '>='
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '0'
|
125
|
-
none: false
|
126
111
|
description: FFI powered library for the LAME MP3 encoder.
|
127
112
|
email:
|
128
113
|
- roel@rustradio.org
|
@@ -205,33 +190,26 @@ files:
|
|
205
190
|
- spec/spec_helper.rb
|
206
191
|
homepage: http://github.com/rdvdijk/lame
|
207
192
|
licenses: []
|
193
|
+
metadata: {}
|
208
194
|
post_install_message:
|
209
195
|
rdoc_options: []
|
210
196
|
require_paths:
|
211
197
|
- lib
|
212
198
|
required_ruby_version: !ruby/object:Gem::Requirement
|
213
199
|
requirements:
|
214
|
-
- -
|
200
|
+
- - '>='
|
215
201
|
- !ruby/object:Gem::Version
|
216
|
-
hash: 220624676423183308
|
217
|
-
segments:
|
218
|
-
- 0
|
219
202
|
version: '0'
|
220
|
-
none: false
|
221
203
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
204
|
requirements:
|
223
|
-
- -
|
205
|
+
- - '>='
|
224
206
|
- !ruby/object:Gem::Version
|
225
|
-
hash: 220624676423183308
|
226
|
-
segments:
|
227
|
-
- 0
|
228
207
|
version: '0'
|
229
|
-
none: false
|
230
208
|
requirements: []
|
231
209
|
rubyforge_project:
|
232
|
-
rubygems_version:
|
210
|
+
rubygems_version: 2.0.14
|
233
211
|
signing_key:
|
234
|
-
specification_version:
|
212
|
+
specification_version: 4
|
235
213
|
summary: Easily encode MP3 files using the LAME MP3 encoder.
|
236
214
|
test_files:
|
237
215
|
- spec/buffer_spec.rb
|