aubio 0.2.2 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,75 +1,78 @@
1
- module Aubio
2
- class Beats
1
+ # frozen_string_literal: true
3
2
 
4
- def initialize(aubio_source, params)
3
+ module Aubio
4
+ class Beats
5
+ def initialize(aubio_source, params)
5
6
  # TODO: cleanup param dups
6
- @sample_rate = params[:sample_rate] || 44100
7
- @window_size = params[:window_size] || 1024
8
- @hop_size = params[:hop_size] || 512
7
+ @sample_rate = params[:sample_rate] || 44_100
8
+ @window_size = params[:window_size] || 1024
9
+ @hop_size = params[:hop_size] || 512
9
10
 
10
- @source = aubio_source
11
- @tempo = Api.new_aubio_tempo('specdiff', @window_size, @hop_size, @sample_rate)
11
+ @source = aubio_source
12
+ @tempo = Api.new_aubio_tempo('specdiff', @window_size, @hop_size, @sample_rate)
12
13
 
13
- # create output for source
14
- @sample_buffer = Api.new_fvec(@hop_size)
15
- # create output for beat
16
- @out_fvec = Api.new_fvec(1)
17
- end
14
+ # create output for source
15
+ @sample_buffer = Api.new_fvec(@hop_size)
16
+ # create output for beat
17
+ @out_fvec = Api.new_fvec(1)
18
+ end
18
19
 
19
- def each
20
- return enum_for(:each) unless block_given?
20
+ def each
21
+ return enum_for(:each) unless block_given?
21
22
 
22
- total_frames_counter = 0
23
- read_buffer = FFI::MemoryPointer.new(:int)
23
+ total_frames_counter = 0
24
+ read_buffer = FFI::MemoryPointer.new(:int)
25
+ total_samples = Api.aubio_source_get_duration(@source).to_f
24
26
 
25
- loop do
26
- # Perform tempo calculation
27
+ loop do
28
+ # Perform tempo calculation
27
29
  Api.aubio_source_do(@source, @sample_buffer, read_buffer)
28
- Api.aubio_tempo_do(@tempo, @sample_buffer, @out_fvec)
30
+ Api.aubio_tempo_do(@tempo, @sample_buffer, @out_fvec)
29
31
 
30
32
  # Retrieve result
31
- is_beat = Api.fvec_get_sample(@out_fvec, 0)
33
+ is_beat = Api.fvec_get_sample(@out_fvec, 0)
32
34
  no_of_bytes_read = read_buffer.read_int
33
35
  total_frames_counter += no_of_bytes_read
34
36
 
35
37
  if is_beat > 0.0
36
- tempo_seconds = Api.aubio_tempo_get_last_s(@tempo)
37
- tempo_milliseconds = Api.aubio_tempo_get_last_ms(@tempo)
38
+ tempo_samples = Api.aubio_tempo_get_last(@tempo)
39
+ tempo_seconds = Api.aubio_tempo_get_last_s(@tempo)
40
+ tempo_milliseconds = Api.aubio_tempo_get_last_ms(@tempo)
38
41
  tempo_confidence = Api.aubio_tempo_get_confidence(@tempo)
39
42
 
40
- output = {
41
- :confidence => tempo_confidence,
42
- :s => tempo_seconds,
43
- :ms => tempo_milliseconds,
44
- :start => (tempo_seconds == 0.0 ? 1 : 0),
45
- :end => 0
46
- }
47
- yield output
48
- end
49
-
50
- if no_of_bytes_read != @hop_size
51
- # there's no more audio to look at
52
-
53
- # Let's output one last tempo to mark the end of the file
54
- total_time = total_frames_counter.to_f / @sample_rate.to_f
55
43
  output = {
56
- :confidence => 1.0,
57
- :s => total_time,
58
- :ms => total_time/1000.0,
59
- :start => 0,
60
- :end => 1
44
+ confidence: tempo_confidence,
45
+ s: tempo_seconds,
46
+ ms: tempo_milliseconds,
47
+ sample_no: tempo_samples,
48
+ total_samples: total_samples,
49
+ rel_start: tempo_samples / total_samples
61
50
  }
62
51
  yield output
52
+ end
63
53
 
64
- # clean up
65
- Api.del_aubio_tempo(@tempo)
66
- Api.del_fvec(@sample_buffer)
67
- Api.del_fvec(@out_fvec)
54
+ next unless no_of_bytes_read != @hop_size
68
55
 
