forked from Picovoice/porcupine
-
Notifications
You must be signed in to change notification settings - Fork 0
/
pv_porcupine.h
106 lines (89 loc) · 3.39 KB
/
pv_porcupine.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
Copyright 2018-2023 Picovoice Inc.
You may not use this file except in compliance with the license. A copy of
the license is located in the "LICENSE" file accompanying this source.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License.
*/
#ifndef PV_PORCUPINE_H
#define PV_PORCUPINE_H
#include <stdbool.h>
#include <stdint.h>
#include "picovoice.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* Forward declaration for Porcupine wake word engine. It detects utterances of
* given keywords within an incoming stream of audio in real-time. It processes
* incoming audio in consecutive frames and for each frame emits the detection
* result. The number of samples per frame can be attained by calling
* 'pv_porcupine_frame_length()'. The incoming audio needs to have a sample rate
* equal to 'pv_sample_rate()' and be 16-bit linearly-encoded. Porcupine
* operates on single-channel audio.
*/
typedef struct pv_porcupine pv_porcupine_t;
/**
* Constructor.
*
* @param access_key AccessKey obtained from Picovoice Console
* (https://console.picovoice.ai/).
* @param model_path Absolute path to the file containing model parameters.
* @param num_keywords Number of keywords to monitor.
* @param keyword_paths Absolute paths to keyword model files.
* @param sensitivities Sensitivities for detecting keywords. Each value should
* be a number within [0, 1]. A higher sensitivity results in fewer misses at
* the cost of increasing the false alarm rate.
* @param[out] object Constructed instance of Porcupine.
* @return Status code. Returns 'PV_STATUS_INVALID_ARGUMENT',
* 'PV_STATUS_IO_ERROR', or 'PV_STATUS_OUT_OF_MEMORY' on failure.
*/
PV_API pv_status_t pv_porcupine_init(
const char *access_key,
const char *model_path,
int32_t num_keywords,
const char *const *keyword_paths,
const float *sensitivities,
pv_porcupine_t **object);
/**
* Destructor.
*
* @param object Porcupine object.
*/
PV_API void pv_porcupine_delete(pv_porcupine_t *object);
/**
* Processes a frame of the incoming audio stream and emits the detection
* result.
*
* @param object Porcupine object.
* @param pcm A frame of audio samples. The number of samples per frame can be
* attained by calling 'pv_porcupine_frame_length()'. The incoming audio needs
* to have a sample rate equal to 'pv_sample_rate()' and be 16-bit
* linearly-encoded. Porcupine operates on single-channel audio.
* @param[out] keyword_index Index of observed keyword at the end of the current
* frame. Indexing is 0-based and matches the ordering of keyword models
* provided to 'pv_porcupine_init()'. If no keyword is detected then it is set
* to -1.
* @return Status code. Returns 'PV_STATUS_INVALID_ARGUMENT' or
* 'PV_STATUS_OUT_OF_MEMORY' on failure.
*/
PV_API pv_status_t pv_porcupine_process(pv_porcupine_t *object, const int16_t *pcm, int32_t *keyword_index);
/**
* Getter for version.
*
* @return Version.
*/
PV_API const char *pv_porcupine_version(void);
/**
* Getter for number of audio samples per frame.
*
* @return Frame length.
*/
PV_API int32_t pv_porcupine_frame_length(void);
#ifdef __cplusplus
}
#endif
#endif // PV_PORCUPINE_H