aubio 0.3.3 → 0.3.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d740e1026743e2282f09236d8cec60f7c04265a7b08993bd2ccdf2115781725
4
- data.tar.gz: 2715df8682e5bdc0344c6d4897cfb4e6f744a52336d4642f8ed3147677fce58a
3
+ metadata.gz: eaa1dc334733e618f7f8272a421894fac350213f48b93e59b177d49e01a71c1c
4
+ data.tar.gz: d857822bd9d8ec7f7bd76cbf572e79c1a07a479ad191c30f5a9052131e242726
5
5
  SHA512:
6
- metadata.gz: ef9992235f44852cabb613191f1039d7227c21c3f7059e32ed49c177b77baab871cf44b94f0566473c9e373050ee586292da7d3dd9703f1a558af1e993a159ec
7
- data.tar.gz: 0a248b67a3d2a4f07f01b10e6be9858aa5a17e58d9e6eadda3b390972d99093ec3a3b3f17d88e1715b3433e9229f7a0c15566eae1bce2b8074a28f324ec69f9d
6
+ metadata.gz: fdfe5eb61b80fd531f9ca5880d648bb4726662296ce575779b06f10d0779db3a269c057464c09d4a741cb304a57cec064dbe6013931ed3a43f12d1d451608868
7
+ data.tar.gz: e062505345d9045572fffac90d2a91de73ae204605dda9a101c889f7688425007f5719192bf60449ecd523f7a7c392d8ed47ce0ecc5c03a28f0eadd9ad9f1bae
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in aubio.gemspec
data/README.md CHANGED
@@ -1,5 +1,4 @@
1
- # Aubio
2
- ## warning: pre-alpha subject to change
1
+ # Ruby Aubio
3
2
 
4
3
  A Ruby binding for the `aubio` library.
5
4
 
@@ -16,6 +15,12 @@ In their own words...
16
15
 
17
16
  ## Using `ffi_gen` to autogenerate bindings
18
17
 
18
+ This is optional, and something being considered for future development. The
19
+ `ffi_gen` gem can analyse a library using clang to automatically write the ffi
20
+ bindings for us (similar to `bindgen` in Rust as I understand it).
21
+
22
+ You can see the results in the `autogen_bindings` branch.
23
+
19
24
  ```
20
25
  brew install aubio --with-libsndfile --with-fftw --with-libsamplerate
21
26
  brew install llvm --with-clang --enable-shared
@@ -23,6 +28,12 @@ brew install llvm --with-clang --enable-shared
23
28
  LD_LIBRARY_PATH="/usr/local/opt/llvm35/lib/llvm-3.5/lib" ruby aubio-ffi-generator.rb
24
29
  ```
25
30
 
31
+ ## Running tests
32
+
33
+ ```
34
+ $ rake clobber && rake build && rake test
35
+ ```
36
+
26
37
  ## Installation
27
38
 
28
39
  Add this line to your application's Gemfile:
data/Rakefile CHANGED
@@ -1,10 +1,12 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
3
5
 
4
6
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
7
9
  t.test_files = FileList['test/**/*_test.rb']
8
10
  end
9
11
 
10
- task :default => :spec
12
+ task default: :spec
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # this needs to be set on the command line when running this script
2
4
  # ENV['LD_LIBRARY_PATH'] = "/usr/local/opt/llvm35/lib/llvm-3.5/lib"
3
5
  require 'ffi_gen'
4
6
 
5
7
  FFIGen.generate(
6
- module_name: "Aubio::Api",
7
- ffi_lib: "/usr/local/Cellar/aubio/0.4.4/lib/libaubio.dylib",
8
- headers: Dir["/usr/local/Cellar/aubio/0.4.4/include/aubio/**/*.h"],
9
- cflags: `/usr/local/opt/llvm35/bin/llvm-config-3.5 --cflags`.split(" "),
8
+ module_name: 'Aubio::Api',
9
+ ffi_lib: '/usr/local/Cellar/aubio/0.4.4/lib/libaubio.dylib',
10
+ headers: Dir['/usr/local/Cellar/aubio/0.4.4/include/aubio/**/*.h'],
11
+ cflags: `/usr/local/opt/llvm35/bin/llvm-config-3.5 --cflags`.split(' '),
10
12
  # the following can be used to trim the aubio_ from the generated function names
11
13
  # prefixes: ["aubio_", "CX"],
12
- prefixes: [],
13
- output: "lib/aubio/aubio-ffi.rb"
14
+ prefixes: [],
15
+ output: 'lib/aubio/aubio-ffi.rb'
14
16
  )
@@ -1,29 +1,31 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'aubio/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "aubio"
8
+ spec.name = 'aubio'
8
9
  spec.version = Aubio::VERSION
9
- spec.authors = ["Xavier Riley"]
10
- spec.email = ["xavriley@hotmail.com"]
10
+ spec.authors = ['Xavier Riley']
11
+ spec.email = ['xavriley@hotmail.com']
11
12
 
