lame 0.0.3 → 0.0.5

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.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +47 -0
  3. data/.travis.yml +3 -4
  4. data/README.md +51 -19
  5. data/docs/lame-3.101.h +1357 -0
  6. data/lame.gemspec +2 -1
  7. data/lib/lame/buffer.rb +1 -1
  8. data/lib/lame/encoder.rb +10 -11
  9. data/lib/lame/encoding/interleaved_int_buffer_encoder.rb +15 -0
  10. data/lib/lame/encoding/long_buffer_encoder.rb +1 -1
  11. data/lib/lame/encoding/stereo_buffer_encoder.rb +1 -0
  12. data/lib/lame/ffi/functions.rb +99 -38
  13. data/lib/lame/ffi.rb +2 -0
  14. data/lib/lame/version.rb +1 -1
  15. data/lib/lame.rb +2 -0
  16. data/spec/buffer_spec.rb +8 -8
  17. data/spec/configuration_spec.rb +76 -76
  18. data/spec/decoder_spec.rb +34 -34
  19. data/spec/decoding/decoded_frame_spec.rb +7 -7
  20. data/spec/decoding/id3_tag_parser_spec.rb +3 -3
  21. data/spec/decoding/mp3_data_header_parser_spec.rb +21 -21
  22. data/spec/decoding/mpeg_audio_frame_finder_spec.rb +15 -15
  23. data/spec/decoding/mpeg_audio_frame_matcher_spec.rb +2 -2
  24. data/spec/decoding/single_frame_decoder_spec.rb +36 -35
  25. data/spec/decoding/stream_decoder_spec.rb +10 -10
  26. data/spec/delegation_spec.rb +37 -37
  27. data/spec/encoder_spec.rb +100 -100
  28. data/spec/encoding/flusher_spec.rb +16 -16
  29. data/spec/encoding/id3_spec.rb +38 -38
  30. data/spec/encoding/interleaved_buffer_encoder_spec.rb +32 -25
  31. data/spec/encoding/stereo_buffer_encoder_spec.rb +34 -33
  32. data/spec/encoding/vbr_info_spec.rb +16 -16
  33. data/spec/ffi/decode_flags_spec.rb +3 -2
  34. data/spec/ffi/encoding_spec.rb +22 -22
  35. data/spec/ffi/global_flags_spec.rb +166 -160
  36. data/spec/ffi/id3tag_spec.rb +26 -26
  37. data/spec/ffi/mp3_data_spec.rb +3 -3
  38. data/spec/integration/encoding_spec.rb +75 -3
  39. data/spec/integration/id3_tags_spec.rb +18 -18
  40. data/spec/lib/custom_matchers.rb +4 -4
  41. data/spec/lib/wave_file_generator.rb +9 -9
  42. data/spec/spec_helper.rb +14 -10
  43. metadata +58 -67
@@ -20,75 +20,75 @@ module LAME
20
20
 
21
21
  LAME.id3tag_genre_list(genre_collector_callback, nil)
22
22
 
23
- genres.should have(148).items
24
- genres[0].should eql "Blues"
25
- genres[147].should eql "SynthPop"
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).should eql nil
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).should eql nil
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).should eql nil
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).should eql nil
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).should eql nil
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).should eql nil
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).should eql nil
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")).should eql nil
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")).should eql nil
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")).should eql nil
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")).should eql nil
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")).should eql nil
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")).should eql 0
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")).should eql -1
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")).should eql 0
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")).should eql 0
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
@@ -100,10 +100,10 @@ module LAME
100
100
 
101
101
  # fake JPG image
102
102
  buffer = ::FFI::MemoryPointer.new(:char, buffer_size)
103
- buffer.put_char(0, 0xff)
104
- buffer.put_char(1, 0xd8)
103
+ buffer.put_uint8(0, 0xff)
104
+ buffer.put_uint8(1, 0xd8)
105
105
 
