webrtcvad 0.1.0 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/ext/webrtcvad/extconf.rb +29 -0
  3. data/ext/webrtcvad/webrtc/common_audio/signal_processing/division_operations.c +141 -0
  4. data/ext/webrtcvad/webrtc/common_audio/signal_processing/dot_product_with_scale.h +40 -0
  5. data/ext/webrtcvad/webrtc/common_audio/signal_processing/energy.c +39 -0
  6. data/ext/webrtcvad/webrtc/common_audio/signal_processing/get_scaling_square.c +46 -0
  7. data/ext/webrtcvad/webrtc/common_audio/signal_processing/include/signal_processing_library.h +1605 -0
  8. data/ext/webrtcvad/webrtc/common_audio/signal_processing/include/spl_inl.h +153 -0
  9. data/ext/webrtcvad/webrtc/common_audio/signal_processing/resample_48khz.c +186 -0
  10. data/ext/webrtcvad/webrtc/common_audio/signal_processing/resample_by_2_internal.c +689 -0
  11. data/ext/webrtcvad/webrtc/common_audio/signal_processing/resample_by_2_internal.h +60 -0
  12. data/ext/webrtcvad/webrtc/common_audio/signal_processing/resample_fractional.c +239 -0
  13. data/ext/webrtcvad/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.c +77 -0
  14. data/ext/webrtcvad/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.h +29 -0
  15. data/ext/webrtcvad/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor_mips.c +207 -0
  16. data/ext/webrtcvad/webrtc/common_audio/vad/include/webrtc_vad.h +87 -0
  17. data/ext/webrtcvad/webrtc/common_audio/vad/vad_core.c +685 -0
  18. data/ext/webrtcvad/webrtc/common_audio/vad/vad_core.h +114 -0
  19. data/ext/webrtcvad/webrtc/common_audio/vad/vad_filterbank.c +329 -0
  20. data/ext/webrtcvad/webrtc/common_audio/vad/vad_filterbank.h +45 -0
  21. data/ext/webrtcvad/webrtc/common_audio/vad/vad_gmm.c +82 -0
  22. data/ext/webrtcvad/webrtc/common_audio/vad/vad_gmm.h +39 -0
  23. data/ext/webrtcvad/webrtc/common_audio/vad/vad_sp.c +176 -0
  24. data/ext/webrtcvad/webrtc/common_audio/vad/vad_sp.h +54 -0
  25. data/ext/webrtcvad/webrtc/common_audio/vad/webrtc_vad.c +114 -0
  26. data/ext/webrtcvad/webrtc/rtc_base/checks.cc +207 -0
  27. data/ext/webrtcvad/webrtc/rtc_base/checks.h +400 -0
  28. data/ext/webrtcvad/webrtc/rtc_base/compile_assert_c.h +25 -0
  29. data/ext/webrtcvad/webrtc/rtc_base/numerics/safe_compare.h +176 -0
  30. data/ext/webrtcvad/webrtc/rtc_base/sanitizer.h +144 -0
  31. data/ext/webrtcvad/webrtc/rtc_base/system/inline.h +31 -0
  32. data/ext/webrtcvad/webrtc/rtc_base/system/rtc_export.h +43 -0
  33. data/ext/webrtcvad/webrtc/rtc_base/type_traits.h +140 -0
  34. data/ext/webrtcvad/webrtcvad.c +112 -0
  35. metadata +37 -3
