binding/java/test/ai/picovoice/porcupine/PorcupineTest.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 org.junit.jupiter.api.AfterEach;
16 import org.junit.jupiter.api.Test;
17 
18 import javax.sound.sampled.AudioInputStream;
19 import javax.sound.sampled.AudioSystem;
20 import javax.sound.sampled.UnsupportedAudioFileException;
21 import java.io.File;
22 import java.io.IOException;
23 import java.nio.ByteBuffer;
24 import java.nio.ByteOrder;
25 import java.nio.file.Path;
26 import java.nio.file.Paths;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 
30 
31 import static org.junit.jupiter.api.Assertions.assertEquals;
32 import static org.junit.jupiter.api.Assertions.assertTrue;
33 
34 public class PorcupineTest {
35 
36  private static final String ENVIRONMENT_NAME;
38  private String accessKey = System.getProperty("pvTestingAccessKey");
39 
40  static {
41  ENVIRONMENT_NAME = Utils.getEnvironmentName();
42  }
43 
44  private static String appendLanguage(String s, String language) {
45  if (language == "en")
46  return s;
47  return s + "_" + language;
48  }
49 
50  private static String getTestKeywordPath(String language, String keyword) {
51  return Paths.get(System.getProperty("user.dir"))
52  .resolve("../../resources")
53  .resolve(appendLanguage("keyword_files", language))
54  .resolve(ENVIRONMENT_NAME)
55  .resolve(keyword + "_" + ENVIRONMENT_NAME + ".ppn")
56  .toString();
57  }
58 
59  private static String getTestModelPath(String language) {
60  return Paths.get(System.getProperty("user.dir"))
61  .resolve("../../lib/common")
62  .resolve(appendLanguage("porcupine_params", language)+".pv")
63  .toString();
64  }
65 
66  private static String getTestAudioFilePath(String audioFileName) {
67  return Paths.get(System.getProperty("user.dir"))
68  .resolve("../../resources/audio_samples")
69  .resolve(audioFileName)
70  .toString();
71  }
72 
73  private static String[] getTestKeywordPaths(String language, String[] keywords) {
74  String keywordPaths[] = new String[keywords.length];
75  for (int i=0; i<keywords.length; i++) {
76  keywordPaths[i] = getTestKeywordPath(language, keywords[i]);
77  }
78  return keywordPaths;
79  }
80 
81  @AfterEach
82  void tearDown() {
83  porcupine.delete();
84  }
85 
86  @Test
87  void getVersion() throws PorcupineException {
88  porcupine = new Porcupine.Builder()
90  .setBuiltInKeyword(Porcupine.BuiltInKeyword.PORCUPINE)
91  .build();
92  assertTrue(porcupine.getVersion() != null && !porcupine.getVersion().equals(""));
93  }
94 
95  @Test
96  void getFrameLength() throws PorcupineException {
97  porcupine = new Porcupine.Builder()
99  .setBuiltInKeyword(Porcupine.BuiltInKeyword.PORCUPINE)
100  .build();
101  assertTrue(porcupine.getFrameLength() > 0);
102  }
103 
104  @org.junit.jupiter.api.Test
105  void getSampleRate() throws PorcupineException {
106  porcupine = new Porcupine.Builder()
108  .setBuiltInKeyword(Porcupine.BuiltInKeyword.PORCUPINE)
109  .build();
110  assertTrue(porcupine.getSampleRate() > 0);
111  }
112 
113  private void runTestCase(String audioFileName, ArrayList<Integer> expectedResults) throws IOException, UnsupportedAudioFileException, PorcupineException {
114  int frameLen = porcupine.getFrameLength();
115  String audioFilePath = getTestAudioFilePath(audioFileName);
116  File testAudioPath = new File(audioFilePath);
117 
118  AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(testAudioPath);
119  assertEquals(audioInputStream.getFormat().getFrameRate(), 16000);
120 
121  int byteDepth = audioInputStream.getFormat().getFrameSize();
122  int bufferSize = frameLen * byteDepth;
123  byte[] pcm = new byte[bufferSize];
124  short[] porcupineFrame = new short[frameLen];
125  int numBytesRead = 0;
126  ArrayList<Integer> results = new ArrayList<>();
127  while ((numBytesRead = audioInputStream.read(pcm)) != -1) {
128 
129  if (numBytesRead / byteDepth == frameLen) {
130 
131  ByteBuffer.wrap(pcm).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(porcupineFrame);
132  int result = porcupine.process(porcupineFrame);
133  assertTrue(result >= -1);
134  if (result >= 0) {
135  results.add(result);
136  }
137  }
138  }
139 
140  assertEquals(results, expectedResults);
141  }
142 
143  @Test
144  void testSingleKeyword() throws IOException, UnsupportedAudioFileException, PorcupineException {
145  porcupine = new Porcupine.Builder()
148  .build();
149 
150  runTestCase(
151  "porcupine.wav",
152  new ArrayList<>(Arrays.asList(0)));
153  }
154 
155  @Test
156  void testMultipleKeywords() throws IOException, UnsupportedAudioFileException, PorcupineException {
157  final Porcupine.BuiltInKeyword[] keywords = new Porcupine.BuiltInKeyword[]{
158  Porcupine.BuiltInKeyword.ALEXA,
159  Porcupine.BuiltInKeyword.AMERICANO,
160  Porcupine.BuiltInKeyword.BLUEBERRY,
161  Porcupine.BuiltInKeyword.BUMBLEBEE,
162  Porcupine.BuiltInKeyword.GRAPEFRUIT,
163  Porcupine.BuiltInKeyword.GRASSHOPPER,
164  Porcupine.BuiltInKeyword.PICOVOICE,
165  Porcupine.BuiltInKeyword.PORCUPINE,
166  Porcupine.BuiltInKeyword.TERMINATOR
167  };
168 
169  porcupine = new Porcupine.Builder()
172  .build();
173 
174  runTestCase(
175  "multiple_keywords.wav",
176  new ArrayList<>(Arrays.asList(7, 0, 1, 2, 3, 4, 5, 6, 7, 8)));
177  }
178 
179  @Test
180  void testSingleKeywordDe() throws IOException, UnsupportedAudioFileException, PorcupineException {
181  final String language = "de";
182  final String keywords[] = {"heuschrecke"};
183  porcupine = new Porcupine.Builder()
185  .setModelPath(getTestModelPath(language))
187  .build();
188  runTestCase(
189  "heuschrecke.wav",
190  new ArrayList<>(Arrays.asList(0)));
191  }
192 
193  @Test
194  void testMultipleKeywordsDe() throws IOException, UnsupportedAudioFileException, PorcupineException {
195  final String language = "de";
196  final String keywords[] = {"ananas", "heuschrecke", "leguan", "stachelschwein"};
197  porcupine = new Porcupine.Builder()
199  .setModelPath(getTestModelPath(language))
201  .build();
202 
203  runTestCase(
204  "multiple_keywords_de.wav",
205  new ArrayList<>(Arrays.asList(0, 1, 2, 3)));
206  }
207 
208  @Test
209  void testSingleKeywordEs() throws IOException, UnsupportedAudioFileException, PorcupineException {
210  final String language = "es";
211  final String keywords[] = {"manzana"};
212  porcupine = new Porcupine.Builder()
214  .setModelPath(getTestModelPath(language))
216  .build();
217 
218  runTestCase(
219  "manzana.wav",
220  new ArrayList<>(Arrays.asList(0)));
221  }
222 
223  @Test
224  void testMultipleKeywordsEs() throws IOException, UnsupportedAudioFileException, PorcupineException {
225  final String language = "es";
226  final String keywords[] = {"emparedado", "leopardo", "manzana"};
227  porcupine = new Porcupine.Builder()
229  .setModelPath(getTestModelPath(language))
231  .build();
232 
233  runTestCase(
234  "multiple_keywords_es.wav",
235  new ArrayList<>(Arrays.asList(0, 1, 2)));
236  }
237 
238  @Test
239  void testSingleKeywordFr() throws IOException, UnsupportedAudioFileException, PorcupineException {
240  final String language = "fr";
241  final String keywords[] = {"mon chouchou"};
242  porcupine = new Porcupine.Builder()
244  .setModelPath(getTestModelPath(language))
246  .build();
247 
248  runTestCase(
249  "mon_chouchou.wav",
250  new ArrayList<>(Arrays.asList(0)));
251  }
252 
253  @Test
254  void testMultipleKeywordsFr() throws IOException, UnsupportedAudioFileException, PorcupineException {
255  final String language = "fr";
256  final String keywords[] = {"framboise", "mon chouchou", "parapluie"};
257  porcupine = new Porcupine.Builder()
259  .setModelPath(getTestModelPath(language))
261  .build();
262 
263  runTestCase(
264  "multiple_keywords_fr.wav",
265  new ArrayList<>(Arrays.asList(0, 1, 0, 2)));
266  }
267 }
ai.picovoice.porcupine.PorcupineTest.getTestKeywordPaths
static String[] getTestKeywordPaths(String language, String[] keywords)
Definition: binding/java/test/ai/picovoice/porcupine/PorcupineTest.java:73
ai.picovoice.porcupine.PorcupineTest.getTestKeywordPath
static String getTestKeywordPath(String language, String keyword)
Definition: binding/java/test/ai/picovoice/porcupine/PorcupineTest.java:50
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: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:183
s
XmlRpcServer s
ai.picovoice.porcupine.Porcupine.delete
void delete()
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:75
ai.picovoice.porcupine.Porcupine.getVersion
native String getVersion()
ai.picovoice.porcupine.Porcupine.Builder.setBuiltInKeywords
Builder setBuiltInKeywords(BuiltInKeyword[] keywords)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:176
ai.picovoice.porcupine.Porcupine.Builder.build
Porcupine build(Context context)
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:256
ai.picovoice.porcupine.PorcupineTest.runTestCase
void runTestCase(String audioFileName, ArrayList< Integer > expectedResults)
Definition: binding/java/test/ai/picovoice/porcupine/PorcupineTest.java:113
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.PorcupineTest.appendLanguage
static String appendLanguage(String s, String language)
Definition: binding/java/test/ai/picovoice/porcupine/PorcupineTest.java:44
python.setup.keywords
keywords
Definition: porcupine/binding/python/setup.py:88
ai.picovoice.porcupine.PorcupineTest.accessKey
String accessKey
Definition: binding/java/test/ai/picovoice/porcupine/PorcupineTest.java:38
ai.picovoice.porcupine.Porcupine.process
int process(short[] pcm)
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:94
ai.picovoice.porcupine.PorcupineTest
Definition: binding/java/test/ai/picovoice/porcupine/PorcupineTest.java:34
ai.picovoice.porcupine.Porcupine.Builder.setBuiltInKeyword
Builder setBuiltInKeyword(BuiltInKeyword keyword)
Definition: java/src/ai/picovoice/porcupine/Porcupine.java:181
ai.picovoice.porcupine.PorcupineTest.ENVIRONMENT_NAME
static final String ENVIRONMENT_NAME
Definition: binding/java/test/ai/picovoice/porcupine/PorcupineTest.java:36
ai.picovoice.porcupine.Porcupine.getSampleRate
native int getSampleRate()
ai.picovoice.porcupine.Porcupine.Builder.setAccessKey
Builder setAccessKey(String accessKey)
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:173
ai.picovoice.porcupine.PorcupineTest.getTestAudioFilePath
static String getTestAudioFilePath(String audioFileName)
Definition: binding/java/test/ai/picovoice/porcupine/PorcupineTest.java:66
ai.picovoice.porcupine.Porcupine.BuiltInKeyword.PORCUPINE
PORCUPINE
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:158
ai.picovoice.porcupine.Porcupine
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:35
ai.picovoice.porcupine.PorcupineTest.getTestModelPath
static String getTestModelPath(String language)
Definition: binding/java/test/ai/picovoice/porcupine/PorcupineTest.java:59
ai.picovoice.porcupine.Porcupine.Builder.setModelPath
Builder setModelPath(String modelPath)
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:178
ai.picovoice.porcupine.PorcupineTest.porcupine
Porcupine porcupine
Definition: binding/java/test/ai/picovoice/porcupine/PorcupineTest.java:37
ai.picovoice.porcupine.Porcupine.BuiltInKeyword
Definition: android/Porcupine/porcupine/src/main/java/ai/picovoice/porcupine/Porcupine.java:145


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