69
- break
70
- end
71
- end
72
- end
56
+ # there's no more audio to look at
57
+
58
+ # Let's output one last tempo to mark the end of the file
59
+ total_time = total_frames_counter.to_f / @sample_rate.to_f
60
+ output = {
61
+ confidence: 1.0,
62
+ s: total_time,
63
+ ms: total_time / 1000.0,
64
+ sample_no: total_samples,
65
+ total_samples: total_samples
66
+ }
67
+ yield output
68
+
69
+ # clean up
70
+ Api.del_aubio_tempo(@tempo)
71
+ Api.del_fvec(@sample_buffer)
72
+ Api.del_fvec(@out_fvec)
73
73
 
74
- end
74
+ break
75
+ end
76
+ end
77
+ end
75
78
  end
@@ -1,72 +1,74 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ffi'
2
4
 
3
5
  module Aubio
4
- module Api #:nodoc
6
+ module LegacyApi #:nodoc
5
7
  extend FFI::Library
6
8
  # idea inspired by https://github.com/qoobaa/magic/blob/master/lib/magic/api.rb
7
- lib_paths = Array(ENV["AUBIO_LIB"] || Dir["/{opt,usr}/{,local/}{lib,lib64,Cellar/aubio**}/libaubio.{*.dylib,so.*}"])
8
- fallback_names = %w(libaubio.4.2.2.dylib libaubio.so.1 aubio1.dll)
9
+ lib_paths = Array(ENV['AUBIO_LIB'] || Dir['/{opt,usr}/{,local/}{lib,lib64,Cellar/aubio**,lib/arm-linux-gnueabihf}/libaubio.{*.dylib,so.*}'])
10
+ fallback_names = %w[libaubio.4.2.2.dylib libaubio.so.1 aubio1.dll]
9
11
  ffi_lib(lib_paths + fallback_names)
10
12
 
11
13
  # tempo
12
- attach_function :new_aubio_tempo, [ :string, :int, :int, :int ], :pointer
13
- attach_function :aubio_tempo_do, [:pointer, :pointer, :pointer], :void
14
+ attach_function :new_aubio_tempo, %i[string int int int], :pointer
15
+ attach_function :aubio_tempo_do, %i[pointer pointer pointer], :void
14
16
  attach_function :aubio_tempo_get_last, [:pointer], :int
15
17
  attach_function :aubio_tempo_get_last_s, [:pointer], :float
16
18
  attach_function :aubio_tempo_get_last_ms, [:pointer], :float
17
- attach_function :aubio_tempo_set_silence, [:pointer, :float], :int
19
+ attach_function :aubio_tempo_set_silence, %i[pointer float], :int
18
20
  attach_function :aubio_tempo_get_silence, [:pointer], :float
19
- attach_function :aubio_tempo_set_threshold, [:pointer, :float], :int
21
+ attach_function :aubio_tempo_set_threshold, %i[pointer float], :int
20
22
  attach_function :aubio_tempo_get_threshold, [:pointer], :float
21
23
  attach_function :aubio_tempo_get_bpm, [:pointer], :float
22
24
  attach_function :aubio_tempo_get_confidence, [:pointer], :float
23
25
  attach_function :del_aubio_tempo, [:pointer], :void
24
26
 
25
27
  # beattracking / misc
26
- attach_function :new_aubio_beattracking, [:int, :int, :int], :pointer
27
- attach_function :aubio_beattracking_do, [:pointer, :pointer, :pointer], :void
28
+ attach_function :new_aubio_beattracking, %i[int int int], :pointer
29
+ attach_function :aubio_beattracking_do, %i[pointer pointer pointer], :void
28
30
  attach_function :aubio_beattracking_get_bpm, [:pointer], :float
29
- attach_function :aubio_filter_do, [:pointer, :pointer], :void
31
+ attach_function :aubio_filter_do, %i[pointer pointer], :void
30
32
  attach_function :new_aubio_filter_a_weighting, [:int], :pointer
31
33
 
32
34
  # source
