webrtcvad 0.1.0 → 0.2.3
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 +4 -4
- data/ext/webrtcvad/extconf.rb +29 -0
- data/ext/webrtcvad/webrtc/common_audio/signal_processing/division_operations.c +141 -0
- data/ext/webrtcvad/webrtc/common_audio/signal_processing/dot_product_with_scale.h +40 -0
- data/ext/webrtcvad/webrtc/common_audio/signal_processing/energy.c +39 -0
- data/ext/webrtcvad/webrtc/common_audio/signal_processing/get_scaling_square.c +46 -0
- data/ext/webrtcvad/webrtc/common_audio/signal_processing/include/signal_processing_library.h +1605 -0
- data/ext/webrtcvad/webrtc/common_audio/signal_processing/include/spl_inl.h +153 -0
- data/ext/webrtcvad/webrtc/common_audio/signal_processing/resample_48khz.c +186 -0
- data/ext/webrtcvad/webrtc/common_audio/signal_processing/resample_by_2_internal.c +689 -0
- data/ext/webrtcvad/webrtc/common_audio/signal_processing/resample_by_2_internal.h +60 -0
- data/ext/webrtcvad/webrtc/common_audio/signal_processing/resample_fractional.c +239 -0
- data/ext/webrtcvad/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.c +77 -0
- data/ext/webrtcvad/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.h +29 -0
- data/ext/webrtcvad/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor_mips.c +207 -0
- data/ext/webrtcvad/webrtc/common_audio/vad/include/webrtc_vad.h +87 -0
- data/ext/webrtcvad/webrtc/common_audio/vad/vad_core.c +685 -0
- data/ext/webrtcvad/webrtc/common_audio/vad/vad_core.h +114 -0
- data/ext/webrtcvad/webrtc/common_audio/vad/vad_filterbank.c +329 -0
- data/ext/webrtcvad/webrtc/common_audio/vad/vad_filterbank.h +45 -0
- data/ext/webrtcvad/webrtc/common_audio/vad/vad_gmm.c +82 -0
- data/ext/webrtcvad/webrtc/common_audio/vad/vad_gmm.h +39 -0
- data/ext/webrtcvad/webrtc/common_audio/vad/vad_sp.c +176 -0
- data/ext/webrtcvad/webrtc/common_audio/vad/vad_sp.h +54 -0
- data/ext/webrtcvad/webrtc/common_audio/vad/webrtc_vad.c +114 -0
- data/ext/webrtcvad/webrtc/rtc_base/checks.cc +207 -0
- data/ext/webrtcvad/webrtc/rtc_base/checks.h +400 -0
- data/ext/webrtcvad/webrtc/rtc_base/compile_assert_c.h +25 -0
- data/ext/webrtcvad/webrtc/rtc_base/numerics/safe_compare.h +176 -0
- data/ext/webrtcvad/webrtc/rtc_base/sanitizer.h +144 -0
- data/ext/webrtcvad/webrtc/rtc_base/system/inline.h +31 -0
- data/ext/webrtcvad/webrtc/rtc_base/system/rtc_export.h +43 -0
- data/ext/webrtcvad/webrtc/rtc_base/type_traits.h +140 -0
- data/ext/webrtcvad/webrtcvad.c +112 -0
- 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.
|
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
|