rist 0.0.1 → 0.0.2
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/README.md +5 -2
- data/ext/transcriber/extconf.rb +10 -11
- data/ext/transcriber/transcriber.c +25 -39
- data/lib/rist/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25fe8929aa49a303ac481c44c0cc54925abebffe
|
4
|
+
data.tar.gz: 3365df1dccaa8069c2f73e4d8b0b3140a2ef2530
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64e8773fd58f1343d29f56b6e95c48e541575ca94661655b78f925d79a9b2d6d04c10eda3ea8413354dfcc7c4031b5566c9ea17104e957734284d7caada34707
|
7
|
+
data.tar.gz: 1c9adabfca2fc14955edab3f231e7b263be06b8da87d192acfce6c534c5f11da798a114200df4cba35f9c5652806891a2f747b345d1097a5645b18a115226c02
|
data/README.md
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
# Rist
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/rist)
|
4
|
+
[](http://inch-ci.org/github/siegfried/rist)
|
5
|
+
|
3
6
|
Rist (Ruby Intelligent System Tools) is a tool set to build Intelligent System.
|
4
7
|
|
5
8
|
## Installation
|
6
9
|
|
7
|
-
*Warning:
|
10
|
+
*Warning: Pocketsphinx (> 0.8) are prerequisite.*
|
8
11
|
|
9
12
|
Add this line to your application's Gemfile:
|
10
13
|
|
@@ -24,7 +27,7 @@ Or install it yourself as:
|
|
24
27
|
|
25
28
|
### Transcriber
|
26
29
|
|
27
|
-
Transcriber
|
30
|
+
Transcriber transcribes audio into text using [Pocketsphinx](http://cmusphinx.sourceforge.net/).
|
28
31
|
|
29
32
|
```ruby
|
30
33
|
transcriber = Rist::Transcriber.new logfn: "/dev/null"
|
data/ext/transcriber/extconf.rb
CHANGED
@@ -1,22 +1,21 @@
|
|
1
1
|
require 'mkmf'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
unless find_header 'AL/alc.h', '/usr/local/include', '/usr/include'
|
7
|
-
abort 'cannot find OpenAL, please install it.'
|
8
|
-
end
|
9
|
-
unless find_header 'pocketsphinx/pocketsphinx_export.h', '/usr/local/include', '/opt/include', '/usr/include'
|
3
|
+
header_paths = ['/usr/local/include', '/opt/include', '/usr/include']
|
4
|
+
|
5
|
+
unless find_header 'pocketsphinx/pocketsphinx_export.h', *header_paths
|
10
6
|
abort 'cannot find pocketsphinx, please install it.'
|
11
7
|
end
|
12
|
-
unless find_header 'sphinxbase/sphinxbase_export.h',
|
8
|
+
unless find_header 'sphinxbase/sphinxbase_export.h', *header_paths
|
13
9
|
abort 'cannot find sphinxbase, please install it.'
|
14
10
|
end
|
15
11
|
find_header 'pocketsphinx_export.h', '/usr/local/include/pocketsphinx', '/opt/include/pocketsphinx', '/usr/include/pocketsphinx'
|
16
12
|
find_header 'sphinxbase_export.h', '/usr/local/include/sphinxbase', '/opt/include/sphinxbase', '/usr/include/sphinxbase'
|
17
13
|
|
18
|
-
|
19
|
-
|
20
|
-
find_library '
|
14
|
+
lib_paths = ['/usr/local/lib', '/opt/lib', '/usr/lib']
|
15
|
+
|
16
|
+
find_library 'pocketsphinx', 'ps_init', *lib_paths
|
17
|
+
find_library 'sphinxbase', 'cmd_ln_init', *lib_paths
|
18
|
+
find_library 'sphinxad', 'ad_open_dev', *lib_paths
|
21
19
|
|
20
|
+
create_header
|
22
21
|
create_makefile 'transcriber/transcriber'
|
@@ -1,7 +1,6 @@
|
|
1
1
|
#include <ruby.h>
|
2
|
-
#include <AL/al.h>
|
3
|
-
#include <AL/alc.h>
|
4
2
|
#include <pocketsphinx.h>
|
3
|
+
#include <sphinxbase/ad.h>
|
5
4
|
|
6
5
|
static const arg_t cont_args_def[] = {
|
7
6
|
POCKETSPHINX_OPTIONS,
|
@@ -21,7 +20,8 @@ static VALUE rb_mRist,
|
|
21
20
|
rb_cTranscriber;
|
22
21
|
|
23
22
|
static void transcriber_deallocate(Transcriber * transcriber) {
|
24
|
-
|
23
|
+
if (transcriber -> decoder)
|
24
|
+
ps_free(transcriber -> decoder);
|
25
25
|
xfree(transcriber);
|
26
26
|
}
|
27
27
|
|
@@ -57,23 +57,11 @@ static VALUE transcriber_initialize_pocketsphinx(VALUE self, VALUE arguments) {
|
|
57
57
|
return self;
|
58
58
|
}
|
59
59
|
|
60
|
-
static void
|
61
|
-
|
60
|
+
static void close_and_raise(ad_rec_t * ad, VALUE error, const char * message) {
|
61
|
+
ad_close(ad);
|
62
62
|
rb_raise(error, "%s\n", message);
|
63
63
|
}
|
64
64
|
|
65
|
-
static int32 al_read(ALCdevice * device, int16 * buffer, int32 max) {
|
66
|
-
ALCint number;
|
67
|
-
|
68
|
-
alcGetIntegerv(device, ALC_CAPTURE_SAMPLES, sizeof(number), &number);
|
69
|
-
if (number >= 0) {
|
70
|
-
number = (number < max ? number : max);
|
71
|
-
alcCaptureSamples(device, buffer, number);
|
72
|
-
}
|
73
|
-
|
74
|
-
return number;
|
75
|
-
}
|
76
|
-
|
77
65
|
/* Transcribe speech continuously.
|
78
66
|
*
|
79
67
|
* for block { |utterance| ... }
|
@@ -81,46 +69,45 @@ static int32 al_read(ALCdevice * device, int16 * buffer, int32 max) {
|
|
81
69
|
*
|
82
70
|
* @yieldparam [String] utterance the utterance transcribed
|
83
71
|
*/
|
84
|
-
static VALUE transcriber_transcribe(VALUE self)
|
85
|
-
{
|
86
|
-
ALCdevice * device;
|
87
|
-
ALCuint frequency;
|
72
|
+
static VALUE transcriber_transcribe(VALUE self) {
|
88
73
|
Transcriber * transcriber;
|
89
|
-
|
90
|
-
const char * hyp;
|
91
|
-
const char * uttid;
|
74
|
+
ad_rec_t * ad;
|
92
75
|
int16 adbuf[4096];
|
93
76
|
int32 k;
|
94
|
-
ps_decoder_t * ps;
|
95
77
|
uint8 utt_started, in_speech;
|
78
|
+
char const * hyp;
|
79
|
+
char const * uttid;
|
80
|
+
cmd_ln_t * config;
|
81
|
+
ps_decoder_t * ps;
|
96
82
|
|
97
83
|
Data_Get_Struct(self, Transcriber, transcriber);
|
98
84
|
ps = transcriber -> decoder;
|
99
85
|
config = ps_get_config(ps);
|
100
|
-
frequency = cmd_ln_float32_r(config, "-samprate");
|
101
86
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
87
|
+
if ((ad = ad_open_dev(cmd_ln_str_r(config, "-adcdev"),
|
88
|
+
(int) cmd_ln_float32_r(config,
|
89
|
+
"-samprate"))) == NULL)
|
90
|
+
close_and_raise(ad, rb_eRuntimeError, "failed to open audio device");
|
91
|
+
if (ad_start_rec(ad) < 0)
|
92
|
+
close_and_raise(ad, rb_eRuntimeError, "failed to start recording");
|
106
93
|
|
107
94
|
if (ps_start_utt(ps, NULL) < 0)
|
108
|
-
|
95
|
+
close_and_raise(ad, rb_eRuntimeError, "failed to start utterance");
|
109
96
|
utt_started = FALSE;
|
110
97
|
|
111
|
-
/* Indicate listening for next utterance */
|
112
98
|
for (;;) {
|
113
|
-
if ((k =
|
114
|
-
|
99
|
+
if ((k = ad_read(ad, adbuf, 4096)) < 0)
|
100
|
+
close_and_raise(ad, rb_eRuntimeError, "failed to read audio");
|
115
101
|
rb_funcall(self, rb_intern("sleep"), 1, rb_float_new(0.1));
|
102
|
+
|
116
103
|
ps_process_raw(ps, adbuf, k, FALSE, FALSE);
|
117
104
|
in_speech = ps_get_in_speech(ps);
|
118
105
|
if (in_speech && !utt_started) {
|
119
106
|
utt_started = TRUE;
|
120
107
|
}
|
121
108
|
if (!in_speech && utt_started) {
|
122
|
-
//speech -> silence transition,
|
123
|
-
//time to start new utterance
|
109
|
+
// speech -> silence transition,
|
110
|
+
// time to start new utterance
|
124
111
|
ps_end_utt(ps);
|
125
112
|
hyp = ps_get_hyp(ps, NULL, &uttid);
|
126
113
|
|
@@ -128,12 +115,11 @@ static VALUE transcriber_transcribe(VALUE self)
|
|
128
115
|
rb_yield(rb_str_new2(hyp));
|
129
116
|
|
130
117
|
if (ps_start_utt(ps, NULL) < 0)
|
131
|
-
|
132
|
-
/* Indicate listening for next utterance */
|
118
|
+
close_and_raise(ad, rb_eRuntimeError, "failed to start utterance");
|
133
119
|
utt_started = FALSE;
|
134
120
|
}
|
135
121
|
}
|
136
|
-
|
122
|
+
ad_close(ad);
|
137
123
|
}
|
138
124
|
|
139
125
|
void Init_transcriber() {
|
data/lib/rist/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zhi-Qiang Lei
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|