noyes 0.9.2 → 1.0.0

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.
Files changed (52) hide show
  1. data/VERSION +1 -1
  2. data/bin/nrec +5 -0
  3. data/lib/{c_impl → cext}/array_list.c +25 -25
  4. data/lib/cext/bent_cent_marker.c +55 -0
  5. data/lib/{c_impl/n_array_list.c → cext/c_array_list.c} +12 -12
  6. data/lib/cext/c_array_list.h +18 -0
  7. data/lib/{c_impl/n_bent_cent_marker.c → cext/c_bent_cent_marker.c} +13 -11
  8. data/lib/{c_impl/n_dft.c → cext/c_dft.c} +3 -3
  9. data/lib/{c_impl/n_discrete_cosine_transform.c → cext/c_discrete_cosine_transform.c} +5 -5
  10. data/lib/{c_impl/n_hamming_window.c → cext/c_hamming_window.c} +5 -5
  11. data/lib/{c_impl/n_live_cmn.c → cext/c_live_cmn.c} +5 -5
  12. data/lib/{c_impl/n_log_compressor.c → cext/c_log_compressor.c} +5 -5
  13. data/lib/cext/c_matrix.c +90 -0
  14. data/lib/{c_impl/n_mel_filter.c → cext/c_mel_filter.c} +13 -11
  15. data/lib/cext/c_mfcc_16x8.c +57 -0
  16. data/lib/{c_impl/noyes.h → cext/c_noyes.h} +50 -47
  17. data/lib/{c_impl/n_power_spec.c → cext/c_power_spec.c} +6 -6
  18. data/lib/{c_impl/n_preemphasis.c → cext/c_preemphasis.c} +4 -4
  19. data/lib/{c_impl/n_segmenter.c → cext/c_segmenter.c} +17 -11
  20. data/lib/cext/c_speech_trimmer.c +126 -0
  21. data/lib/{c_impl → cext}/discrete_cosine_transform.c +18 -20
  22. data/lib/{c_impl → cext}/hamming_window.c +11 -13
  23. data/lib/{c_impl → cext}/live_cmn.c +11 -14
  24. data/lib/{c_impl → cext}/log_compressor.c +11 -14
  25. data/lib/{c_impl → cext}/mel_filter.c +13 -17
  26. data/lib/cext/mfcc_16x8.c +36 -0
  27. data/lib/{c_impl → cext}/power_spectrum.c +10 -12
  28. data/lib/{c_impl → cext}/preemphasis.c +10 -13
  29. data/lib/{c_impl/noyes_c.c → cext/r_noyes.c} +12 -12
  30. data/lib/{c_impl/rnoyes.h → cext/r_noyes.h} +6 -6
  31. data/lib/{c_impl → cext}/segmenter.c +10 -13
  32. data/lib/{c_impl → cext}/speech_trimmer.c +23 -23
  33. data/lib/common/noyes_dsl.rb +3 -0
  34. data/lib/common/ruby_ext.rb +9 -0
  35. data/lib/noyes.rb +13 -0
  36. data/lib/noyes_c.rb +23 -1
  37. data/lib/noyes_java.rb +5 -0
  38. data/lib/ruby_impl/compression.rb +214 -0
  39. data/lib/ruby_impl/dct.rb +2 -2
  40. data/lib/ruby_impl/live_cmn.rb +4 -4
  41. data/lib/ruby_impl/mel_filter.rb +9 -9
  42. data/lib/ruby_impl/segment.rb +13 -2
  43. data/lib/ruby_impl/speech_trimmer.rb +3 -1
  44. data/ship/noyes.jar +0 -0
  45. metadata +36 -34
  46. data/lib/c_impl/bent_cent_marker.c +0 -36
  47. data/lib/c_impl/fast_8k_mfcc.c +0 -39
  48. data/lib/c_impl/n_array_list.h +0 -18
  49. data/lib/c_impl/n_fast_8k_mfcc.c +0 -55
  50. data/lib/c_impl/n_matrix.c +0 -72
  51. data/lib/c_impl/n_speech_trimmer.c +0 -96
  52. /data/lib/{c_impl → cext}/extconf.rb +0 -0