12
- spec.summary = %q{Ruby bindings for the aubio audio library}
13
- spec.description = %q{Aubio is a tool designed for the extraction of annotations from audio signals. Its features include segmenting a sound file before each of its attacks, performing pitch detection, tapping the beat and producing midi streams from live audio.}
14
- spec.homepage = "https://github.com/xavriley/ruby-aubio"
15
- spec.license = "MIT"
13
+ spec.summary = 'Ruby bindings for the aubio audio library'
14
+ spec.description = 'Aubio is a tool designed for the extraction of annotations from audio signals. Its features include segmenting a sound file before each of its attacks, performing pitch detection, tapping the beat and producing midi streams from live audio.'
15
+ spec.homepage = 'https://github.com/xavriley/ruby-aubio'
16
+ spec.license = 'MIT'
16
17
 
17
18
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
19
+ spec.bindir = 'exe'
19
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
21
+ spec.require_paths = ['lib']
21
22
 
22
- spec.add_dependency "ffi", "~> 1.9"
23
+ spec.add_dependency 'ffi', '~> 1.9'
23
24
 
24
- spec.add_development_dependency "bundler"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "minitest", "~> 5.0"
27
- spec.add_development_dependency "pry"
28
- spec.add_development_dependency "ffi_gen"
25
+ spec.add_development_dependency 'bundler'
26
+ spec.add_dependency 'rake', '>= 12.3.3'
27
+ spec.add_development_dependency 'ffi_gen'
28
+ spec.add_development_dependency 'minitest', '~> 5.0'
29
+ spec.add_development_dependency 'pry'
30
+ spec.add_development_dependency 'rubocop'
29
31
  end
data/aubio.rb CHANGED
@@ -1,129 +1,131 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ffi'
2
4
 
3
5
  module Aubio
4
6
  extend FFI::Library
5
7
  ffi_lib '/usr/local/Cellar/aubio/0.4.2/lib/libaubio.4.2.2.dylib'
6
8
 
7
- # tempo
8
- attach_function :new_aubio_tempo, [ :string, :int, :int, :int ], :pointer
9
- attach_function :aubio_tempo_do, [:pointer, :pointer, :pointer], :void
10
- attach_function :aubio_tempo_get_last, [:pointer], :int
11
- attach_function :aubio_tempo_get_last_s, [:pointer], :float
12
- attach_function :aubio_tempo_get_last_ms, [:pointer], :float
13
- attach_function :aubio_tempo_set_silence, [:pointer, :float], :int
14
- attach_function :aubio_tempo_get_silence, [:pointer], :float
15
- attach_function :aubio_tempo_set_threshold, [:pointer, :float], :int
16
- attach_function :aubio_tempo_get_threshold, [:pointer], :float
17
- attach_function :aubio_tempo_get_bpm, [:pointer], :float
18
- attach_function :aubio_tempo_get_confidence, [:pointer], :float
19
- attach_function :del_aubio_tempo, [:pointer], :void
9
+ # tempo
10
+ attach_function :new_aubio_tempo, %i[string int int int], :pointer
11
+ attach_function :aubio_tempo_do, %i[pointer pointer pointer], :void
12
+ attach_function :aubio_tempo_get_last, [:pointer], :int
13
+ attach_function :aubio_tempo_get_last_s, [:pointer], :float
14
+ attach_function :aubio_tempo_get_last_ms, [:pointer], :float
15
+ attach_function :aubio_tempo_set_silence, %i[pointer float], :int
16
+ attach_function :aubio_tempo_get_silence, [:pointer], :float
17
+ attach_function :aubio_tempo_set_threshold, %i[pointer float], :int
18
+ attach_function :aubio_tempo_get_threshold, [:pointer], :float
19
+ attach_function :aubio_tempo_get_bpm, [:pointer], :float
20
+ attach_function :aubio_tempo_get_confidence, [:pointer], :float
21
+ attach_function :del_aubio_tempo, [:pointer], :void
20
22
 
21
23
  # beattracking / misc
22
- attach_function :new_aubio_beattracking, [:int, :int, :int], :pointer
23
- attach_function :aubio_beattracking_do, [:pointer, :pointer, :pointer], :void
24
- attach_function :aubio_beattracking_get_bpm, [:pointer], :float
25
- attach_function :aubio_filter_do, [:pointer, :pointer], :void
26
- attach_function :new_aubio_filter_a_weighting, [:int], :pointer
24
+ attach_function :new_aubio_beattracking, %i[int int int], :pointer
25
+ attach_function :aubio_beattracking_do, %i[pointer pointer pointer], :void
26
+ attach_function :aubio_beattracking_get_bpm, [:pointer], :float
27
+ attach_function :aubio_filter_do, %i[pointer pointer], :void
28
+ attach_function :new_aubio_filter_a_weighting, [:int], :pointer
27
29
 
28
30
  # source
29
- attach_function :new_aubio_source, [:string, :int, :int], :pointer
30
- attach_function :aubio_source_do, [:pointer, :pointer, :pointer], :void
31
- attach_function :aubio_source_do_multi, [:pointer, :pointer, :pointer], :void
32
- attach_function :aubio_source_get_samplerate, [:pointer], :int
33
- attach_function :aubio_source_get_channels, [:pointer], :int
34
- attach_function :aubio_source_seek, [:pointer, :int], :int
35
- attach_function :aubio_source_close, [:pointer], :int
36
- attach_function :del_aubio_source, [:pointer], :void
31
+ attach_function :new_aubio_source, %i[string int int], :pointer
32
+ attach_function :aubio_source_do, %i[pointer pointer pointer], :void
33
+ attach_function :aubio_source_do_multi, %i[pointer pointer pointer], :void
34
+ attach_function :aubio_source_get_samplerate, [:pointer], :int
35
+ attach_function :aubio_source_get_channels, [:pointer], :int
36
+ attach_function :aubio_source_seek, %i[pointer int], :int
37
+ attach_function :aubio_source_close, [:pointer], :int
38
+ attach_function :del_aubio_source, [:pointer], :void
37
39
 