33
- attach_function :new_aubio_source, [:string, :int, :int], :pointer
34
- attach_function :aubio_source_do, [:pointer, :pointer, :pointer], :void
35
- attach_function :aubio_source_do_multi, [:pointer, :pointer, :pointer], :void
35
+ attach_function :new_aubio_source, %i[string int int], :pointer
36
+ attach_function :aubio_source_do, %i[pointer pointer pointer], :void
37
+ attach_function :aubio_source_do_multi, %i[pointer pointer pointer], :void
36
38
  attach_function :aubio_source_get_samplerate, [:pointer], :int
37
39
  attach_function :aubio_source_get_channels, [:pointer], :int
38
- attach_function :aubio_source_seek, [:pointer, :int], :int
40
+ attach_function :aubio_source_seek, %i[pointer int], :int
39
41
  attach_function :aubio_source_close, [:pointer], :int
40
42
  attach_function :del_aubio_source, [:pointer], :void
41
43
 
42
44
  # sink
43
- attach_function :new_aubio_sink, [:string, :int], :pointer
44
- attach_function :aubio_sink_preset_samplerate, [:pointer, :int], :void
45
- attach_function :aubio_sink_preset_channels, [:pointer, :int], :void
45
+ attach_function :new_aubio_sink, %i[string int], :pointer
46
+ attach_function :aubio_sink_preset_samplerate, %i[pointer int], :void
47
+ attach_function :aubio_sink_preset_channels, %i[pointer int], :void
46
48
  attach_function :aubio_sink_get_samplerate, [:pointer], :int
47
49
  attach_function :aubio_sink_get_channels, [:pointer], :int
48
- attach_function :aubio_sink_do, [:pointer, :pointer, :int], :void
49
- attach_function :aubio_sink_do_multi, [:pointer, :pointer, :int], :void
50
+ attach_function :aubio_sink_do, %i[pointer pointer int], :void
51
+ attach_function :aubio_sink_do_multi, %i[pointer pointer int], :void
50
52
  attach_function :aubio_sink_close, [:pointer], :int
51
53
  attach_function :del_aubio_sink, [:pointer], :void
52
54
 
53
55
  # onset
54
- attach_function :new_aubio_onset, [:string, :int, :int, :int], :pointer
55
- attach_function :aubio_onset_do, [:pointer, :pointer, :pointer], :void
56
+ attach_function :new_aubio_onset, %i[string int int int], :pointer
57
+ attach_function :aubio_onset_do, %i[pointer pointer pointer], :void
56
58
  attach_function :aubio_onset_get_last, [:pointer], :int
57
59
  attach_function :aubio_onset_get_last_s, [:pointer], :float
58
60
  attach_function :aubio_onset_get_last_ms, [:pointer], :float
59
- attach_function :aubio_onset_set_silence, [:pointer, :float], :int
61
+ attach_function :aubio_onset_set_silence, %i[pointer float], :int
60
62
  attach_function :aubio_onset_get_silence, [:pointer], :float
61
63
  attach_function :aubio_onset_get_descriptor, [:pointer], :float
62
64
  attach_function :aubio_onset_get_thresholded_descriptor, [:pointer], :float
63
- attach_function :aubio_onset_set_threshold, [:pointer, :float], :int
64
- attach_function :aubio_onset_set_minioi, [:pointer, :int], :int
65
- attach_function :aubio_onset_set_minioi_s, [:pointer, :int], :int
66
- attach_function :aubio_onset_set_minioi_ms, [:pointer, :float], :int
67
- attach_function :aubio_onset_set_delay, [:pointer, :int], :int
68
- attach_function :aubio_onset_set_delay_s, [:pointer, :int], :int
69
- attach_function :aubio_onset_set_delay_ms, [:pointer, :float], :int
65
+ attach_function :aubio_onset_set_threshold, %i[pointer float], :int
66
+ attach_function :aubio_onset_set_minioi, %i[pointer int], :int
67
+ attach_function :aubio_onset_set_minioi_s, %i[pointer int], :int
68
+ attach_function :aubio_onset_set_minioi_ms, %i[pointer float], :int
69
+ attach_function :aubio_onset_set_delay, %i[pointer int], :int
70
+ attach_function :aubio_onset_set_delay_s, %i[pointer int], :int
71
+ attach_function :aubio_onset_set_delay_ms, %i[pointer float], :int
70
72
  attach_function :aubio_onset_get_minioi, [:pointer], :int
71
73
  attach_function :aubio_onset_get_minioi_s, [:pointer], :float