106
- LAME.id3tag_set_albumart(@flags_pointer, buffer, buffer_size).should eql 0
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).should eql 128
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).should eql 38
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.should have_flag(:write_id3tag_automatic).with_value(1).for(@flags_pointer)
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.should be_able_to_set(:write_id3tag_automatic).to(0).for(@flags_pointer).and_return(nil)
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
@@ -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.should eql :stereo
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.should eql :mono
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.should eql 44100
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?.should be_true
17
- info.hastag2?.should be_false
16
+ expect(info.hastag1?).to be_truthy
17
+ expect(info.hastag2?).to be_falsy
18
18
 
19
19
  tags = info.tag1
20
- tags["title"].should eql "title"
21
- tags["artist"].should eql "artist"
22
- tags["album"].should eql "album"
23
- tags["year"].should eql 2013
24
- tags["comments"].should eql "comment"
25
- tags["tracknum"].should eql 42
26
- tags["genre_s"].should eql "Rock"
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?.should be_true
35
- info.hastag2?.should be_true
34
+ expect(info.hastag1?).to be_truthy
35
+ expect(info.hastag2?).to be_truthy
36
36
 
37
37
  tags = info.tag2
38
- tags["TIT2"].should eql "title"
39
- tags["TPE1"].should eql "artist"
40
- tags["TALB"].should eql "album"
41
- tags["TYER"].should eql "2013"
42
- tags["COMM"].should eql "comment"
43
- tags["TRCK"].should eql "42"
44
- tags["TCON"].should eql "Rock"
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
 
@@ -56,7 +56,7 @@ RSpec::Matchers.define :have_getter do |expected|
56
56
  has_value?(actual, expected)
57
57
  end
58
58
 
59
- failure_message_for_should do |actual|
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.should_receive(:"lame_set_#{target}").with(subject.global_flags, anything)
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.should_receive(:"lame_get_#{target}").with(subject.global_flags)
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
- failure_message_for_should do |actual|
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, :bitrate, :length, :hertz
2
+ attr_accessor :mode, :bits, :sample_rate, :length, :hertz
3
3
 
4
4
  def initialize(options = {})
5
- @mode = options[:mode] || :stereo
6
- @bits = options[:bits] || 16
7
- @bitrate = options[:bitate] || 44100
8
- @length = options[:length] || 1
9
- @hertz = options[:hertz] || 440
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, bitrate)
15
+ format = WaveFile::Format.new(mode, pcm_type, sample_rate)
16
16
  WaveFile::Writer.new(wav_file.path, format) do |writer|
17
- samples = (0...bitrate*length).map do |offset|
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
- bitrate / hertz
34
+ sample_rate / hertz
35
35
  end
36
36
 
37
37
  def pcm_type
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,18 @@
1
- if RUBY_DESCRIPTION =~ /\Aruby 1.9/
1
+ if RUBY_DESCRIPTION =~ /\Aruby 3.4/
2
2
  require 'simplecov'
3
- require 'coveralls'
4
-
5
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
6
- SimpleCov::Formatter::HTMLFormatter,
7
- Coveralls::SimpleCov::Formatter
8
- ]
9
- SimpleCov.start do
10
- add_filter "/spec/"
3
+ require 'simplecov-lcov'
4
+
5
+ # Configure simplecov-lcov to generate a single lcov.info file
6
+ SimpleCov::Formatter::LcovFormatter.config do |config|
7
+ config.report_with_single_file = true
8
+ config.single_report_path = 'coverage/lcov.info'
9
+ end
10
+
11
+ # Set SimpleCov to use the LCOV formatter
12
+ SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
13
+
14
+ SimpleCov.start do "test"
15
+ add_filter '/spec/' # Exclude spec files from coverage statistics
11
16
  end
12
17
  end
13
18
 
@@ -19,7 +24,6 @@ require 'lib/setter_getter'
19
24
  require 'lib/custom_matchers'
20
25
 
21
26
  RSpec.configure do |config|