38
40
  # sink
39
- attach_function :new_aubio_sink, [:string, :int], :pointer
40
- attach_function :aubio_sink_preset_samplerate, [:pointer, :int], :void
41
- attach_function :aubio_sink_preset_channels, [:pointer, :int], :void
42
- attach_function :aubio_sink_get_samplerate, [:pointer], :int
43
- attach_function :aubio_sink_get_channels, [:pointer], :int
44
- attach_function :aubio_sink_do, [:pointer, :pointer, :int], :void
45
- attach_function :aubio_sink_do_multi, [:pointer, :pointer, :int], :void
46
- attach_function :aubio_sink_close, [:pointer], :int
47
- attach_function :del_aubio_sink, [:pointer], :void
41
+ attach_function :new_aubio_sink, %i[string int], :pointer
42
+ attach_function :aubio_sink_preset_samplerate, %i[pointer int], :void
43
+ attach_function :aubio_sink_preset_channels, %i[pointer int], :void
44
+ attach_function :aubio_sink_get_samplerate, [:pointer], :int
45
+ attach_function :aubio_sink_get_channels, [:pointer], :int
46
+ attach_function :aubio_sink_do, %i[pointer pointer int], :void
47
+ attach_function :aubio_sink_do_multi, %i[pointer pointer int], :void
48
+ attach_function :aubio_sink_close, [:pointer], :int
49
+ attach_function :del_aubio_sink, [:pointer], :void
48
50
 
49
51
  # onset
50
- attach_function :new_aubio_onset, [:string, :int, :int, :int], :pointer
51
- attach_function :aubio_onset_do, [:pointer, :pointer, :pointer], :void
52
- attach_function :aubio_onset_get_last, [:pointer], :int
53
- attach_function :aubio_onset_get_last_s, [:pointer], :float
54
- attach_function :aubio_onset_get_last_ms, [:pointer], :float
55
- attach_function :aubio_onset_set_silence, [:pointer, :float], :int
56
- attach_function :aubio_onset_get_silence, [:pointer], :float
57
- attach_function :aubio_onset_get_descriptor, [:pointer], :float
58
- attach_function :aubio_onset_get_thresholded_descriptor, [:pointer], :float
59
- attach_function :aubio_onset_set_threshold, [:pointer, :float], :int
60
- attach_function :aubio_onset_set_minioi, [:pointer, :int], :int
61
- attach_function :aubio_onset_set_minioi_s, [:pointer, :int], :int
62
- attach_function :aubio_onset_set_minioi_ms, [:pointer, :float], :int
63
- attach_function :aubio_onset_set_delay, [:pointer, :int], :int
64
- attach_function :aubio_onset_set_delay_s, [:pointer, :int], :int
65
- attach_function :aubio_onset_set_delay_ms, [:pointer, :float], :int
66
- attach_function :aubio_onset_get_minioi, [:pointer], :int
67
- attach_function :aubio_onset_get_minioi_s, [:pointer], :float
68
- attach_function :aubio_onset_get_minioi_ms, [:pointer], :float
69
- attach_function :aubio_onset_get_delay, [:pointer], :int
70
- attach_function :aubio_onset_get_delay_s, [:pointer], :float
71
- attach_function :aubio_onset_get_delay_ms, [:pointer], :float
72
- attach_function :aubio_onset_get_threshold, [:pointer], :float
73
- attach_function :del_aubio_onset, [:pointer], :void
52
+ attach_function :new_aubio_onset, %i[string int int int], :pointer
53
+ attach_function :aubio_onset_do, %i[pointer pointer pointer], :void
54
+ attach_function :aubio_onset_get_last, [:pointer], :int
55
+ attach_function :aubio_onset_get_last_s, [:pointer], :float
56
+ attach_function :aubio_onset_get_last_ms, [:pointer], :float
57
+ attach_function :aubio_onset_set_silence, %i[pointer float], :int
58
+ attach_function :aubio_onset_get_silence, [:pointer], :float
59
+ attach_function :aubio_onset_get_descriptor, [:pointer], :float
60
+ attach_function :aubio_onset_get_thresholded_descriptor, [:pointer], :float
61
+ attach_function :aubio_onset_set_threshold, %i[pointer float], :int
62
+ attach_function :aubio_onset_set_minioi, %i[pointer int], :int
63
+ attach_function :aubio_onset_set_minioi_s, %i[pointer int], :int
64
+ attach_function :aubio_onset_set_minioi_ms, %i[pointer float], :int
65
+ attach_function :aubio_onset_set_delay, %i[pointer int], :int
66
+ attach_function :aubio_onset_set_delay_s, %i[pointer int], :int
67
+ attach_function :aubio_onset_set_delay_ms, %i[pointer float], :int
68
+ attach_function :aubio_onset_get_minioi, [:pointer], :int
69
+ attach_function :aubio_onset_get_minioi_s, [:pointer], :float
70
+ attach_function :aubio_onset_get_minioi_ms, [:pointer], :float
71
+ attach_function :aubio_onset_get_delay, [:pointer], :int
72
+ attach_function :aubio_onset_get_delay_s, [:pointer], :float
73
+ attach_function :aubio_onset_get_delay_ms, [:pointer], :float
74
+ attach_function :aubio_onset_get_threshold, [:pointer], :float
75
+ attach_function :del_aubio_onset, [:pointer], :void
74
76
 