72
74
  attach_function :aubio_onset_get_minioi_ms, [:pointer], :float
@@ -77,11 +79,11 @@ module Aubio
77
79
  attach_function :del_aubio_onset, [:pointer], :void
78
80
 
79
81
  # pitch
80
- attach_function :new_aubio_pitch, [:string, :int, :int, :int], :pointer
81
- attach_function :aubio_pitch_do, [:pointer, :pointer, :pointer], :void
82
- attach_function :aubio_pitch_set_tolerance, [:pointer, :int], :int
83
- attach_function :aubio_pitch_set_unit, [:pointer, :string], :int
84
- attach_function :aubio_pitch_set_silence, [:pointer, :float], :int
82
+ attach_function :new_aubio_pitch, %i[string int int int], :pointer
83
+ attach_function :aubio_pitch_do, %i[pointer pointer pointer], :void
84
+ attach_function :aubio_pitch_set_tolerance, %i[pointer int], :int
85
+ attach_function :aubio_pitch_set_unit, %i[pointer string], :int
86
+ attach_function :aubio_pitch_set_silence, %i[pointer float], :int
85
87
  attach_function :aubio_pitch_get_silence, [:pointer], :float
86
88
  attach_function :aubio_pitch_get_confidence, [:pointer], :float
87
89
  attach_function :del_aubio_pitch, [:pointer], :void
@@ -89,16 +91,15 @@ module Aubio
89
91
  # new fvec
90
92
  attach_function :new_fvec, [:int], :pointer
91
93
  attach_function :del_fvec, [:pointer], :void
92
- attach_function :fvec_get_sample, [:pointer, :int], :float
93
- attach_function :fvec_set_sample, [:pointer, :float, :int], :void
94
+ attach_function :fvec_get_sample, %i[pointer int], :float
95
+ attach_function :fvec_set_sample, %i[pointer float int], :void
94
96
  attach_function :fvec_get_data, [:pointer], :float
95
97
  attach_function :fvec_print, [:pointer], :void
96
- attach_function :fvec_set_all, [:pointer, :float], :void
98
+ attach_function :fvec_set_all, %i[pointer float], :void
97
99
  attach_function :fvec_zeros, [:pointer], :void
98
100
  attach_function :fvec_rev, [:pointer], :void
99
- attach_function :fvec_weight, [:pointer, :pointer], :void
100
- attach_function :fvec_copy, [:pointer, :pointer], :void
101
+ attach_function :fvec_weight, %i[pointer pointer], :void
102
+ attach_function :fvec_copy, %i[pointer pointer], :void
101
103
  attach_function :fvec_ones, [:pointer], :void
102
-
103
104
  end
104
105
  end
@@ -1,73 +1,73 @@
1
- module Aubio
2
- class Onsets
1
+ # frozen_string_literal: true
3
2
 
4
- def initialize(aubio_source, params)
3
+ module Aubio
4
+ class Onsets
5
+ def initialize(aubio_source, params)
5
6
  # TODO: cleanup param dups
6
- @sample_rate = params[:sample_rate] || 44100
7
- @window_size = params[:window_size] || 1024
8
- @hop_size = params[:hop_size] || 512
7
+ @sample_rate = params[:sample_rate] || 44_100
8
+ @window_size = params[:window_size] || 1024
9
+ @hop_size = params[:hop_size] || 512
9
10
 
10
- @source = aubio_source
11
- @onset = Api.new_aubio_onset('default', @window_size, @hop_size, @sample_rate)
12
- Api.aubio_onset_set_minioi_ms(@onset, 12.0)
13
- Api.aubio_onset_set_threshold(@onset, 0.3)
11
+ @source = aubio_source
12
+ @onset = Api.new_aubio_onset('default', @window_size, @hop_size, @sample_rate)
13
+ Api.aubio_onset_set_minioi_ms(@onset, 12.0)
14
+ Api.aubio_onset_set_threshold(@onset, 0.3)
14
15
 
15
- # create output for source
16
- @sample_buffer = Api.new_fvec(@hop_size)
17
- # create output for pitch and beat
18
- @out_fvec = Api.new_fvec(1)
19
- end
16
+ # create output for source
17
+ @sample_buffer = Api.new_fvec(@hop_size)
18
+ # create output for pitch and beat
19
+ @out_fvec = Api.new_fvec(1)
20
+ end
20
21
 
