rsox-command 0.0.1 → 0.0.2
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/lib/sox/stats.rb +48 -2
- data/rsox-command.gemspec +1 -1
- data/spec/lib/sox/stats_spec.rb +23 -1
- metadata +4 -4
data/lib/sox/stats.rb
CHANGED
@@ -2,8 +2,10 @@ module Sox
|
|
2
2
|
class Stats
|
3
3
|
|
4
4
|
attr_reader :command
|
5
|
+
attr_accessor :use_cache
|
5
6
|
|
6
|
-
def initialize(file = nil)
|
7
|
+
def initialize(file = nil, options = {})
|
8
|
+
options.each { |k,v| send "#{k}=", v }
|
7
9
|
@command = Sox::Command.new.tap do |command|
|
8
10
|
command.effect "stats"
|
9
11
|
command.input file if file
|
@@ -24,7 +26,37 @@ module Sox
|
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
27
|
-
|
29
|
+
class Cache
|
30
|
+
|
31
|
+
attr_accessor :sound_file
|
32
|
+
|
33
|
+
def initialize(sound_file)
|
34
|
+
@sound_file = sound_file
|
35
|
+
end
|
36
|
+
|
37
|
+
def cache_file
|
38
|
+
"#{sound_file}.stats"
|
39
|
+
end
|
40
|
+
|
41
|
+
def load
|
42
|
+
YAML.load(IO.read(cache_file)) rescue nil
|
43
|
+
end
|
44
|
+
|
45
|
+
def dump(attributes)
|
46
|
+
puts "Save in #{cache_file}: #{attributes.inspect}"
|
47
|
+
File.open(cache_file, "w") do |f|
|
48
|
+
f.write YAML.dump(attributes)
|
49
|
+
end
|
50
|
+
attributes
|
51
|
+
end
|
52
|
+
|
53
|
+
def fetch(&block)
|
54
|
+
load or dump(block.call)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
def attributes_without_cache
|
28
60
|
@attributes ||=
|
29
61
|
begin
|
30
62
|
paires = raw_values.collect do |key, _, value|
|
@@ -35,6 +67,20 @@ module Sox
|
|
35
67
|
end
|
36
68
|
end
|
37
69
|
|
70
|
+
def attributes_with_cache
|
71
|
+
Cache.new(command.inputs.first.filename).fetch do
|
72
|
+
attributes_without_cache
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def attributes
|
77
|
+
if use_cache and command.inputs.size == 1
|
78
|
+
attributes_with_cache
|
79
|
+
else
|
80
|
+
attributes_without_cache
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
38
84
|
def rms_level
|
39
85
|
attributes['RMS lev dB']
|
40
86
|
end
|
data/rsox-command.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "rsox-command"
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.2"
|
7
7
|
s.authors = ["Alban Peignier"]
|
8
8
|
s.email = ["alban@tryphon.eu"]
|
9
9
|
s.homepage = "http://projects.tryphon.eu/rsox-command"
|
data/spec/lib/sox/stats_spec.rb
CHANGED
@@ -3,16 +3,38 @@ require 'spec_helper'
|
|
3
3
|
describe Sox::Stats do
|
4
4
|
|
5
5
|
subject { Sox::Stats.new }
|
6
|
+
|
7
|
+
let(:file) { "spec/fixtures/test.ogg" }
|
6
8
|
|
7
9
|
describe "#raw_output" do
|
8
10
|
|
9
11
|
it "should return sox command output" do
|
10
|
-
subject.input(
|
12
|
+
subject.input(file)
|
11
13
|
subject.raw_output.should == IO.read("spec/fixtures/test.stats")
|
12
14
|
end
|
13
15
|
|
14
16
|
end
|
15
17
|
|
18
|
+
describe "cache" do
|
19
|
+
|
20
|
+
it "should return sox command output" do
|
21
|
+
# Fill cache
|
22
|
+
Sox::Stats.new(file, :use_cache => true).attributes
|
23
|
+
|
24
|
+
subject.use_cache = true
|
25
|
+
subject.input(file)
|
26
|
+
|
27
|
+
subject.command.should_not_receive(:run!)
|
28
|
+
|
29
|
+
subject.attributes
|
30
|
+
end
|
31
|
+
|
32
|
+
after(:each) do
|
33
|
+
FileUtils.rm_f "spec/fixtures/test.ogg.stats"
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
16
38
|
describe "#attributes" do
|
17
39
|
|
18
40
|
it "should read name and first value from raw output" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsox-command
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alban Peignier
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-05-30 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
prerelease: false
|