22
- config.treat_symbols_as_metadata_keys_with_true_values = true
23
27
  config.run_all_when_everything_filtered = true
24
28
  config.filter_run :focus
25
29
  config.order = 'random'
metadata CHANGED
@@ -1,128 +1,126 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lame
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.0.3
4
+ version: 0.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Roel van Dijk
9
- autorequire:
10
8
  bindir: bin
11
9
  cert_chain: []
12
- date: 2013-04-09 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
13
11
  dependencies:
14
12
  - !ruby/object:Gem::Dependency
13
+ name: ffi
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
15
19
  type: :runtime
16
20
  prerelease: false
17
- name: ffi
18
21
  version_requirements: !ruby/object:Gem::Requirement
19
22
  requirements:
20
- - - ! '>='
23
+ - - ">="
21
24
  - !ruby/object:Gem::Version
22
25
  version: '0'
23
- none: false
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
24
28
  requirement: !ruby/object:Gem::Requirement
25
29
  requirements:
26
- - - ! '>='
30
+ - - ">="
27
31
  - !ruby/object:Gem::Version
28
32
  version: '0'
29
- none: false
30
- - !ruby/object:Gem::Dependency
31
33
  type: :development
32
34
  prerelease: false
33
- name: rake
34
35
  version_requirements: !ruby/object:Gem::Requirement
35
36
  requirements:
36
- - - ! '>='
37
+ - - ">="
37
38
  - !ruby/object:Gem::Version
38
39
  version: '0'
39
- none: false
40
+ - !ruby/object:Gem::Dependency
41
+ name: rspec
40
42
  requirement: !ruby/object:Gem::Requirement
41
43
  requirements:
42
- - - ! '>='
44
+ - - ">="
43
45
  - !ruby/object:Gem::Version
44
46
  version: '0'
45
- none: false
46
- - !ruby/object:Gem::Dependency
47
47
  type: :development
48
48
  prerelease: false
49
- name: rspec
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
- - - ! '>='
51
+ - - ">="
53
52
  - !ruby/object:Gem::Version
54
53
  version: '0'
55
- none: false
54
+ - !ruby/object:Gem::Dependency
55
+ name: pry
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ! '>='
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
- none: false
62
- - !ruby/object:Gem::Dependency
63
61
  type: :development
64
62
  prerelease: false
65
- name: pry
66
63
  version_requirements: !ruby/object:Gem::Requirement
67
64
  requirements:
68
- - - ! '>='
65
+ - - ">="
69
66
  - !ruby/object:Gem::Version
70
67
  version: '0'
71
- none: false
68
+ - !ruby/object:Gem::Dependency
69
+ name: wavefile
72
70
  requirement: !ruby/object:Gem::Requirement
73
71
  requirements:
74
- - - ! '>='
72
+ - - ">="
75
73
  - !ruby/object:Gem::Version
76
74
  version: '0'
77
- none: false
78
- - !ruby/object:Gem::Dependency
79
75
  type: :development
80
76
  prerelease: false
81
- name: wavefile
82
77
  version_requirements: !ruby/object:Gem::Requirement
83
78
  requirements:
84
- - - ! '>='
79
+ - - ">="
85
80
  - !ruby/object:Gem::Version
86
81
  version: '0'
87
- none: false
82
+ - !ruby/object:Gem::Dependency
83
+ name: ruby-mp3info
88
84
  requirement: !ruby/object:Gem::Requirement
89
85
  requirements:
90
- - - ! '>='
86
+ - - ">="
91
87
  - !ruby/object:Gem::Version
92
88
  version: '0'
93
- none: false
94
- - !ruby/object:Gem::Dependency
95
89
  type: :development
96
90
  prerelease: false
97
- name: ruby-mp3info
98
91
  version_requirements: !ruby/object:Gem::Requirement
99
92
  requirements:
100
- - - ! '>='
93
+ - - ">="
101
94
  - !ruby/object:Gem::Version
102
95
  version: '0'