75
77
  # pitch
76
- attach_function :new_aubio_pitch, [:string, :int, :int, :int], :pointer
77
- attach_function :aubio_pitch_do, [:pointer, :pointer, :pointer], :void
78
- attach_function :aubio_pitch_set_tolerance, [:pointer, :int], :int
79
- attach_function :aubio_pitch_set_unit, [:pointer, :string], :int
80
- attach_function :aubio_pitch_set_silence, [:pointer, :float], :int
81
- attach_function :aubio_pitch_get_silence, [:pointer], :float
82
- attach_function :aubio_pitch_get_confidence, [:pointer], :float
83
- attach_function :del_aubio_pitch, [:pointer], :void
78
+ attach_function :new_aubio_pitch, %i[string int int int], :pointer
79
+ attach_function :aubio_pitch_do, %i[pointer pointer pointer], :void
80
+ attach_function :aubio_pitch_set_tolerance, %i[pointer int], :int
81
+ attach_function :aubio_pitch_set_unit, %i[pointer string], :int
82
+ attach_function :aubio_pitch_set_silence, %i[pointer float], :int
83
+ attach_function :aubio_pitch_get_silence, [:pointer], :float
84
+ attach_function :aubio_pitch_get_confidence, [:pointer], :float
85
+ attach_function :del_aubio_pitch, [:pointer], :void
84
86
 
85
87
  # new fvec
86
- attach_function :new_fvec, [:int], :pointer
87
- attach_function :del_fvec, [:pointer], :void
88
- attach_function :fvec_get_sample, [:pointer, :int], :float
89
- attach_function :fvec_set_sample, [:pointer, :float, :int], :void
90
- attach_function :fvec_get_data, [:pointer], :float
91
- attach_function :fvec_print, [:pointer], :void
92
- attach_function :fvec_set_all, [:pointer, :float], :void
93
- attach_function :fvec_zeros, [:pointer], :void
94
- attach_function :fvec_rev, [:pointer], :void
95
- attach_function :fvec_weight, [:pointer, :pointer], :void
96
- attach_function :fvec_copy, [:pointer, :pointer], :void
97
- attach_function :fvec_ones, [:pointer], :void
98
-
99
- def self.onsets(path, params={})
100
- sample_rate = params[:sample_rate] || 44100
101
- window_size = params[:window_size] || 1024
102
- hop_size = params[:hop_size] || 512
88
+ attach_function :new_fvec, [:int], :pointer
89
+ attach_function :del_fvec, [:pointer], :void
90
+ attach_function :fvec_get_sample, %i[pointer int], :float
91
+ attach_function :fvec_set_sample, %i[pointer float int], :void
92
+ attach_function :fvec_get_data, [:pointer], :float
93
+ attach_function :fvec_print, [:pointer], :void
94
+ attach_function :fvec_set_all, %i[pointer float], :void
95
+ attach_function :fvec_zeros, [:pointer], :void
96
+ attach_function :fvec_rev, [:pointer], :void
97
+ attach_function :fvec_weight, %i[pointer pointer], :void
98
+ attach_function :fvec_copy, %i[pointer pointer], :void
99
+ attach_function :fvec_ones, [:pointer], :void
100
+
101
+ def self.onsets(path, params = {})
102
+ sample_rate = params[:sample_rate] || 44_100
103
+ window_size = params[:window_size] || 1024
104
+ hop_size = params[:hop_size] || 512
103
105
 
104
106
  # parser.add_option("-O","--onset-method",
105
107
  # action="store", dest="onset_method", default='default',
106
108
  # metavar = "<onset_method>",
107
109
  # help="onset detection method [default=default] \
108
110
  # complexdomain|hfc|phase|specdiff|energy|kl|mkl")
109
- onset_method = params[:onset_method] || "default"
111
+ onset_method = params[:onset_method] || 'default'
110
112
 
111
113
  # # cutting methods
112
114
  # parser.add_option("-b","--beat",
113
115
  # action="store_true", dest="beat", default=False,
114
116
  # help="use beat locations")
115
- beat = params[:beat] || false
117
+ beat = params[:beat] || false
116
118
  # """
117
119
  # parser.add_option("-S","--silencecut",
118
120
  # action="store_true", dest="silencecut", default=False,
119
121
  # help="use silence locations")
120
- silencecut = params[:silencecut] || false
122
+ silencecut = params[:silencecut] || false
121
123
 
122
124
  # parser.add_option("-s","--silence",
123
125
  # metavar = "<value>",
124
126
  # action="store", dest="silence", default=-70,
125
127
  # help="silence threshold [default=-70]")
126
- silence = params[:silence] || -70
128
+ silence = params[:silence] || -70
127
129
 
