Class: Pocketsphinx::Decoder
- Inherits:
-
Struct
- Object
- Struct
- Pocketsphinx::Decoder
- Includes:
- API::CallHelpers
- Defined in:
- lib/pocketsphinx/decoder.rb
Defined Under Namespace
Classes: Hypothesis
Instance Attribute Summary collapse
-
#configuration ⇒ Object
Returns the value of attribute configuration.
- #ps_api ⇒ Object
Instance Method Summary collapse
-
#decode(audio_path_or_file, max_samples = 2048) ⇒ Object
Decode a raw audio stream as a single utterance, opening a file if path given.
-
#decode_raw(audio_file, max_samples = 2048) ⇒ Object
Decode a raw audio stream as a single utterance.
-
#end_utterance ⇒ Object
End utterance processing.
-
#get_search ⇒ Object
Returns name of curent search in decoder.
-
#hypothesis ⇒ Hypothesis
Get hypothesis string (with #path_score and #utterance_id).
-
#in_speech? ⇒ Boolean
Checks if the last feed audio buffer contained speech.
-
#process_raw(buffer, size, no_search = false, full_utt = false) ⇒ Object
Decode raw audio data.
- #ps_decoder ⇒ Object
-
#reconfigure(configuration = nil) ⇒ Object
Reinitialize the decoder with updated configuration.
-
#set_jsgf_string(jsgf_string, name = 'default') ⇒ Object
Adds new search using JSGF model.
-
#set_search(name = 'default') ⇒ Object
Actives search with the provided name.
-
#start_utterance(name = nil) ⇒ Object
Start utterance processing.
-
#unset_search(name = 'default') ⇒ Object
Unsets the search and releases related resources.
Methods included from API::CallHelpers
Instance Attribute Details
#configuration ⇒ Object
Returns the value of attribute configuration
2 3 4 |
# File 'lib/pocketsphinx/decoder.rb', line 2 def configuration @configuration end |
#ps_api ⇒ Object
146 147 148 |
# File 'lib/pocketsphinx/decoder.rb', line 146 def ps_api @ps_api || API::Pocketsphinx end |
Instance Method Details
#decode(audio_path_or_file, max_samples = 2048) ⇒ Object
Decode a raw audio stream as a single utterance, opening a file if path given
See #decode_raw
36 37 38 39 40 41 42 43 |
# File 'lib/pocketsphinx/decoder.rb', line 36 def decode(audio_path_or_file, max_samples = 2048) case audio_path_or_file when String File.open(audio_path_or_file, 'rb') { |f| decode_raw(f, max_samples) } else decode_raw(audio_path_or_file, max_samples) end end |
#decode_raw(audio_file, max_samples = 2048) ⇒ Object
Decode a raw audio stream as a single utterance.
No headers are recognized in this files. The configuration parameters samprate and input_endian are used to determine the sampling rate and endianness of the stream, respectively. Audio is always assumed to be 16-bit signed PCM.
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/pocketsphinx/decoder.rb', line 53 def decode_raw(audio_file, max_samples = 2048) start_utterance FFI::MemoryPointer.new(:int16, max_samples) do |buffer| while data = audio_file.read(max_samples * 2) buffer.write_string(data) process_raw(buffer, data.length / 2) end end end_utterance end |
#end_utterance ⇒ Object
End utterance processing
90 91 92 |
# File 'lib/pocketsphinx/decoder.rb', line 90 def end_utterance api_call :ps_end_utt, ps_decoder end |
#get_search ⇒ Object
Returns name of curent search in decoder
126 127 128 |
# File 'lib/pocketsphinx/decoder.rb', line 126 def get_search ps_api.ps_get_search(ps_decoder) end |
#hypothesis ⇒ Hypothesis
Get hypothesis string (with #path_score and #utterance_id).
102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/pocketsphinx/decoder.rb', line 102 def hypothesis mp_path_score = FFI::MemoryPointer.new(:int32, 1) mp_utterance_id = FFI::MemoryPointer.new(:pointer, 1) hypothesis = ps_api.ps_get_hyp(ps_decoder, mp_path_score, mp_utterance_id) hypothesis.nil? ? nil : Hypothesis.new( hypothesis, mp_path_score.get_int32(0), mp_utterance_id.read_pointer.read_string.force_encoding('UTF-8') ) end |
#in_speech? ⇒ Boolean
Checks if the last feed audio buffer contained speech
95 96 97 |
# File 'lib/pocketsphinx/decoder.rb', line 95 def in_speech? ps_api.ps_get_in_speech(ps_decoder) != 0 end |
#process_raw(buffer, size, no_search = false, full_utt = false) ⇒ Object
Decode raw audio data.
74 75 76 |
# File 'lib/pocketsphinx/decoder.rb', line 74 def process_raw(buffer, size, no_search = false, full_utt = false) api_call :ps_process_raw, ps_decoder, buffer, size, no_search ? 1 : 0, full_utt ? 1 : 0 end |
#ps_decoder ⇒ Object
150 151 152 153 |
# File 'lib/pocketsphinx/decoder.rb', line 150 def ps_decoder init_decoder if @ps_decoder.nil? @ps_decoder end |
#reconfigure(configuration = nil) ⇒ Object
Reinitialize the decoder with updated configuration.
This function allows you to switch the acoustic model, dictionary, or other configuration without creating an entirely new decoding object.
25 26 27 28 |
# File 'lib/pocketsphinx/decoder.rb', line 25 def reconfigure(configuration = nil) self.configuration = configuration if configuration reinit_decoder end |
#set_jsgf_string(jsgf_string, name = 'default') ⇒ Object
Adds new search using JSGF model.
Convenience method to parse JSGF model from string and create a search.
121 122 123 |
# File 'lib/pocketsphinx/decoder.rb', line 121 def set_jsgf_string(jsgf_string, name = 'default') api_call :ps_set_jsgf_string, ps_decoder, name, jsgf_string end |
#set_search(name = 'default') ⇒ Object
Actives search with the provided name.
Activates search with the provided name. The search must be added before using either ps_set_fsg(), ps_set_lm() or ps_set_kws().
134 135 136 |
# File 'lib/pocketsphinx/decoder.rb', line 134 def set_search(name = 'default') api_call :ps_set_search, ps_decoder, name end |
#start_utterance(name = nil) ⇒ Object
Start utterance processing.
This function should be called before any utterance data is passed to the decoder. It marks the start of a new utterance and reinitializes internal data structures.
85 86 87 |
# File 'lib/pocketsphinx/decoder.rb', line 85 def start_utterance(name = nil) api_call :ps_start_utt, ps_decoder, name end |
#unset_search(name = 'default') ⇒ Object
Unsets the search and releases related resources.
Unsets the search previously added with using either ps_set_fsg(), ps_set_lm() or ps_set_kws().
142 143 144 |
# File 'lib/pocketsphinx/decoder.rb', line 142 def unset_search(name = 'default') api_call :ps_unset_search, ps_decoder, name end |