@@ -1,96 +0,0 @@
1
- #include "noyes.h"
2
- #undef TRUE
3
- #define TRUE 1
4
- #undef FALSE
5
- #define FALSE 0
6
-
7
- SpeechTrimmer * new_speech_trimmer(int frequency) {
8
- SpeechTrimmer *self = malloc(sizeof(SpeechTrimmer));
9
- self->leader = 5;
10
- self->trailer = 5;
11
- self->speech_started = FALSE;
12
- self->bcm = new_bent_cent_marker();
13
- self->false_count = 0;
14
- self->true_count = 0;
15
- self->queue = n_list_new();
16
- self->eos_reached = FALSE;
17
- self->scs = 20;
18
- self->ecs = 50;
19
- self->seg = new_segmenter(frequency/100, frequency/100);
20
- return self;
21
- }
22
-
23
- void free_speech_trimmer(SpeechTrimmer *self) {
24
- free_bent_cent_marker(self->bcm);
25
- n_list_free(self->queue);
26
- free(self);
27
- }
28
-
29
- NMatrix * speech_trimmer_apply(SpeechTrimmer *self, NMatrix1* pcm) {
30
- if (self->eos_reached)
31
- return NULL;
32
-
33
- NMatrix *segment_matrix = segmenter_apply(self->seg, pcm);
34
- int centisecond_count = segment_matrix->rows;
35
- NMatrix1 **segments = nmatrix_2_nmatrix1s(segment_matrix);
36
- NMatrix1 ** speech_segments = malloc(sizeof(NMatrix*) * segment_matrix->rows);
37
- int speech_count = 0, i;
38
- for (i=0; i<centisecond_count ;++i) {
39
- speech_trimmer_enqueue(self, segments[i]);
40
- NMatrix1 *centispeech = speech_trimmer_dequeue(self);
41
- while (centispeech != NULL) {
42
- speech_segments[speech_count++] = centispeech;
43
- centispeech = speech_trimmer_dequeue(self);
44
- }
45
- if (speech_trimmer_eos(self))
46
- break;
47
- }
48
-
49
- if (speech_trimmer_eos(self) && speech_count == 0)
50
- return NULL;
51
-
52
- return nmatrix1_2_nmatrix(speech_segments, speech_count);
53
- }
54
-
55
-
56
- void speech_trimmer_enqueue(SpeechTrimmer *self, NMatrix1* pcm) {
57
- if (self->eos_reached)
58
- return;
59
- n_list_add(self->queue, pcm);
60
- if (bent_cent_marker_apply(self->bcm, pcm)) {
61
- self->false_count = 0;
62
- self->true_count += 1;
63
- } else {
64
- self->false_count += 1;
65
- self->true_count = 0;
66
- }
67
- if (self->speech_started) {
68
- if (self->false_count == self->ecs) {
69
- self->eos_reached = TRUE;
70
- int new_size = n_list_size(self->queue) - self->ecs + self->trailer;
71
- n_list_remove(self->queue, new_size, n_list_size(self->queue));
72
- }
73
- } else if (self->true_count > self->scs) {
74
- if (self->leader + self->scs < n_list_size(self->queue)) {
75
- int start = n_list_size(self->queue) - self->leader - self->scs - 1;
76
- n_list_remove(self->queue, 0, start);
77
- }
78
- self->speech_started = TRUE;
79
- }
80
- }
81
-
82
- NMatrix1 * speech_trimmer_dequeue(SpeechTrimmer *self) {
83
- if (n_list_size(self->queue) == 0)
84
- return NULL;
85
- if (self->eos_reached || (self->speech_started &&
86
- n_list_size(self->queue) > self->ecs)) {
87
- NMatrix1 * N = n_list_get(self->queue, 0);
88
- n_list_remove(self->queue, 0, 1);
89
- return N;
90
- }
91
- return NULL;
92
- }
93
-
94
- int speech_trimmer_eos(SpeechTrimmer *self) {
95
- return self->eos_reached;
96
- }
File without changes