128
130
  # """
129
131
  # # algorithm parameters
@@ -231,22 +233,21 @@ module Aubio
231
233
  # sys.exit(1)
232
234
  # return options, args
233
235
 
234
- source = new_aubio_source(path, sample_rate, hop_size)
235
- onset = new_aubio_onset("default", 512, hop_size)
236
+ source = new_aubio_source(path, sample_rate, hop_size)
237
+ onset = new_aubio_onset('default', 512, hop_size)
236
238
  aubio_onset_set_minioi_ms(onset, 12.0)
237
- aubio_onset_set_threshold(onset, 0.3)
239
+ aubio_onset_set_threshold(onset, 0.3)
238
240
 
239
241
  timestamps = []
240
242
  total_frames = 0
241
- # create output for source
242
- samples = new_fvec(hop_size)
243
- total_frames_counter = 0
244
- tmp_read = FFI::MemoryPointer.new(:int)
245
-
246
- loop do
247
- aubio_source_do(source, samples, tmp_read)
248
-
249
- end
243
+ # create output for source
244
+ samples = new_fvec(hop_size)
245
+ total_frames_counter = 0
246
+ tmp_read = FFI::MemoryPointer.new(:int)
247
+
248
+ loop do
249
+ aubio_source_do(source, samples, tmp_read)
250
+ end
250
251
  # if options.beat:
251
252
  # o = tempo(options.onset_method, bufsize, hopsize)
252
253
  # else:
@@ -300,168 +301,166 @@ module Aubio
300
301
  # info = 'created %(nstamps)d slices from %(source_file)s' % locals()
301
302
  # info += ' (total %(duration).2fs at %(samplerate)dHz)\n' % locals()
302
303
  # sys.stderr.write(info)
303
- end
304
+ end
304
305
 
305
- def self.get_features(path, params={})
306
- sample_rate = params[:sample_rate] || 44100
307
- window_size = params[:window_size] || 1024
308
- hop_size = params[:hop_size] || 512
306
+ def self.get_features(path, params = {})
307
+ sample_rate = params[:sample_rate] || 44_100
308
+ window_size = params[:window_size] || 1024
309
+ hop_size = params[:hop_size] || 512
309
310
 
310
311
  source = new_aubio_source(path, sample_rate, hop_size)
311
312
  calculated_sample_rate = aubio_source_get_samplerate(source)
312
313
  puts "samplerate: #{calculated_sample_rate}"
313
314
 
314
- onset = new_aubio_onset('default', window_size, hop_size, sample_rate)
315
- aubio_onset_set_minioi_ms(onset, 12.0)
316
- aubio_onset_set_threshold(onset, 0.3)
317
- onsets = []
315
+ onset = new_aubio_onset('default', window_size, hop_size, sample_rate)
316
+ aubio_onset_set_minioi_ms(onset, 12.0)
317
+ aubio_onset_set_threshold(onset, 0.3)
318
+ onsets = []
318
319
 
319
- pitch = new_aubio_pitch('default', window_size, hop_size, sample_rate)
320
- aubio_pitch_set_unit(pitch, 'Hz')
320
+ pitch = new_aubio_pitch('default', window_size, hop_size, sample_rate)
321
+ aubio_pitch_set_unit(pitch, 'Hz')
321
322
 
322
- # create output for source
323
- samples = new_fvec(hop_size)
324
- # create output for pitch and beat
325
- out_fvec = new_fvec(1)
326
- total_frames_counter = 0
327
- tmp_read = FFI::MemoryPointer.new(:int)
323
+ # create output for source
324
+ samples = new_fvec(hop_size)
325
+ # create output for pitch and beat
326
+ out_fvec = new_fvec(1)
327
+ total_frames_counter = 0
328
+ tmp_read = FFI::MemoryPointer.new(:int)
328
329
 
329
- loop do
330
- aubio_source_do(source, samples, tmp_read)
330
+ loop do
331
+ aubio_source_do(source, samples, tmp_read)
331
332
 
332
- aubio_pitch_do(pitch, samples, out_fvec)
333
+ aubio_pitch_do(pitch, samples, out_fvec)
333
334
 
334
- cur_time = total_frames_counter / sample_rate
335
- last_pitch = fvec_get_sample(out_fvec, 0);
335
+ cur_time = total_frames_counter / sample_rate
336
+ last_pitch = fvec_get_sample(out_fvec, 0)
336
337
 
337
- #puts "pitch at #{cur_time} seconds: #{last_pitch} Hz"
338
+ # puts "pitch at #{cur_time} seconds: #{last_pitch} Hz"
338
339
 
339
- aubio_onset_do(onset, samples, out_fvec)
340
- is_onset = fvec_get_sample(out_fvec, 0)
340
+ aubio_onset_do(onset, samples, out_fvec)
341
+ is_onset = fvec_get_sample(out_fvec, 0)
341
342
 
342
- if is_onset > 0.0
343
- last_onset = aubio_onset_get_last_s(onset)
344
- onsets << last_onset
345
- puts "onset at #{last_onset}"
346
- end
343
+ if is_onset > 0.0
344
+ last_onset = aubio_onset_get_last_s(onset)
345
+ onsets << last_onset
346
+ puts "onset at #{last_onset}"
347
+ end
347
348
 
