audio_monster 1.0.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.
@@ -0,0 +1,5 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module AudioMonster
4
+ VERSION = "1.0.0"
5
+ end
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'audio_monster/version'
4
+ require 'audio_monster/configuration'
5
+ require 'audio_monster/monster'
6
+
7
+ module AudioMonster
8
+ extend Configuration
9
+
10
+ def self.monster
11
+ @_monster ||= AudioMonster::Monster.new
12
+ end
13
+
14
+ # delegate to the monster inside
15
+ def self.method_missing(method, *args, &block)
16
+ monster.send(method, *args)
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ require 'minitest_helper'
2
+
3
+ describe AudioMonster do
4
+
5
+ it 'has a version number' do
6
+ AudioMonster::VERSION.wont_be_nil
7
+ end
8
+
9
+ it 'has configuration options' do
10
+ AudioMonster.options.wont_be_nil
11
+ end
12
+
13
+ it 'delegates methods to monster' do
14
+ AudioMonster.flac.must_equal 'flac'
15
+ end
16
+
17
+ it 'returns an instance of monster' do
18
+ AudioMonster.monster.wont_be_nil
19
+ end
20
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,24 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'audio_monster'
3
+
4
+ require 'minitest'
5
+ require 'minitest/autorun'
6
+ require 'minitest/spec'
7
+ require 'minitest/mock'
8
+ require 'fileutils'
9
+
10
+ def out_dir
11
+ File.expand_path(File.join(File.dirname(__FILE__), 'tmp'))
12
+ end
13
+
14
+ def out_file(o)
15
+ File.join(out_dir, o)
16
+ end
17
+
18
+ def in_dir
19
+ File.expand_path(File.join(File.dirname(__FILE__), 'files'))
20
+ end
21
+
22
+ def in_file(i)
23
+ File.join(in_dir, i)
24
+ end
@@ -0,0 +1,111 @@
1
+ require 'minitest_helper'
2
+
3
+ describe AudioMonster::Monster do
4
+
5
+ let(:monster) { AudioMonster::Monster.new(logger: Logger.new('/dev/null')) }
6
+
7
+ before {
8
+ FileUtils.mkdir_p(out_dir)
9
+ }
10
+
11
+ it 'can create an mp2 from a wav file' do
12
+ # try to create the mp2
13
+ monster.encode_mp2_from_wav(in_file('test_long.wav'), out_file('out.mp2')).wont_be_nil
14
+
15
+ # now parse it and test that the info is right
16
+ mp2_info = Mp3Info.new(out_file('out.mp2'))
17
+ mp2_info.bitrate.must_equal 128
18
+ end
19
+
20
+ it 'can validate an mpeg audio file\'s attributes' do
21
+ validations = {
22
+ :version=>2,
23
+ :layer=>3,
24
+ :channel_mode=>['Joint Stereo', 'Stereo'],
25
+ :channels=>2,
26
+ :sample_rate=>'<= 44000',
27
+ :bit_rate=>'< 100',
28
+ :per_channel_bit_rate=>'>= 256'
29
+ }
30
+
31
+ errors, info = monster.validate_mpeg(in_file('test_long.mp2'), validations)
32
+ # puts "\n\nerrors: " + errors.inspect
33
+ # puts "\n\ninfo: " + info.inspect
34
+ errors.keys.must_equal validations.keys
35
+ end
36
+
37
+ it 'should encode an mp2 from a mono wav' do
38
+ # try to create the mp2
39
+ monster.encode_mp2_from_wav(in_file('test_long.wav'), out_file('out_mono.mp2')).must_equal true
40
+
41
+ # now parse it and test that the info is right
42
+ mp2_info = Mp3Info.new(out_file('out_mono.mp2'))
43
+
44
+ mp2_info.mpeg_version.must_equal 1
45
+ mp2_info.layer.must_equal 2
46
+ mp2_info.bitrate.must_equal 128
47
+ mp2_info.samplerate.must_equal 44100
48
+ mp2_info.channel_mode.must_equal 'Single Channel'
49
+ mp2_info.header[:padding].must_equal false
50
+ end
51
+
52
+ it 'should encode an mp2 from a stereo wav' do
53
+ # try to create the mp2
54
+ monster.encode_mp2_from_wav(in_file('test_stereo.wav'), out_file('out_stereo.mp2')).must_equal true
55
+
56
+ # now parse it and test that the info is right
57
+ mp2_info = Mp3Info.new(out_file('out_stereo.mp2'))
58
+
59
+ mp2_info.mpeg_version.must_equal 1
60
+ mp2_info.layer.must_equal 2
61
+ mp2_info.bitrate.must_equal 256
62
+ mp2_info.samplerate.must_equal 44100
63
+ mp2_info.channel_mode.must_equal "Stereo"
64
+ mp2_info.header[:padding].must_equal false
65
+ end
66
+
67
+ it 'should get the length using soxi' do
68
+ info = monster.info_for_mpeg(in_file('test_long.mp2'))
69
+ info[:length].must_equal 48
70
+ end
71
+
72
+ it 'should get info for ogg file' do
73
+ info = monster.info_for_ogg(in_file('test.ogg'))
74
+ info[:length].to_i.must_equal 12
75
+ info[:content_type].must_equal "audio/ogg"
76
+ end
77
+
78
+
79
+ it 'should create a wav wrapped mp2' do
80
+ start_at = '2010-06-19T00:00:00-04:00'
81
+ end_at = DateTime.parse(start_at) + 6.days
82
+ options = {}
83
+ options[:title] = "REMIX Episode 1"
84
+ options[:artist] = "PRX REMIX"
85
+ options[:cut_id] = "12345"
86
+ options[:start_at] = start_at
87
+ options[:end_at] = end_at
88
+ options[:producer_app_id] = 'PRX'
89
+ options[:no_pad_byte] = false
90
+ wave_file = out_file('test_long.wav')
91
+ monster.create_wav_wrapped_mp2(in_file('test_long.mp2'), out_file('test_long.wav'), options)
92
+
93
+ wave = NuWav::WaveFile.parse(wave_file)
94
+
95
+ wave.chunks[:cart].title.must_equal "REMIX Episode 1"
96
+ wave.chunks[:cart].artist.must_equal "PRX REMIX"
97
+ wave.chunks[:cart].cut_id.must_equal "12345"
98
+ wave.chunks[:cart].start_date.must_equal "2010/06/19"
99
+ wave.chunks[:cart].start_time.must_equal "00:00:00"
100
+ wave.chunks[:cart].end_date.must_equal "2010/06/25"
101
+ wave.chunks[:cart].end_time.must_equal "00:00:00"
102
+ wave.chunks[:cart].producer_app_id.must_equal "PRX"
103
+ end
104
+
105
+ it 'can slice a section out of an audio file' do
106
+ monster.slice_wav(in_file('test_long.wav'), out_file('slice.wav'), 10, 5).wont_be_nil
107
+ slice_wav = NuWav::WaveFile.parse(out_file('slice.wav'))
108
+ slice_wav.duration.must_equal 5
109
+ end
110
+
111
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: audio_monster
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Kuklewicz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nu_wav
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mp3info
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mimemagic
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: minitest
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: audio_monster manipulates and transcodes audio
112
+ email:
113
+ - andrew@beginsinwonder.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".travis.yml"
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - audio_monster.gemspec
125
+ - lib/audio_monster.rb
126
+ - lib/audio_monster/configuration.rb
127
+ - lib/audio_monster/monster.rb
128
+ - lib/audio_monster/version.rb
129
+ - test/audio_monster_test.rb
130
+ - test/files/test.flac
131
+ - test/files/test.ogg
132
+ - test/files/test_long.mp2
133
+ - test/files/test_long.mp3
134
+ - test/files/test_long.wav
135
+ - test/files/test_long_2.mp2
136
+ - test/files/test_short.mp2
137
+ - test/files/test_short.wav
138
+ - test/files/test_stereo.wav
139
+ - test/minitest_helper.rb
140
+ - test/monster_test.rb
141
+ homepage: https://github.com/PRX/audio-monster
142
+ licenses:
143
+ - MIT
144
+ metadata: {}
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubyforge_project:
161
+ rubygems_version: 2.2.2
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: audio_monster manipulates and transcodes audio
165
+ test_files:
166
+ - test/audio_monster_test.rb
167
+ - test/files/test.flac
168
+ - test/files/test.ogg
169
+ - test/files/test_long.mp2
170
+ - test/files/test_long.mp3
171
+ - test/files/test_long.wav
172
+ - test/files/test_long_2.mp2
173
+ - test/files/test_short.mp2
174
+ - test/files/test_short.wav
175
+ - test/files/test_stereo.wav
176
+ - test/minitest_helper.rb
177
+ - test/monster_test.rb