21
- def each
22
- return enum_for(:each) unless block_given?
22
+ def each
23
+ return enum_for(:each) unless block_given?
23
24
 
24
- total_frames_counter = 0
25
- read_buffer = FFI::MemoryPointer.new(:int)
25
+ total_frames_counter = 0
26
+ read_buffer = FFI::MemoryPointer.new(:int)
26
27
 
27
- loop do
28
- # Perform onset calculation
28
+ loop do
29
+ # Perform onset calculation
29
30
  Api.aubio_source_do(@source, @sample_buffer, read_buffer)
30
- Api.aubio_onset_do(@onset, @sample_buffer, @out_fvec)
31
+ Api.aubio_onset_do(@onset, @sample_buffer, @out_fvec)
31
32
 
32
33
  # Retrieve result
33
- onset_new_peak = Api.fvec_get_sample(@out_fvec, 0)
34
+ onset_new_peak = Api.fvec_get_sample(@out_fvec, 0)
34
35
  no_of_bytes_read = read_buffer.read_int
35
36
  total_frames_counter += no_of_bytes_read
36
37
 
37
38
  if onset_new_peak > 0.0
38
- onset_seconds = Api.aubio_onset_get_last_s(@onset)
39
- onset_milliseconds = Api.aubio_onset_get_last_ms(@onset)
40
- output = {
41
- :s => onset_seconds,
42
- :ms => onset_milliseconds,
43
- :start => (onset_seconds == 0.0 ? 1 : 0),
44
- :end => 0
45
- }
46
- yield output
47
- end
48
-
49
- if no_of_bytes_read != @hop_size
50
- # there's no more audio to look at
51
-
52
- # Let's output one last onset to mark the end of the file
53
- total_time = total_frames_counter.to_f / @sample_rate.to_f
39
+ onset_seconds = Api.aubio_onset_get_last_s(@onset)
40
+ onset_milliseconds = Api.aubio_onset_get_last_ms(@onset)
54
41
  output = {
55
- :s => total_time,
56
- :ms => total_time/1000.0,
57
- :start => 0,
58
- :end => 1
42
+ s: onset_seconds,
43
+ ms: onset_milliseconds,
44
+ start: (onset_seconds == 0.0 ? 1 : 0),
45
+ end: 0
59
46
  }
60
47
  yield output
48
+ end
61
49
 
62
- # clean up
63
- Api.del_aubio_onset(@onset)
64
- Api.del_fvec(@sample_buffer)
65
- Api.del_fvec(@out_fvec)
50
+ next unless no_of_bytes_read != @hop_size
66
51
 
67
- break
68
- end
69
- end
70
- end
52
+ # there's no more audio to look at
53
+
54
+ # Let's output one last onset to mark the end of the file
55
+ total_time = total_frames_counter.to_f / @sample_rate.to_f
56
+ output = {
57
+ s: total_time,
58
+ ms: total_time / 1000.0,
59
+ start: 0,
60
+ end: 1
61
+ }
62
+ yield output
63
+
64
+ # clean up
65
+ Api.del_aubio_onset(@onset)
66
+ Api.del_fvec(@sample_buffer)
67
+ Api.del_fvec(@out_fvec)
71
68
 
72
- end
69
+ break
70
+ end
71
+ end
72
+ end
73
73
  end
@@ -1,34 +1,43 @@
1
- module Aubio
2
- class Pitches
1
+ # frozen_string_literal: true
3
2
 
4
- def initialize(aubio_source, params)
3
+ module Aubio
4
+ class Pitches
5
+ def initialize(aubio_source, params)
5
6
  # TODO: cleanup param dups