348
- read = tmp_read.read_int
349
- total_frames_counter += read
350
- if(read != hop_size) then
351
- break
352
- end
353
- end
349
+ read = tmp_read.read_int
350
+ total_frames_counter += read
351
+ break if read != hop_size
352
+ end
354
353
 
355
- cur_time = total_frames_counter.to_f / sample_rate;
356
- puts "total time : #{cur_time} seconds (#{total_frames_counter} frames)"
357
- puts "found #{onsets.length} onsets total"
354
+ cur_time = total_frames_counter.to_f / sample_rate
355
+ puts "total time : #{cur_time} seconds (#{total_frames_counter} frames)"
356
+ puts "found #{onsets.length} onsets total"
358
357
 
359
358
  # cleanup
360
- del_aubio_source(source);
361
- del_aubio_onset(onset);
362
- del_aubio_pitch(pitch);
359
+ del_aubio_source(source)
360
+ del_aubio_onset(onset)
361
+ del_aubio_pitch(pitch)
363
362
 
364
363
  onsets
365
364
  end
366
365
 
367
- # # change comments, swap args, convert to sym
368
-
369
- # intPtr = 'int'
370
- # stringPtr = "string" #ref.refType(ref.types.CString);
371
-
372
- # {
373
- # "aubio_tempo_do": [ "void", [ "pointer", "pointer", "pointer"]],
374
- # "aubio_tempo_get_last": [ "int", ["pointer"]],
375
- # "aubio_tempo_get_last_s": [ "float", ["pointer"]],
376
- # "aubio_tempo_get_last_ms": [ "float", ["pointer"]],
377
- # "aubio_tempo_set_silence": [ "int", ["pointer", "float"]],
378
- # "aubio_tempo_get_silence": [ "float", ["pointer"]],
379
- # "aubio_tempo_set_threshold": [ "int", ["pointer", "float"]],
380
- # "aubio_tempo_get_threshold": [ "float", ["pointer"]],
381
- # "aubio_tempo_get_bpm": [ "float", ["pointer"]],
382
- # "aubio_tempo_get_confidence": [ "float", ["pointer"]],
383
- # "del_aubio_tempo": [ "void", ["pointer"]],
384
-
385
- # # beattracking / misc
386
- # "new_aubio_beattracking": [ "pointer", [ "int", "int", "int"]],
387
- # "aubio_beattracking_do": [ "void", [ "pointer", "pointer", "pointer"]],
388
- # "aubio_beattracking_get_bpm": [ "float", ["pointer"]],
389
- # "aubio_filter_do": [ "void", [ "pointer", "pointer" ]],
390
- # "new_aubio_filter_a_weighting": [ "pointer", [ "int" ]],
391
-
392
- # # source
393
- # "new_aubio_source": [ "pointer", [ "string", "int", "int" ]],
394
- # "aubio_source_do": [ "void", [ "pointer", "pointer", intPtr ]],
395
- # "aubio_source_do_multi": [ "void", [ "pointer", "pointer", intPtr ]],
396
- # "aubio_source_get_samplerate": [ "int", [ "pointer" ]],
397
- # "aubio_source_get_channels": [ "int", [ "pointer" ]],
398
- # "aubio_source_seek": [ "int", [ "pointer", "int" ]],
399
- # "aubio_source_close": [ "int", [ "pointer" ]],
400
- # "del_aubio_source": [ "void", [ "pointer" ]],
401
-
402
- # # sink
403
- # "new_aubio_sink": [ "pointer", [ "string", "int" ]],
404
- # "aubio_sink_preset_samplerate": [ "void", [ "pointer", "int" ]],
405
- # "aubio_sink_preset_channels": [ "void", [ "pointer", "int" ]],
406
- # "aubio_sink_get_samplerate": [ "int", [ "pointer" ]],
407
- # "aubio_sink_get_channels": [ "int", [ "pointer" ]],
408
- # "aubio_sink_do": ["void", ["pointer", "pointer", "int"]],
409
- # "aubio_sink_do_multi": ["void", ["pointer", "pointer", "int"]],
410
- # "aubio_sink_close": [ "int", [ "pointer" ]],
411
- # "del_aubio_sink": [ "void", [ "pointer" ]],
412
-
413
- # # onset
414
- # "new_aubio_onset": [ "pointer", [ "string", "int", "int", "int"]],
415
- # "aubio_onset_do": [ "void", [ "pointer", "pointer", "pointer"]],
416
- # "aubio_onset_get_last": [ "int", ["pointer"]],
417
- # "aubio_onset_get_last_s": [ "float", ["pointer"]],
418
- # "aubio_onset_get_last_ms": [ "float", ["pointer"]],
419
- # "aubio_onset_set_silence": [ "int", ["pointer", "float"]],
420
- # "aubio_onset_get_silence": [ "float", ["pointer"]],
421
- # "aubio_onset_get_descriptor": [ "float", ["pointer"]],
422
- # "aubio_onset_get_thresholded_descriptor": [ "float", ["pointer"]],
423
- # "aubio_onset_set_threshold": [ "int", ["pointer", "float"]],
424
- # "aubio_onset_set_minioi": [ "int", ["pointer", "int"]],
425
- # "aubio_onset_set_minioi_s": [ "int", ["pointer", "int"]],
426
- # "aubio_onset_set_minioi_ms": [ "int", ["pointer", "float"]],
427
- # "aubio_onset_set_delay": [ "int", ["pointer", "int"]],
428
- # "aubio_onset_set_delay_s": [ "int", ["pointer", "int"]],
429
- # "aubio_onset_set_delay_ms": [ "int", ["pointer", "float"]],
430
- # "aubio_onset_get_minioi": [ "int", ["pointer"]],
431
- # "aubio_onset_get_minioi_s": [ "float", ["pointer"]],
432
- # "aubio_onset_get_minioi_ms": [ "float", ["pointer"]],
433
- # "aubio_onset_get_delay": [ "int", ["pointer"]],
434
- # "aubio_onset_get_delay_s": [ "float", ["pointer"]],
435
- # "aubio_onset_get_delay_ms": [ "float", ["pointer"]],
436
- # "aubio_onset_get_threshold": [ "float", ["pointer"]],
437
- # "del_aubio_onset": [ "void", ["pointer"]],
438
-
439
- # # pitch
440
- # "new_aubio_pitch": [ "pointer", [ "string", "int", "int", "int"]],
441
- # "aubio_pitch_do": ["void", ["pointer", "pointer", "pointer"]],
442
- # "aubio_pitch_set_tolerance": [ "int", ["pointer", "int"]],
443
- # "aubio_pitch_set_unit": ["int", ["pointer", "string"]],
444
- # "aubio_pitch_set_silence": ["int", ["pointer", "float"]],
445
- # "aubio_pitch_get_silence": ["float", ["pointer"]],
446
- # "aubio_pitch_get_confidence": ["float", ["pointer"]],
447
- # "del_aubio_pitch": [ "void", ["pointer"]],
448
-
449
- # # fvec
450
- # "new_fvec": [ "pointer", [ "int" ]],
451
- # "del_fvec": [ "void", [ "pointer" ]],
452
- # "fvec_get_sample": [ "float", [ "pointer", "int" ]],
453
- # "fvec_set_sample": [ "void", [ "pointer", "float", "int" ]],
454
- # "fvec_get_data": [ "float", [ "pointer" ]],
455
- # "fvec_print": [ "void", [ "pointer" ]],
456
- # "fvec_set_all": [ "void", [ "pointer", "float" ]],
457
- # "fvec_zeros": [ "void", [ "pointer" ]],
458
- # "fvec_rev": [ "void", [ "pointer" ]],
459
- # "fvec_weight": [ "void", [ "pointer", "pointer" ]],
460
- # "fvec_copy": [ "void", [ "pointer", "pointer" ]],
461
- # "fvec_ones": [ "void", [ "pointer" ]],
462
- # }.each do |k,v|
463
- # puts "attach_function :#{k.to_sym}, #{v.last.map(&:to_sym)}, :#{v.first.to_sym}"
464
- # end
366
+ # # change comments, swap args, convert to sym
367
+
368
+ # intPtr = 'int'
369
+ # stringPtr = "string" #ref.refType(ref.types.CString);
370
+
371
+ # {
372
+ # "aubio_tempo_do": [ "void", [ "pointer", "pointer", "pointer"]],
373
+ # "aubio_tempo_get_last": [ "int", ["pointer"]],
374
+ # "aubio_tempo_get_last_s": [ "float", ["pointer"]],
375
+ # "aubio_tempo_get_last_ms": [ "float", ["pointer"]],
376
+ # "aubio_tempo_set_silence": [ "int", ["pointer", "float"]],
377
+ # "aubio_tempo_get_silence": [ "float", ["pointer"]],
378
+ # "aubio_tempo_set_threshold": [ "int", ["pointer", "float"]],
379
+ # "aubio_tempo_get_threshold": [ "float", ["pointer"]],
380
+ # "aubio_tempo_get_bpm": [ "float", ["pointer"]],
381
+ # "aubio_tempo_get_confidence": [ "float", ["pointer"]],
382
+ # "del_aubio_tempo": [ "void", ["pointer"]],
383
+
384
+ # # beattracking / misc
385
+ # "new_aubio_beattracking": [ "pointer", [ "int", "int", "int"]],
386
+ # "aubio_beattracking_do": [ "void", [ "pointer", "pointer", "pointer"]],
387
+ # "aubio_beattracking_get_bpm": [ "float", ["pointer"]],
388
+ # "aubio_filter_do": [ "void", [ "pointer", "pointer" ]],
389
+ # "new_aubio_filter_a_weighting": [ "pointer", [ "int" ]],
390
+
391
+ # # source
392
+ # "new_aubio_source": [ "pointer", [ "string", "int", "int" ]],
393
+ # "aubio_source_do": [ "void", [ "pointer", "pointer", intPtr ]],
394
+ # "aubio_source_do_multi": [ "void", [ "pointer", "pointer", intPtr ]],
395
+ # "aubio_source_get_samplerate": [ "int", [ "pointer" ]],
396
+ # "aubio_source_get_channels": [ "int", [ "pointer" ]],
397
+ # "aubio_source_seek": [ "int", [ "pointer", "int" ]],
398
+ # "aubio_source_close": [ "int", [ "pointer" ]],
399
+ # "del_aubio_source": [ "void", [ "pointer" ]],
400
+
401
+ # # sink
402
+ # "new_aubio_sink": [ "pointer", [ "string", "int" ]],
403
+ # "aubio_sink_preset_samplerate": [ "void", [ "pointer", "int" ]],
404
+ # "aubio_sink_preset_channels": [ "void", [ "pointer", "int" ]],
405
+ # "aubio_sink_get_samplerate": [ "int", [ "pointer" ]],
406
+ # "aubio_sink_get_channels": [ "int", [ "pointer" ]],
407
+ # "aubio_sink_do": ["void", ["pointer", "pointer", "int"]],
408
+ # "aubio_sink_do_multi": ["void", ["pointer", "pointer", "int"]],
409
+ # "aubio_sink_close": [ "int", [ "pointer" ]],
410
+ # "del_aubio_sink": [ "void", [ "pointer" ]],
411
+
412
+ # # onset
413
+ # "new_aubio_onset": [ "pointer", [ "string", "int", "int", "int"]],
414
+ # "aubio_onset_do": [ "void", [ "pointer", "pointer", "pointer"]],
415
+ # "aubio_onset_get_last": [ "int", ["pointer"]],
416
+ # "aubio_onset_get_last_s": [ "float", ["pointer"]],
417
+ # "aubio_onset_get_last_ms": [ "float", ["pointer"]],
418
+ # "aubio_onset_set_silence": [ "int", ["pointer", "float"]],
419
+ # "aubio_onset_get_silence": [ "float", ["pointer"]],
420
+ # "aubio_onset_get_descriptor": [ "float", ["pointer"]],
421
+ # "aubio_onset_get_thresholded_descriptor": [ "float", ["pointer"]],
422
+ # "aubio_onset_set_threshold": [ "int", ["pointer", "float"]],
423
+ # "aubio_onset_set_minioi": [ "int", ["pointer", "int"]],
424
+ # "aubio_onset_set_minioi_s": [ "int", ["pointer", "int"]],
425
+ # "aubio_onset_set_minioi_ms": [ "int", ["pointer", "float"]],
426
+ # "aubio_onset_set_delay": [ "int", ["pointer", "int"]],
427
+ # "aubio_onset_set_delay_s": [ "int", ["pointer", "int"]],
428
+ # "aubio_onset_set_delay_ms": [ "int", ["pointer", "float"]],
429
+ # "aubio_onset_get_minioi": [ "int", ["pointer"]],
430
+ # "aubio_onset_get_minioi_s": [ "float", ["pointer"]],
431
+ # "aubio_onset_get_minioi_ms": [ "float", ["pointer"]],
432
+ # "aubio_onset_get_delay": [ "int", ["pointer"]],
433
+ # "aubio_onset_get_delay_s": [ "float", ["pointer"]],
434
+ # "aubio_onset_get_delay_ms": [ "float", ["pointer"]],
435
+ # "aubio_onset_get_threshold": [ "float", ["pointer"]],
436
+ # "del_aubio_onset": [ "void", ["pointer"]],
437
+
438
+ # # pitch
439
+ # "new_aubio_pitch": [ "pointer", [ "string", "int", "int", "int"]],
440
+ # "aubio_pitch_do": ["void", ["pointer", "pointer", "pointer"]],
441
+ # "aubio_pitch_set_tolerance": [ "int", ["pointer", "int"]],
442
+ # "aubio_pitch_set_unit": ["int", ["pointer", "string"]],
443
+ # "aubio_pitch_set_silence": ["int", ["pointer", "float"]],
444
+ # "aubio_pitch_get_silence": ["float", ["pointer"]],
445
+ # "aubio_pitch_get_confidence": ["float", ["pointer"]],
446
+ # "del_aubio_pitch": [ "void", ["pointer"]],
447
+
448
+ # # fvec
449
+ # "new_fvec": [ "pointer", [ "int" ]],
450
+ # "del_fvec": [ "void", [ "pointer" ]],
451
+ # "fvec_get_sample": [ "float", [ "pointer", "int" ]],
452
+ # "fvec_set_sample": [ "void", [ "pointer", "float", "int" ]],
453
+ # "fvec_get_data": [ "float", [ "pointer" ]],
454
+ # "fvec_print": [ "void", [ "pointer" ]],
455
+ # "fvec_set_all": [ "void", [ "pointer", "float" ]],
456
+ # "fvec_zeros": [ "void", [ "pointer" ]],
457
+ # "fvec_rev": [ "void", [ "pointer" ]],
458
+ # "fvec_weight": [ "void", [ "pointer", "pointer" ]],
459
+ # "fvec_copy": [ "void", [ "pointer", "pointer" ]],
460
+ # "fvec_ones": [ "void", [ "pointer" ]],
461
+ # }.each do |k,v|
462
+ # puts "attach_function :#{k.to_sym}, #{v.last.map(&:to_sym)}, :#{v.first.to_sym}"
463
+ # end
465
464
  end
466
465
 
467
- puts Aubio.get_features("/Applications/Sonic Pi.app/etc/samples/loop_amen.flac", hop_size: 256, sample_rate: 44100).inspect
466
+ puts Aubio.get_features('/Applications/Sonic Pi.app/etc/samples/loop_amen.flac', hop_size: 256, sample_rate: 44_100).inspect