103
- none: false
96
+ - !ruby/object:Gem::Dependency
97
+ name: simplecov
104
98
  requirement: !ruby/object:Gem::Requirement
105
99
  requirements:
106
- - - ! '>='
100
+ - - "~>"
107
101
  - !ruby/object:Gem::Version
108
- version: '0'
109
- none: false
110
- - !ruby/object:Gem::Dependency
102
+ version: '0.22'
111
103
  type: :development
112
104
  prerelease: false
113
- name: coveralls
114
105
  version_requirements: !ruby/object:Gem::Requirement
115
106
  requirements:
116
- - - ! '>='
107
+ - - "~>"
117
108
  - !ruby/object:Gem::Version
118
- version: '0'
119
- none: false
109
+ version: '0.22'
110
+ - !ruby/object:Gem::Dependency
111
+ name: simplecov-lcov
120
112
  requirement: !ruby/object:Gem::Requirement
121
113
  requirements:
122
- - - ! '>='
114
+ - - "~>"
123
115
  - !ruby/object:Gem::Version
124
- version: '0'
125
- none: false
116
+ version: '0.8'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.8'
126
124
  description: FFI powered library for the LAME MP3 encoder.
127
125
  email:
128
126
  - roel@rustradio.org
@@ -130,15 +128,17 @@ executables: []
130
128
  extensions: []
131
129
  extra_rdoc_files: []
132
130
  files:
133
- - .gitignore
134
- - .rspec
135
- - .rvmrc
136
- - .travis.yml
131
+ - ".github/workflows/ci.yml"
132
+ - ".gitignore"
133
+ - ".rspec"
134
+ - ".rvmrc"
135
+ - ".travis.yml"
137
136
  - Gemfile
138
137
  - LICENSE.txt
139
138
  - README.md
140
139
  - Rakefile
141
140
  - docs/id3v2.4.0-structure.txt
141
+ - docs/lame-3.101.h
142
142
  - docs/lame-3.99.5.h
143
143
  - lame.gemspec
144
144
  - lib/lame.rb
@@ -159,6 +159,7 @@ files:
159
159
  - lib/lame/encoding/id3.rb
160
160
  - lib/lame/encoding/interleaved_buffer_encoder.rb
161
161
  - lib/lame/encoding/interleaved_float_buffer_encoder.rb
162
+ - lib/lame/encoding/interleaved_int_buffer_encoder.rb
162
163
  - lib/lame/encoding/interleaved_short_buffer_encoder.rb
163
164
  - lib/lame/encoding/long_buffer_encoder.rb
164
165
  - lib/lame/encoding/short_buffer_encoder.rb
@@ -205,33 +206,23 @@ files:
205
206
  - spec/spec_helper.rb
206
207
  homepage: http://github.com/rdvdijk/lame
207
208
  licenses: []
208
- post_install_message:
209
+ metadata: {}
209
210
  rdoc_options: []
210
211
  require_paths:
211
212
  - lib
212
213
  required_ruby_version: !ruby/object:Gem::Requirement
213
214
  requirements:
214
- - - ! '>='
215
+ - - ">="
215
216
  - !ruby/object:Gem::Version
216
- hash: 220624676423183308
217
- segments:
218
- - 0
219
217
  version: '0'
220
- none: false
221
218
  required_rubygems_version: !ruby/object:Gem::Requirement
222
219
  requirements:
223
- - - ! '>='
220
+ - - ">="
224
221
  - !ruby/object:Gem::Version
225
- hash: 220624676423183308
226
- segments:
227
- - 0
228
222
  version: '0'
229
- none: false
230
223
  requirements: []
231
- rubyforge_project:
232
- rubygems_version: 1.8.25
233
- signing_key:
234
- specification_version: 3
224
+ rubygems_version: 3.6.9
225
+ specification_version: 4
235
226
  summary: Easily encode MP3 files using the LAME MP3 encoder.
236
227
  test_files:
237
228
  - spec/buffer_spec.rb