java/src/ai/picovoice/porcupine/Porcupine.java
Go to the documentation of this file.
1 /*
2  Copyright 2018-2021 Picovoice Inc.
3 
4  You may not use this file except in compliance with the license. A copy of the license is
5  located in the "LICENSE" file accompanying this source.
6 
7  Unless required by applicable law or agreed to in writing, software distributed under the
8  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
9  express or implied. See the License for the specific language governing permissions and
10  limitations under the License.
11 */
12 
13 package ai.picovoice.porcupine;
14 
15 import java.util.Arrays;
16 import java.util.HashMap;
17 import java.util.Set;
18 import java.util.stream.*;
19 import java.util.logging.Logger;
20 
29 public class Porcupine {
30 
31  private final long libraryHandle;
32 
33  public static final String LIBRARY_PATH;
34  public static final String MODEL_PATH;
35  public static final HashMap<BuiltInKeyword, String> BUILT_IN_KEYWORD_PATHS;
36 
37  static {
38  LIBRARY_PATH = Utils.getPackagedLibraryPath();
39  MODEL_PATH = Utils.getPackagedModelPath();
40  BUILT_IN_KEYWORD_PATHS = Utils.getPackagedKeywordPaths();
41  }
42 
55  public Porcupine(String accessKey, String libraryPath, String modelPath, String[] keywordPaths, float[] sensitivities) throws PorcupineException {
56  try {
57  System.load(libraryPath);
58  } catch (Exception exception) {
59  throw new PorcupineException(exception);
60  }
61  libraryHandle = init(accessKey, modelPath, keywordPaths, sensitivities);
62  }
63 
67  public void delete() {
68  delete(libraryHandle);
69  }
70 
83  public int process(short[] pcm) throws PorcupineException {
84  return process(libraryHandle, pcm);
85  }
86 
92  public native String getVersion();
93 
99  public native int getFrameLength();
100 
106  public native int getSampleRate();
107 
108  private native long init(String accessKey, String modelPath, String[] keywordPaths, float[] sensitivities);
109 
110  private native void delete(long object);
111 
112  private native int process(long object, short[] pcm);
113 
114  public enum BuiltInKeyword {
115  ALEXA,
116  AMERICANO,
117  BLUEBERRY,
118  BUMBLEBEE,
119  COMPUTER,
120  GRAPEFRUIT,
121  GRASSHOPPER,
122  HEY_GOOGLE,
123  HEY_SIRI,
124  JARVIS,
125  OK_GOOGLE,
126  PICOVOICE,
127  PORCUPINE,
128  TERMINATOR;
129 
130  public static Stream<BuiltInKeyword> stream() {
131  return Stream.of(BuiltInKeyword.values());
132  }
133 
134  public static String options() {
135  return BuiltInKeyword.stream().map((v) -> v.name()).collect(Collectors.joining(","));
136  }
137  }
138 
142  public static class Builder {
143 
144  private String accessKey = null;
145  private String libraryPath = null;
146  private String modelPath = null;
147  private String[] keywordPaths = null;
148  private BuiltInKeyword[] keywords = null;
149  private float[] sensitivities = null;
150 
151  public Builder setAccessKey(String accessKey) {
152  this.accessKey = accessKey;
153  return this;
154  }
155 
157  this.libraryPath = libraryPath;
158  return this;
159  }
160 
161  public Builder setModelPath(String modelPath) {
162  this.modelPath = modelPath;
163  return this;
164  }
165 
167  this.keywordPaths = keywordPaths;
168  return this;
169  }
170 
172  this.keywordPaths = new String[]{keywordPaths};
173  return this;
174  }
175 
177  this.keywords = keywords;
178  return this;
179  }
180 
182  this.keywords = new BuiltInKeyword[]{keyword};
183  return this;
184  }
185 
187  this.sensitivities = sensitivities;
188  return this;
189  }
190 
191  public Builder setSensitivity(float sensitivity) {
192  this.sensitivities = new float[]{sensitivity};
193  return this;
194  }
195 
203 
204  if (!Utils.isEnvironmentSupported()) {
205  throw new PorcupineRuntimeException("Could not initialize Porcupine. " +
206  "Execution environment not currently supported by Porcupine Java.");
207  }
208 
209  if (accessKey == null) {
210  throw new PorcupineInvalidArgumentException("AccessKey is required for Porcupine initialization.");
211  }
212 
213  if (libraryPath == null) {
214  if (Utils.isResourcesAvailable()) {
216  } else {
217  throw new PorcupineInvalidArgumentException("Default library unavailable. Please " +
218  "provide a native Porcupine library path (-l <library_path>).");
219  }
220  }
221 
222  if (modelPath == null) {
223  if (Utils.isResourcesAvailable()) {
225  } else {
226  throw new PorcupineInvalidArgumentException("Default model unavailable. Please provide a " +
227  "valid Porcupine model path (-m <model_path>).");
228  }
229  }
230 
231  if(this.keywordPaths != null && this.keywords != null){
232  throw new PorcupineInvalidArgumentException("Both 'keywords' and 'keywordPaths' were set. " +
233  "Only one of the two arguments may be set for initialization.");
234  }
235 
236  if (this.keywordPaths == null) {
237  if (this.keywords == null) {
238  throw new PorcupineInvalidArgumentException("Either 'keywords' or 'keywordPaths' must be set.");
239  }
240 
241  if (Utils.isResourcesAvailable()) {
242  this.keywordPaths = new String[keywords.length];
243  for (int i = 0; i < keywords.length; i++) {
244  this.keywordPaths[i] = BUILT_IN_KEYWORD_PATHS.get(keywords[i]);
245  }
246  } else {
247  throw new PorcupineInvalidArgumentException("BuiltIn keywords unavailable. Please provide " +
248  "a valid Porcupine keyword path.");
249  }
250  }
251 
252  if (sensitivities == null) {
253  sensitivities = new float[keywordPaths.length];
254  Arrays.fill(sensitivities, 0.5f);
255  }
256 
257  if (sensitivities.length != keywordPaths.length) {
258  throw new PorcupineInvalidArgumentException(String.format("Number of keywords (%d) " +
259  "does not match number of sensitivities (%d)", keywordPaths.length, sensitivities.length));
260  }
261 
263  }
264  }
265 }
ai.picovoice.porcupine.PorcupineRuntimeException
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/exception/PorcupineRuntimeException.java:13
ai.picovoice.porcupine.Porcupine.Builder
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:165
ai.picovoice.porcupine.Porcupine.Builder.setKeywordPaths
Builder setKeywordPaths(String[] keywordPaths)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:166
ai.picovoice.porcupine.Porcupine.getVersion
native String getVersion()
ai.picovoice.porcupine.Porcupine.LIBRARY_PATH
static final String LIBRARY_PATH
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:33
ai.picovoice.porcupine.Porcupine.Porcupine
Porcupine(String accessKey, String libraryPath, String modelPath, String[] keywordPaths, float[] sensitivities)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:55
ai.picovoice.porcupine.Porcupine.Builder.setBuiltInKeywords
Builder setBuiltInKeywords(BuiltInKeyword[] keywords)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:176
ai.picovoice.porcupine.Porcupine.Builder.sensitivities
float[] sensitivities
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:171
ai.picovoice.porcupine.Porcupine.libraryHandle
final long libraryHandle
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:31
ai.picovoice.porcupine.Porcupine.Builder.accessKey
String accessKey
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:167
f
f
ai.picovoice.porcupine.Porcupine.Builder.setKeywordPath
Builder setKeywordPath(String keywordPaths)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:171
ai.picovoice.porcupine.PorcupineException
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/exception/PorcupineException.java:13
ai.picovoice.porcupine.Porcupine.getFrameLength
native int getFrameLength()
ai.picovoice.porcupine.Porcupine.Builder.setSensitivities
Builder setSensitivities(float[] sensitivities)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:186
ai.picovoice.porcupine.Porcupine.MODEL_PATH
static final String MODEL_PATH
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:34
ai.picovoice.porcupine.Porcupine.Builder.keywordPaths
String[] keywordPaths
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:169
ai.picovoice.porcupine.Porcupine.BUILT_IN_KEYWORD_PATHS
static final HashMap< BuiltInKeyword, String > BUILT_IN_KEYWORD_PATHS
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:42
ai.picovoice.porcupine.Porcupine.BuiltInKeyword.stream
static Stream< BuiltInKeyword > stream()
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:130
ai.picovoice.porcupine.Porcupine.Builder.modelPath
String modelPath
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:168
ai.picovoice.porcupine.Porcupine.Porcupine
Porcupine(String accessKey, String modelPath, String[] keywordPaths, float[] sensitivities)
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:64
ai.picovoice.porcupine.Porcupine.Builder.libraryPath
String libraryPath
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:145
ai.picovoice.porcupine.Porcupine.init
native long init(String accessKey, String modelPath, String[] keywordPaths, float[] sensitivities)
ai.picovoice.porcupine.Porcupine.process
int process(short[] pcm)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:83
ai.picovoice.porcupine.Porcupine.Builder.setBuiltInKeyword
Builder setBuiltInKeyword(BuiltInKeyword keyword)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:181
ai.picovoice.porcupine.Porcupine.Builder.setLibraryPath
Builder setLibraryPath(String libraryPath)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:156
ai.picovoice.porcupine.Porcupine.getSampleRate
native int getSampleRate()
ai.picovoice.porcupine.Porcupine.BuiltInKeyword.options
static String options()
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:134
ai.picovoice.porcupine.Porcupine.Builder.setAccessKey
Builder setAccessKey(String accessKey)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:151
ai.picovoice.porcupine.Porcupine
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:35
ai.picovoice.porcupine.Porcupine.Builder.setSensitivity
Builder setSensitivity(float sensitivity)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:191
ai.picovoice.porcupine.Porcupine.Builder.build
Porcupine build()
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:202
ai.picovoice.porcupine.Porcupine.Builder.setModelPath
Builder setModelPath(String modelPath)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:161
ai.picovoice.porcupine.Porcupine.BuiltInKeyword
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:145
ai.picovoice.porcupine.PorcupineInvalidArgumentException
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/exception/PorcupineInvalidArgumentException.java:13
ai.picovoice.porcupine.Porcupine.Builder.keywords
BuiltInKeyword[] keywords
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:170


picovoice_driver
Author(s):
autogenerated on Fri Apr 1 2022 02:14:50