Porcupine - .NET API
This document outlines how to integrate Porcupine wake word engine within an application using its .NET API.
Requirements
- .NET SDK 3.1+
Compatibility
- .NET Standard 2.0, .NET Core 2.0+ and .NET Framework 4.6.1+
- Runs on Linux (x86_64), macOS (x86_64) and Windows (x86_64)
Usage
Create an instance of the engine
using Pv;Porcupine handle = Porcupine.Create(keywords: new List<string> { "picovoice" });
handle
is an instance of Porcupine that detects utterances of "Picovoice". The keywords
input argument is a shorthand
for accessing default keyword model files shipped with the package. The list of default keywords can be retrieved by
using Pv;foreach (string keyword in Porcupine.KEYWORDS){Console.WriteLine(keyword);}
Porcupine can detect multiple keywords concurrently
using Pv;Porcupine handle = Porcupine.Create(keywords: new List<string>{ "bumblebee", "picovoice" });
To detect non-default keywords use the keywordPaths
input argument instead
using Pv;var keywordPaths = new List<string>{ "/absolute/path/to/keyword/one", "/absolute/path/to/keyword/two", ...}Porcupine handle = Porcupine.Create(keywordPaths: keywordPaths);
The sensitivity of the engine can be tuned per-keyword using the sensitivities
input argument
using Pv;Porcupine handle = Porcupine.Create(keywords: new List<string>{ "grapefruit", "porcupine" },sensitivities: new List<float>{ 0.6f, 0.35f });
Sensitivity is the parameter that enables trading miss rate for the false alarm rate. It is a floating point number within
[0, 1]
. A higher sensitivity reduces the miss rate at the cost of increased false alarm rate.
When initialized, the valid sample rate is given by handle.SampleRate
. Expected frame length (number of audio samples
in an input array) is handle.FrameLength
. The engine accepts 16-bit linearly-encoded PCM and operates on
single-channel audio.
short[] GetNextAudioFrame(){// .. get audioFramereturn audioFrame;}while(true){var keywordIndex = handle.Process(GetNextAudioFrame());if(keywordIndex >= 0){// .. detection event logic/callback}}
Porcupine will have its resources freed by the garbage collector, but to have resources freed immediately after use, wrap it in a using statement:
using(Porcupine handle = Porcupine.Create(keywords: new List<string> { "picovoice" })){// .. Porcupine usage here}
Custom Wake Word
You can create custom Porcupine wake word models using Picovoice Console.
Non-English Wake Words
In order to detect non-English wake words you need to use the corresponding model file. The model files for all supported languages are available here.