scissor-echonest 0.0.8 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -21,7 +21,7 @@ DESCRIPTION = "Scissor extension to use Echo Nest Developers API"
21
21
  RUBYFORGE_PROJECT = "scissorechonest"
22
22
  HOMEPATH = "http://github.com/youpy/scissor-echonest"
23
23
  BIN_FILES = %w( )
24
- VERS = "0.0.8"
24
+ VERS = "0.1.0"
25
25
 
26
26
  REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
27
27
  CLEAN.include ['**/.*.sw?', '*.gem', '.config']
data/examples/afromb.rb CHANGED
@@ -11,18 +11,12 @@
11
11
  require 'rubygems'
12
12
  require 'scissor/echonest'
13
13
  require 'narray'
14
-
15
- Scissor.logger.level = Logger::DEBUG
16
-
14
+
17
15
  class AfromB
18
16
  def initialize(a, b = nil)
19
17
  @a, @b = [a, b || a]
20
18
 
21
- @segments_of_a = @a.inject([]) do |memo, file|
22
- memo += Scissor(file).segments
23
- memo
24
- end
25
-
19
+ @segments_of_a = Scissor(@a).segments
26
20
  @segments_of_b = (@a == @b) ? @segments_of_a : Scissor(@b).segments
27
21
  end
28
22
 
@@ -73,23 +67,21 @@ class AfromB
73
67
  Scissor.join(result)
74
68
  end
75
69
  end
76
-
70
+
77
71
  if __FILE__ == $0
78
72
  require 'pit'
79
-
73
+
80
74
  Scissor.echonest_api_key = Pit.get('echonest.com', :require => {
81
75
  'api_key' => 'your Echo Nest API key'
82
76
  })['api_key']
83
77
  Scissor::Chunk.echonest.user_agent.send_timeout = 300
84
78
 
85
- if ARGV.size == 2
79
+ if ARGV.size == 3
80
+ a, b, outfile = ARGV
81
+ else
86
82
  a, outfile = ARGV
87
83
  b = a
88
- else
89
- a = ARGV
90
- outfile = a.pop
91
- b = a.pop
92
84
  end
93
85
 
94
- AfromB.new(a, b).run > outfile
86
+ AfromB.new(a, b).run >> outfile
95
87
  end
@@ -16,12 +16,22 @@ module Scissor
16
16
  end
17
17
  end
18
18
 
19
+ def bars
20
+ analyze do |analysis|
21
+ bars = analysis.bars
22
+ bars.inject([]) do |chunks, bar|
23
+ chunk = self[bar.start, bar.duration]
24
+ chunk.set_delegate(bar)
25
+ chunks << chunk
26
+ chunks
27
+ end
28
+ end
29
+ end
30
+
19
31
  def beats
20
- tempfile_for_echonest do |tmpfile|
32
+ analyze do |analysis|
21
33
  chunks = []
22
- scissor = to_file(tmpfile, :bitrate => '64k')
23
-
24
- beats = self.class.echonest.get_beats(tmpfile)
34
+ beats = analysis.beats
25
35
 
26
36
  if beats.size != 0
27
37
  chunk = self[0, beats.first.start]
@@ -42,10 +52,8 @@ module Scissor
42
52
  end
43
53
 
44
54
  def segments
45
- tempfile_for_echonest do |tmpfile|
46
- scissor = to_file(tmpfile, :bitrate => '64k')
47
-
48
- segments = self.class.echonest.get_segments(tmpfile)
55
+ analyze do |analysis|
56
+ segments = analysis.segments
49
57
  segments.inject([]) do |chunks, segment|
50
58
  chunk = self[segment.start, segment.duration]
51
59
  chunk.set_delegate(segment)
@@ -57,11 +65,13 @@ module Scissor
57
65
 
58
66
  private
59
67
 
60
- def tempfile_for_echonest
68
+ def analyze
61
69
  tmpfile = Pathname.new('/tmp/scissor_echonest_temp_' + $$.to_s + '.mp3')
62
- yield tmpfile
70
+ scissor = to_file(tmpfile, :bitrate => '64k')
71
+
72
+ yield self.class.echonest.track.analysis(tmpfile)
63
73
  ensure
64
- tmpfile.unlink
74
+ tmpfile.unlink if tmpfile.exist?
65
75
  end
66
76
  end
67
77
  end
@@ -34,6 +34,16 @@ describe Scissor do
34
34
  Scissor::Chunk.stub!(:echonest).and_return(api)
35
35
  end
36
36
 
37
+ it 'should get bars' do
38
+ bars = @scissor.bars
39
+ bar = bars.first
40
+
41
+ bars.size.should eql(80)
42
+ bar.start.should be_close(1.0, 0.1)
43
+ bar.duration.should be_close(1.48, 0.01)
44
+ bar.confidence.should be_close(0.18, 0.01)
45
+ end
46
+
37
47
  it 'should get beats' do
38
48
  beats = @scissor.beats
39
49
 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 1
7
8
  - 0
8
- - 8
9
- version: 0.0.8
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - youpy
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-30 00:00:00 +09:00
17
+ date: 2011-11-01 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency