lame_encoder 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +45 -0
- data/lib/lame_encoder.rb +128 -0
- data/spec/lame_encoder_spec.rb +302 -0
- data/spec/test.mp3 +0 -0
- metadata +65 -0
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec/rake/spectask'
|
2
|
+
require 'rake/gempackagetask'
|
3
|
+
|
4
|
+
namespace :spec do
|
5
|
+
Spec::Rake::SpecTask.new :lame_encoder do |t|
|
6
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
7
|
+
t.spec_opts << "-f s"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
task :default => 'spec:lame_encoder'
|
12
|
+
|
13
|
+
PKG_FILES = FileList[
|
14
|
+
'lib/**/*.rb',
|
15
|
+
'spec/**/*.rb',
|
16
|
+
'spec/**/test.mp3',
|
17
|
+
'Rakefile'
|
18
|
+
]
|
19
|
+
|
20
|
+
specification = Gem::Specification.new do |spec|
|
21
|
+
spec.author = 'Chris Anderson'
|
22
|
+
spec.email = 'jchris@mfdz.com'
|
23
|
+
|
24
|
+
spec.name = 'lame_encoder'
|
25
|
+
spec.platform = Gem::Platform::RUBY
|
26
|
+
spec.version = '0.1.1'
|
27
|
+
|
28
|
+
spec.files = PKG_FILES.to_a
|
29
|
+
|
30
|
+
spec.autorequire = 'lame_encoder'
|
31
|
+
spec.add_dependency 'rake', '>= 0.7.0'
|
32
|
+
spec.add_dependency 'rspec', '0.5'
|
33
|
+
spec.requirements << "LAME (Lame Ain't an MP3 Encoder) http://www.mp3dev.org"
|
34
|
+
|
35
|
+
spec.summary = 'A simple wrapper for LAME.'
|
36
|
+
spec.description = %q{
|
37
|
+
A Ruby interface to the command line options for lame. Support for most common features.
|
38
|
+
}
|
39
|
+
spec.has_rdoc = false
|
40
|
+
end
|
41
|
+
|
42
|
+
Rake::GemPackageTask.new specification do |pkg|
|
43
|
+
pkg.need_zip = true
|
44
|
+
pkg.need_tar = true
|
45
|
+
end
|
data/lib/lame_encoder.rb
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
def Object.sequence *args
|
2
|
+
args.each do |arg|
|
3
|
+
self.call arg, rest
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
|
8
|
+
class LameEncoder
|
9
|
+
|
10
|
+
# These constants come from the LAME documentation
|
11
|
+
MP3_Bitrates = [32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320]
|
12
|
+
Sample_Rates = [8, 11.025, 12, 16, 22.05, 24, 32, 44.1, 48]
|
13
|
+
Encoding_Quality = (0..9)
|
14
|
+
VBR_Quality = (0..6)
|
15
|
+
Channels = {:mono => 'm', :stereo => 's', :joint => 'j', :auto => 'a', :mid_side => 'f'}
|
16
|
+
Replay_Gain = {:fast => "--replaygain-fast", :accurate => "--replaygain-accurate",
|
17
|
+
:none => "--noreplaygain", :clip_detect => "--clipdetect", :default => nil}
|
18
|
+
|
19
|
+
attr_accessor :options, :id3_options
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@options = {}
|
23
|
+
end
|
24
|
+
|
25
|
+
def argument_list
|
26
|
+
@options.delete :id3_version unless @id3_options
|
27
|
+
@options.collect {|k,v| v}.join(' ')
|
28
|
+
end
|
29
|
+
|
30
|
+
def command_line
|
31
|
+
raise ArgumentError, "No input file specified." unless @input_file
|
32
|
+
['lame', argument_list, @input_file, @output_file, id3_arguments].select{|x| !(x.nil? || x.empty?)}.join(' ')
|
33
|
+
end
|
34
|
+
|
35
|
+
def convert!
|
36
|
+
system command_line
|
37
|
+
end
|
38
|
+
|
39
|
+
# methods for setting options on the encoder
|
40
|
+
|
41
|
+
def sample_rate rate
|
42
|
+
raise ArgumentError unless Sample_Rates.include? rate
|
43
|
+
@options[:sample_rate] = "--resample #{rate}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def bitrate kbps
|
47
|
+
raise ArgumentError, "legal bitrates: #{MP3_Bitrates.join(', ')}" unless MP3_Bitrates.include? kbps
|
48
|
+
@options[:bitrate] = "-b #{kbps}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def encode_quality quality
|
52
|
+
quality_keys = Hash.new { |h,k| k }.merge( { :high => 2, :fast => 7 } )
|
53
|
+
quality = quality_keys[quality]
|
54
|
+
raise ArgumentError, "legal qualities: #{Encoding_Quality.to_a.join(', ')}" unless Encoding_Quality.include? quality
|
55
|
+
@options[:encode_quality] = "-q #{quality}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def vbr_quality quality
|
59
|
+
raise ArgumentError, "legal qualities: #{VBR_Quality.to_a.join(', ')}" unless VBR_Quality.include? quality
|
60
|
+
@options[:vbr_quality], @options[:vbr] = "-V #{quality}", "-v"
|
61
|
+
end
|
62
|
+
|
63
|
+
def mode channels
|
64
|
+
@options[:mode] = Channels[channels] ? "-m #{Channels[channels]}" : nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def replay_gain(gain)
|
68
|
+
@options[:replay_gain] = Replay_Gain[gain]
|
69
|
+
end
|
70
|
+
|
71
|
+
# options for dealing with the input and output files
|
72
|
+
|
73
|
+
def input_file filename
|
74
|
+
@input_file = filename
|
75
|
+
mark_as_copy! if filename =~ /\.mp3$/
|
76
|
+
end
|
77
|
+
|
78
|
+
def output_file filename
|
79
|
+
@output_file = filename
|
80
|
+
end
|
81
|
+
|
82
|
+
def decode_mp3!
|
83
|
+
@options.clear
|
84
|
+
@options[:decode_mp3] = "--decode"
|
85
|
+
@options.freeze
|
86
|
+
end
|
87
|
+
|
88
|
+
def output_ogg!
|
89
|
+
@options[:output_ogg] = "--ogg"
|
90
|
+
end
|
91
|
+
|
92
|
+
def input_mp3!
|
93
|
+
@options[:input_mp3] = "--mp3input"
|
94
|
+
mark_as_copy!
|
95
|
+
end
|
96
|
+
|
97
|
+
def input_raw(sample_rate, swapbytes = false)
|
98
|
+
@options[:input_raw] = "-r -s #{sample_rate}#{' -x' if swapbytes}"
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
def mark_as_copy!
|
103
|
+
@options[:copy] = "-o"
|
104
|
+
end
|
105
|
+
|
106
|
+
# id3 options
|
107
|
+
|
108
|
+
def id3 options
|
109
|
+
@id3_options = @id3_options ? @id3_options.merge(options) : options
|
110
|
+
end
|
111
|
+
|
112
|
+
def id3_arguments
|
113
|
+
id3_fields = { :title => 'tt', :artist => 'ta', :album => 'tl',
|
114
|
+
:year => 'ty', :comment => 'tc', :track_number => 'tn',
|
115
|
+
:genre => 'tg' }
|
116
|
+
return nil if @id3_options.nil? || @id3_options.empty?
|
117
|
+
@id3_options.select{|k,v| id3_fields[k]}.collect {|k,v| "--#{id3_fields[k]} #{v}"}.join(' ')
|
118
|
+
end
|
119
|
+
|
120
|
+
def id3_version_only version
|
121
|
+
@options[:id3_version] = "--id3v#{version}-only"
|
122
|
+
end
|
123
|
+
|
124
|
+
def id3_add_v2!
|
125
|
+
@options[:id3_version] = "--add-id3v2"
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
@@ -0,0 +1,302 @@
|
|
1
|
+
$: << File.join( File.dirname( __FILE__ ), '../lib' )
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require_gem 'rspec'
|
5
|
+
require 'lame_encoder'
|
6
|
+
|
7
|
+
context "A new LameEncoder" do
|
8
|
+
|
9
|
+
setup do
|
10
|
+
@la = LameEncoder.new
|
11
|
+
end
|
12
|
+
|
13
|
+
specify "has a blank argument list" do
|
14
|
+
@la.argument_list.should_be_empty
|
15
|
+
end
|
16
|
+
|
17
|
+
specify "records valid bitrates" do
|
18
|
+
@la.bitrate 128
|
19
|
+
@la.options[:bitrate].should_equal "-b 128"
|
20
|
+
end
|
21
|
+
|
22
|
+
specify "records valid sample rate" do
|
23
|
+
@la.sample_rate 44.1
|
24
|
+
@la.options[:sample_rate].should_equal "--resample 44.1"
|
25
|
+
end
|
26
|
+
|
27
|
+
specify "records valid VBR quality" do
|
28
|
+
@la.vbr_quality 5
|
29
|
+
@la.options[:vbr_quality].should_equal "-V 5"
|
30
|
+
@la.options[:vbr].should_equal "-v"
|
31
|
+
end
|
32
|
+
|
33
|
+
specify "records valid quality" do
|
34
|
+
@la.encode_quality 1
|
35
|
+
@la.options[:encode_quality].should_equal "-q 1"
|
36
|
+
end
|
37
|
+
|
38
|
+
specify "records valid quality" do
|
39
|
+
@la.encode_quality 5
|
40
|
+
@la.options[:encode_quality].should_equal "-q 5"
|
41
|
+
end
|
42
|
+
|
43
|
+
specify "records valid quality shortcut" do
|
44
|
+
@la.encode_quality :high
|
45
|
+
@la.options[:encode_quality].should_equal "-q 2"
|
46
|
+
@la.encode_quality :fast
|
47
|
+
@la.options[:encode_quality].should_equal "-q 7"
|
48
|
+
end
|
49
|
+
|
50
|
+
specify "balks at invalid bitrate" do
|
51
|
+
lambda {@la.bitrate 113}.should_raise ArgumentError
|
52
|
+
end
|
53
|
+
|
54
|
+
specify "balks at invalid sample rate" do
|
55
|
+
lambda {@la.sample_rate 113}.should_raise ArgumentError
|
56
|
+
end
|
57
|
+
|
58
|
+
specify "balks at invalid VBR quality" do
|
59
|
+
lambda {@la.vbr_quality 113}.should_raise ArgumentError
|
60
|
+
end
|
61
|
+
|
62
|
+
specify "balks at invalid encode quality" do
|
63
|
+
lambda {@la.encode_quality 113}.should_raise ArgumentError
|
64
|
+
end
|
65
|
+
|
66
|
+
specify "sets mode to stereo or mono" do
|
67
|
+
{:stereo => '-m s', :mono => '-m m', :joint => '-m j'}.each do |option, setting|
|
68
|
+
@la.mode option
|
69
|
+
@la.options[:mode].should_equal setting
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
specify "sets mode to nil on bad option" do
|
74
|
+
@la.mode :bugz
|
75
|
+
@la.options[:mode].should_be nil
|
76
|
+
end
|
77
|
+
|
78
|
+
specify "decodes mp3s" do
|
79
|
+
@la.decode_mp3!
|
80
|
+
@la.options[:decode_mp3].should_equal "--decode"
|
81
|
+
lambda {@la.options[:new_value] = 'something'}.should_raise TypeError
|
82
|
+
end
|
83
|
+
|
84
|
+
specify "decodes mp3s without other options" do
|
85
|
+
@la.vbr_quality 4
|
86
|
+
@la.decode_mp3!
|
87
|
+
@la.options.length.should_equal 1
|
88
|
+
end
|
89
|
+
|
90
|
+
specify "accepts flag that input is mp3" do
|
91
|
+
@la.input_mp3!
|
92
|
+
@la.options[:input_mp3].should_equal "--mp3input"
|
93
|
+
end
|
94
|
+
|
95
|
+
specify "accepts an input filename" do
|
96
|
+
@la.input_file "/Path/to/my/audio_file.wav"
|
97
|
+
@la.command_line.should_equal "lame /Path/to/my/audio_file.wav"
|
98
|
+
end
|
99
|
+
|
100
|
+
specify "accepts replygain options" do
|
101
|
+
{:accurate => "--replaygain-accurate",
|
102
|
+
:fast => "--replaygain-fast",
|
103
|
+
:none => "--noreplaygain",
|
104
|
+
:clip_detect => "--clipdetect",
|
105
|
+
:default => nil
|
106
|
+
}.each do |option, setting|
|
107
|
+
@la.replay_gain option
|
108
|
+
@la.options[:replay_gain].should_equal setting
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
specify "accepts raw PCM files" do
|
113
|
+
@la.input_raw 44.1
|
114
|
+
@la.options[:input_raw].should_equal "-r -s 44.1"
|
115
|
+
@la.input_raw 32, true
|
116
|
+
@la.options[:input_raw].should_equal "-r -s 32 -x"
|
117
|
+
end
|
118
|
+
|
119
|
+
specify "marks as copy when requested" do
|
120
|
+
@la.mark_as_copy!
|
121
|
+
@la.options[:copy].should_equal "-o"
|
122
|
+
end
|
123
|
+
specify "marks as copy when starting from a file ending in .mp3" do
|
124
|
+
@la.input_file "/Path/to/my/audio_file.mp3"
|
125
|
+
@la.options[:copy].should_equal "-o"
|
126
|
+
end
|
127
|
+
specify "marks as copy when starting from an mp3 file" do
|
128
|
+
@la.input_mp3!
|
129
|
+
@la.options[:copy].should_equal "-o"
|
130
|
+
end
|
131
|
+
specify "does not mark as copy when starting from a file not ending in .mp3" do
|
132
|
+
@la.input_file "/Path/to/my/audio_file.aif"
|
133
|
+
@la.options[:copy].should_be_nil
|
134
|
+
end
|
135
|
+
|
136
|
+
specify "outputs ogg files when requested" do
|
137
|
+
@la.output_ogg!
|
138
|
+
@la.options[:output_ogg].should_equal "--ogg"
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
context "A high-quality VBR encoder without a file" do
|
144
|
+
|
145
|
+
setup do
|
146
|
+
@la = LameEncoder.new
|
147
|
+
@la.vbr_quality 4
|
148
|
+
@la.sample_rate 44.1
|
149
|
+
end
|
150
|
+
|
151
|
+
specify "ouputs the correct command line options" do
|
152
|
+
[ /-v/,/-V 4/,/--resample 44\.1/].each do |match|
|
153
|
+
@la.argument_list.should_match match
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
specify "balks at returning the command line" do
|
158
|
+
lambda {@la.command_line}.should_raise ArgumentError
|
159
|
+
end
|
160
|
+
|
161
|
+
specify "balks at running the conversion" do
|
162
|
+
lambda {@la.convert!}.should_raise ArgumentError
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
|
167
|
+
context "An encoder with a file specified" do
|
168
|
+
|
169
|
+
setup do
|
170
|
+
@la = LameEncoder.new
|
171
|
+
@la.input_file "/Path/to/my/audio_file.wav"
|
172
|
+
end
|
173
|
+
|
174
|
+
specify "provides the right command line" do
|
175
|
+
@la.command_line.should_equal "lame /Path/to/my/audio_file.wav"
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
context "An encoder with options and an input and output file specified" do
|
181
|
+
|
182
|
+
setup do
|
183
|
+
@la = LameEncoder.new
|
184
|
+
@la.encode_quality :high
|
185
|
+
@la.input_file "/Path/to/my/audio_file.wav"
|
186
|
+
@la.output_file "/Path/to/my/audio_file.mp3"
|
187
|
+
end
|
188
|
+
|
189
|
+
specify "provides the right command line" do
|
190
|
+
@la.command_line.should_equal "lame -q 2 /Path/to/my/audio_file.wav /Path/to/my/audio_file.mp3"
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
|
195
|
+
context "An encoder sent various id3 information" do
|
196
|
+
|
197
|
+
setup do
|
198
|
+
@la = LameEncoder.new
|
199
|
+
end
|
200
|
+
|
201
|
+
specify "sets the title" do
|
202
|
+
@la.id3 :title => "The All-Knowning Mind of Minolta"
|
203
|
+
@la.id3_options[:title].should_equal "The All-Knowning Mind of Minolta"
|
204
|
+
@la.id3_arguments.should_equal "--tt The All-Knowning Mind of Minolta"
|
205
|
+
end
|
206
|
+
|
207
|
+
specify "sets multiple values" do
|
208
|
+
@la.id3 :title => "The All-Knowning Mind of Minolta"
|
209
|
+
@la.id3 :artist => "Tin Man Shuffler"
|
210
|
+
@la.id3_options[:title].should_equal "The All-Knowning Mind of Minolta"
|
211
|
+
@la.id3_options[:artist].should_equal "Tin Man Shuffler"
|
212
|
+
@la.id3_arguments.should_match /--tt The All-Knowning Mind of Minolta/
|
213
|
+
@la.id3_arguments.should_match /--ta Tin Man Shuffler/
|
214
|
+
end
|
215
|
+
|
216
|
+
specify "sets title, artist, album, year, comment, track number, and genre" do
|
217
|
+
@la.id3 :title => 'title', :artist => 'artist', :album => 'album',
|
218
|
+
:year => 1998, :comment => 'comment', :track_number => 1,
|
219
|
+
:genre => 'genre'
|
220
|
+
[/--tt title/,/--ta artist/, /--tl album/,/--ty 1998/,/--tc comment/,/--tn 1/,/--tg genre/].each do |match|
|
221
|
+
@la.id3_arguments.should_match match
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
specify "ignores nonsense values" do
|
226
|
+
@la.id3 :bugz => "Not Real"
|
227
|
+
@la.id3_arguments.should_not_match /Real/
|
228
|
+
@la.id3 :title => "Coolbeans"
|
229
|
+
@la.id3_arguments.should_match /Coolbeans/
|
230
|
+
end
|
231
|
+
|
232
|
+
specify "adds v1 or v2 id3 tags as requested" do
|
233
|
+
2.times do |n|
|
234
|
+
@la.id3_version_only n
|
235
|
+
@la.options[:id3_version].should_equal "--id3v#{n}-only"
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
specify "allows adding v2 tags on top of default behaviour" do
|
240
|
+
@la.id3_add_v2!
|
241
|
+
@la.options[:id3_version].should_equal "--add-id3v2"
|
242
|
+
end
|
243
|
+
|
244
|
+
specify "does not output id3_version unless tags are set" do
|
245
|
+
@la.id3_version_only 1
|
246
|
+
@la.argument_list.should_equal ""
|
247
|
+
end
|
248
|
+
|
249
|
+
context "An encoder with id3 options and an input file" do
|
250
|
+
setup do
|
251
|
+
@la = LameEncoder.new
|
252
|
+
@la.id3 :title => 'title', :artist => 'artist', :album => 'album',
|
253
|
+
:year => 1998, :comment => 'comment', :track_number => 1,
|
254
|
+
:genre => 'genre'
|
255
|
+
@la.input_file File.join( File.dirname( __FILE__ ), 'test.mp3' )
|
256
|
+
end
|
257
|
+
|
258
|
+
specify "outputs those options to the command line" do
|
259
|
+
[/--tt title/,/--ta artist/, /--tl album/,/--ty 1998/,/--tc comment/,/--tn 1/,/--tg genre/].each do |match|
|
260
|
+
@la.command_line.should_match match
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
context "An encoder starting with an mp3 file" do
|
266
|
+
setup do
|
267
|
+
@root = './spec/'
|
268
|
+
begin
|
269
|
+
File.delete File.join( File.dirname( __FILE__ ), 'output.mp3' )
|
270
|
+
rescue
|
271
|
+
end
|
272
|
+
@la = LameEncoder.new
|
273
|
+
@la.input_file "#{@root}test.mp3"
|
274
|
+
@la.output_file "#{@root}output.mp3"
|
275
|
+
@la.input_mp3!
|
276
|
+
end
|
277
|
+
|
278
|
+
specify "provides the right command line" do
|
279
|
+
[/lame/,/--mp3input/, /-o/,/#{@root}test.mp3/,/#{@root}output.mp3/].each do |match|
|
280
|
+
@la.command_line.should_match match
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
specify "successfully outputs a low bitrate version" do
|
285
|
+
@la.bitrate 32
|
286
|
+
@la.mode :mono
|
287
|
+
File.should_not_exist "#{@root}output.mp3"
|
288
|
+
@la.convert!
|
289
|
+
File.should_exist "#{@root}output.mp3"
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
context "The runtime environment" do
|
294
|
+
specify "should have lame version 3.96 installed" do
|
295
|
+
version = `lame --help`
|
296
|
+
version.should_match /LAME/
|
297
|
+
version.should_match /3\.96/
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
end
|
302
|
+
|
data/spec/test.mp3
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: lame_encoder
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.1
|
7
|
+
date: 2006-06-27 00:00:00 -07:00
|
8
|
+
summary: A simple wrapper for LAME.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: jchris@mfdz.com
|
12
|
+
homepage:
|
13
|
+
rubyforge_project:
|
14
|
+
description: A Ruby interface to the command line options for lame. Support for most common features.
|
15
|
+
autorequire: lame_encoder
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: false
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- Chris Anderson
|
30
|
+
files:
|
31
|
+
- lib/lame_encoder.rb
|
32
|
+
- spec/lame_encoder_spec.rb
|
33
|
+
- spec/test.mp3
|
34
|
+
- Rakefile
|
35
|
+
test_files: []
|
36
|
+
|
37
|
+
rdoc_options: []
|
38
|
+
|
39
|
+
extra_rdoc_files: []
|
40
|
+
|
41
|
+
executables: []
|
42
|
+
|
43
|
+
extensions: []
|
44
|
+
|
45
|
+
requirements:
|
46
|
+
- LAME (Lame Ain't an MP3 Encoder) http://www.mp3dev.org
|
47
|
+
dependencies:
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rake
|
50
|
+
version_requirement:
|
51
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.7.0
|
56
|
+
version:
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rspec
|
59
|
+
version_requirement:
|
60
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
61
|
+
requirements:
|
62
|
+
- - "="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0.5"
|
65
|
+
version:
|