6
- @sample_rate = params[:sample_rate] || 44100
7
- @window_size = params[:window_size] || 1024
8
- @hop_size = params[:hop_size] || 512
9
-
10
- @source = aubio_source
11
- @pitch = Api.new_aubio_pitch('yin', @window_size, @hop_size, @sample_rate)
12
- Api.aubio_pitch_set_unit(@pitch, 'midi')
13
- Api.aubio_pitch_set_tolerance(@pitch, 0.8)
14
-
15
- # create output for source
16
- @sample_buffer = Api.new_fvec(@hop_size)
17
- # create output for pitch and beat
18
- @out_fvec = Api.new_fvec(1)
19
- end
20
-
21
- def each
22
- return enum_for(:each) unless block_given?
23
-
24
- total_frames_counter = 0
25
- read_buffer = FFI::MemoryPointer.new(:int)
7
+ @sample_rate = params[:sample_rate] || 44_100
8
+ @window_size = params[:window_size] || 1024
9
+ @hop_size = params[:hop_size] || 512
10
+
11
+ # Set the tolerance for the pitch detection algorithm.
12
+ # Typical values range between 0.2 and 0.9.
13
+ # Pitch candidates found with a confidence less than this threshold will not be selected.
14
+ # The higher the threshold, the more confidence in the candidates.
15
+ @confidence_thresh = params[:confidence_thresh] || 0.9
16
+
17
+ @pitch_method = params[:pitch_method] || 'yinfast'
18
+
19
+ @source = aubio_source
20
+ @pitch = Api.new_aubio_pitch(@pitch_method, @window_size, @hop_size, @sample_rate)
21
+ Api.aubio_pitch_set_unit(@pitch, 'midi')
22
+ Api.aubio_pitch_set_tolerance(@pitch, @confidence_thresh)
23
+
24
+ # create output for source
25
+ @sample_buffer = Api.new_fvec(@hop_size)
26
+ # create output for pitch and beat
27
+ @out_fvec = Api.new_fvec(1)
28
+ end
29
+
30
+ def each
31
+ return enum_for(:each) unless block_given?
32
+
33
+ total_frames_counter = 0
34
+ read_buffer = FFI::MemoryPointer.new(:int)
26
35
  last_pitch = 0
27
36
 
28
- loop do
29
- # Perform pitch calculation
37
+ loop do
38
+ # Perform pitch calculation
30
39
  Api.aubio_source_do(@source, @sample_buffer, read_buffer)
31
- Api.aubio_pitch_do(@pitch, @sample_buffer, @out_fvec)
40
+ Api.aubio_pitch_do(@pitch, @sample_buffer, @out_fvec)
32
41
 
33
42
  # Retrieve result
34
43
  pitch = Api.fvec_get_sample(@out_fvec, 0)
@@ -36,40 +45,39 @@ module Aubio
36
45
  no_of_bytes_read = read_buffer.read_int
37
46
  total_frames_counter += no_of_bytes_read
38
47
 
39
- if (last_pitch - pitch).abs >= 1 and confidence > 0.9
40
- output = {
41
- :pitch => pitch,
42
- :confidence => confidence,
43
- :start => (total_frames_counter == 0 ? 1 : 0),
44
- :end => 0
45
- }
48
+ if ((last_pitch - pitch).abs >= 1) && (confidence > @confidence_thresh)
49
+ output = {
50
+ pitch: pitch,
51
+ confidence: confidence,
52
+ start: (total_frames_counter == 0 ? 1 : 0),
53
+ end: 0
54
+ }
46
55
  yield output
47
- end
56
+ end
48
57
 
49
58
  last_pitch = pitch
50
59
 
51
- if no_of_bytes_read != @hop_size
52
- # there's no more audio to look at
60
+ next unless no_of_bytes_read != @hop_size
53
61
 
54
- # Let's output one last pitch to mark the end of the file
55
- total_time = total_frames_counter.to_f / @sample_rate.to_f
56
- output = {
57
- :pitch => pitch,
58
- :confidence => confidence,
59
- :start => 0,
60
- :end => 1
61
- }
62
- yield output
62
+ # there's no more audio to look at
63
63
 
64
- # clean up
65
- Api.del_aubio_pitch(@pitch)
66
- Api.del_fvec(@sample_buffer)
67
- Api.del_fvec(@out_fvec)
64
+ # Let's output one last pitch to mark the end of the file
65
+ total_time = total_frames_counter.to_f / @sample_rate.to_f
66
+ output = {
67
+ pitch: pitch,
68
+ confidence: confidence,
69
+ start: 0,
70
+ end: 1
71
+ }
72
+ yield output
68
73
 
69
- break
70
- end
71
- end
72
- end
74
+ # clean up
75
+ Api.del_aubio_pitch(@pitch)
76
+ Api.del_fvec(@sample_buffer)
77
+ Api.del_fvec(@out_fvec)
73
78
 
74
- end
79
+ break
80
+ end
81
+ end
82
+ end
75
83
  end