@@ -0,0 +1,112 @@
1
+ #include <ruby.h>
2
+ #include "webrtc/common_audio/vad/include/webrtc_vad.h"
3
+
4
+ struct vad_instance{
5
+ VadInst* inst;
6
+ int rage;
7
+ };
8
+
9
+ void vad_free(struct vad_instance* ptr) {
10
+ WebRtcVad_Free(ptr->inst);
11
+ }
12
+
13
+ static VALUE rb_vad_create(VALUE klass, VALUE rb_rage) {
14
+ struct vad_instance* vad;
15
+ VALUE obj = Data_Make_Struct(klass, struct vad_instance, NULL, vad_free, vad);
16
+ VALUE argv[1];
17
+ argv[0] = rb_rage;
18
+ rb_obj_call_init(obj, 1, argv);
19
+ return obj;
20
+ }
21
+
22
+ static int __attribute__ ((unused)) get_aggressiveness(VALUE rb_rage) {
23
+ int rage = NUM2INT(rb_rage);
24
+ if (rage < 0 || rage > 3) {
25
+ rb_raise(rb_const_get(rb_cObject, rb_intern("ArgumentError")), "Invalid VAD aggressiveness value");
26
+ }
27
+ return rage;
28
+ }
29
+
30
+ static VALUE rb_vad_init(VALUE self, VALUE rb_rage) {
31
+ struct vad_instance* vad;
32
+ Data_Get_Struct(self, struct vad_instance, vad);
33
+
34
+ vad->inst = WebRtcVad_Create();
35
+ vad->rage = get_aggressiveness(rb_rage);
36
+
37
+ if (WebRtcVad_Init(vad->inst)) {
38
+ rb_raise(rb_eRuntimeError, "Cannot init VAD");
39
+ }
40
+ if (WebRtcVad_set_mode(vad->inst, vad->rage)) {
41
+ rb_raise(rb_eRuntimeError, "Cannot set VAD aggressiveness");
42
+ }
43
+ return self;
44
+ }
45
+
46
+ static VALUE rb_vad_set_aggressiveness(VALUE self, VALUE rb_rage) {
47
+ struct vad_instance* vad;
48
+ Data_Get_Struct(self, struct vad_instance, vad);
49
+
50
+ int rage = get_aggressiveness(rb_rage);
51
+ if (WebRtcVad_set_mode(vad->inst, rage)) {
52
+ rb_raise(rb_eRuntimeError, "Cannot set VAD aggressiveness");
53
+ }
54
+ vad->rage = rage;
55
+ return rb_rage;
56
+ }
57
+
58
+ static VALUE rb_vad_get_aggressiveness(VALUE self) {
59
+ struct vad_instance* vad;
60
+ Data_Get_Struct(self, struct vad_instance, vad);
61
+
62
+ return INT2NUM(vad->rage);
63
+ }
64
+
65
+ static VALUE rb_valid_rate_and_frame_length(VALUE self, VALUE rb_rate, VALUE rb_frame_len) {
66
+ int rate, frame_length;
67
+ rate = NUM2INT(rb_rate);
68
+ frame_length = NUM2INT(rb_frame_len);
69
+
70
+ if (WebRtcVad_ValidRateAndFrameLength(rate, frame_length)) {
71
+ return Qfalse;
72
+ } else {
73
+ return Qtrue;
74
+ }
75
+ }
76
+
77
+ static VALUE rb_vad_process(VALUE self, VALUE rb_sample_rate, VALUE rb_audio_frame, VALUE rb_offset, VALUE rb_frame_len) {
78
+ int sr = NUM2INT(rb_sample_rate);
79
+ int offset = NUM2INT(rb_offset);
80
+ int frame_length = NUM2INT(rb_frame_len);
81
+ int result;
82
+ int16_t *buf = (int16_t*)(StringValuePtr(rb_audio_frame) + offset);
83
+
84
+ struct vad_instance* ptr;
85
+ Data_Get_Struct(self, struct vad_instance, ptr);
86
+
87
+ result = WebRtcVad_Process(ptr->inst, sr, buf, frame_length);
88
+ switch (result) {
89
+ case 1:
90
+ return INT2NUM(1);
91
+ case 0:
92
+ return INT2NUM(0);
93
+ case -1:
94
+ break;
95
+ default:
96
+ rb_raise(rb_eRuntimeError, "Error while processing frame");
97
+ }
98
+ return Qnil;
99
+ }
100
+
101
+ void Init_webrtcvad(void) {
102
+ VALUE mod = rb_define_module("WebRTC");
103
+ VALUE cVad = rb_define_class_under(mod, "Vad", rb_cObject);
104
+
105
+ rb_define_singleton_method(cVad, "new", rb_vad_create, 1);
106
+ rb_define_method(cVad, "initialize", rb_vad_init, 1);
107
+ rb_define_method(cVad, "aggressiveness=", rb_vad_set_aggressiveness, 1);
108
+ rb_define_method(cVad, "aggressiveness", rb_vad_get_aggressiveness, 0);
109
+ rb_define_method(cVad, "process", rb_vad_process, 4);
110
+ rb_define_singleton_method(cVad, "valid_rate_and_frame_length?", rb_valid_rate_and_frame_length, 2);
111
+ rb_define_method(cVad, "valid_frame?", rb_valid_rate_and_frame_length, 2);
112
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webrtcvad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Razuvaev
@@ -13,9 +13,43 @@ dependencies: []
13
13
  description: WebRTC Voice Activity Detection library ruby wrapper
14
14
  email: i@orlando-labs.com
15
15
  executables: []
16
- extensions: []
16
+ extensions:
17
+ - ext/webrtcvad/extconf.rb
17
18
  extra_rdoc_files: []
18
19
  files:
20
+ - ext/webrtcvad/extconf.rb
21
+ - ext/webrtcvad/webrtc/common_audio/signal_processing/division_operations.c
22
+ - ext/webrtcvad/webrtc/common_audio/signal_processing/dot_product_with_scale.h
23
+ - ext/webrtcvad/webrtc/common_audio/signal_processing/energy.c
24
+ - ext/webrtcvad/webrtc/common_audio/signal_processing/get_scaling_square.c
25
+ - ext/webrtcvad/webrtc/common_audio/signal_processing/include/signal_processing_library.h
26
+ - ext/webrtcvad/webrtc/common_audio/signal_processing/include/spl_inl.h
27
+ - ext/webrtcvad/webrtc/common_audio/signal_processing/resample_48khz.c
28
+ - ext/webrtcvad/webrtc/common_audio/signal_processing/resample_by_2_internal.c
29
+ - ext/webrtcvad/webrtc/common_audio/signal_processing/resample_by_2_internal.h
30
+ - ext/webrtcvad/webrtc/common_audio/signal_processing/resample_fractional.c
31
+ - ext/webrtcvad/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.c
32
+ - ext/webrtcvad/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.h
33
+ - ext/webrtcvad/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor_mips.c
34
+ - ext/webrtcvad/webrtc/common_audio/vad/include/webrtc_vad.h
35
+ - ext/webrtcvad/webrtc/common_audio/vad/vad_core.c
36
+ - ext/webrtcvad/webrtc/common_audio/vad/vad_core.h
37
+ - ext/webrtcvad/webrtc/common_audio/vad/vad_filterbank.c
38
+ - ext/webrtcvad/webrtc/common_audio/vad/vad_filterbank.h
39
+ - ext/webrtcvad/webrtc/common_audio/vad/vad_gmm.c
40
+ - ext/webrtcvad/webrtc/common_audio/vad/vad_gmm.h
41
+ - ext/webrtcvad/webrtc/common_audio/vad/vad_sp.c
42
+ - ext/webrtcvad/webrtc/common_audio/vad/vad_sp.h
43
+ - ext/webrtcvad/webrtc/common_audio/vad/webrtc_vad.c
44
+ - ext/webrtcvad/webrtc/rtc_base/checks.cc
45
+ - ext/webrtcvad/webrtc/rtc_base/checks.h
46
+ - ext/webrtcvad/webrtc/rtc_base/compile_assert_c.h
47
+ - ext/webrtcvad/webrtc/rtc_base/numerics/safe_compare.h
48
+ - ext/webrtcvad/webrtc/rtc_base/sanitizer.h
49
+ - ext/webrtcvad/webrtc/rtc_base/system/inline.h
50
+ - ext/webrtcvad/webrtc/rtc_base/system/rtc_export.h
51
+ - ext/webrtcvad/webrtc/rtc_base/type_traits.h
52
+ - ext/webrtcvad/webrtcvad.c
19
53
  - lib/webrtcvad.rb
20
54
  homepage: https://orlando-labs.com
21
55
  licenses:
@@ -27,7 +61,7 @@ require_paths:
27
61
  - lib
28
62
  required_ruby_version: !ruby/object:Gem::Requirement
29
63
  requirements:
30
- - - '='
64
+ - - ">="
31
65
  - !ruby/object:Gem::Version
32
66
  version: 2.4.0
33
67
  required_rubygems_version: !ruby/object:Gem::Requirement