A wake word is a specific word or phrase that can activate a device when spoken. Enterprises that use wake word services provided by Big Tech are forced to use their branded wake words like "Hey Siri", "Alexa", and "OK Google".
"Wake word" is synonymous with the terms "trigger word", "hotword", and "wake-up word".
In contrast, Picovoice's Porcupine Wake Word Detection engine enables developers to create custom wake word models tailored to a product rather than the branding of Big Tech.
In this article, we will demonstrate how to create a custom wake word to use with Picovoice's Porcupine Wake Word Detection
engine.
An equivalent video tutorial of this article is also available.
1. Picovoice Console
Sign up for a free Picovoice Console account. Once you've created an account, navigate to the Porcupine
page.

2. Choose Wake Word
First, select the language for your custom wake word, then type in the phrase that you would like to train.

Not all wake words perform the same. For guidance on choosing a good wake word, refer to our wake word selection guide.
3. Test & Train
After your wake word has been validated, you can test its performance by clicking on the microphone button. The key thing to monitor is how reliably your wake word gets detected when spoken and whether similar-sounding phrases trigger false detections.
If it's not performing as well as you need it to, please refer to the wake word selection guide and try a different wake word.

Once you're satisfied with how your wake word performs, click on the "Train" button at the bottom.
4. Download your Custom Wake Word
Select the platform you're building for, then click "Download".

In just a few seconds, you'll see a folder in your downloads containing the .ppn
file for your wake word.
Next Steps
Now that you have your .ppn
file, you're ready to begin coding! Below is the list of SDKs supported by Porcupine
, along with corresponding code snippets and quick-start guides.
1o = pvporcupine.create(2 access_key=access_key,3 keyword_paths=keyword_paths)4
5while True:6 keyword_index =7 o.process(audio_frame())8 if keyword_index >= 0:9 // Detection callback
1let o = new Porcupine(2 accessKey,3 keywordPaths,4 sensitivities);5
6while (true) {7 let keywordIndex =8 o.process(audioFrame());9 if (keywordIndex >= 0) {10 // Detection callback11 }12}
1PorcupineManagerCallback2callback =3new PorcupineManagerCallback() {4 @Override5 public void6 invoke(int keywordIndex) {7 // Detection callback8 }9}10
11PorcupineManager o =12new PorcupineManager.Builder()13 .setAccessKey(accessKey)14 .setKeywordPath(keywordPath)15 .build(16 appContext,17 callback);18
19o.start()
1let o = try PorcupineManager(2 accessKey,3 keywordPath: keywordPath,4 onDetection: { keywordIndex in5 // Detection callback6 })7
8try o.start()
1const {2 keywordDetection,3 isLoaded,4 isListening,5 error,6 init,7 start,8 stop,9 release,10} = usePorcupine();11
12await init(13 accessKey,14 keywords,15 model16);17
18await start();19
20useEffect(() => {21 if (keywordDetection !== null) {22 // Handle keyword detection23 }24}, [keywordDetection])
1PorcupineManager o =2await PorcupineManager3 .fromKeywordPaths(4 accessKey,5 keywordPaths,6 (keywordIndex) => {7 // Detection callback8 });9
10await o.start()
1let o = await PorcupineManager2 .fromKeywordPaths(3 accessKey,4 keywordPaths,5 (keywordIndex) => {6 // Detection callback7 });8
9await o.start()
1PorcupineManager o =2PorcupineManager3 .FromKeywordPaths(4 accessKey,5 keywordPaths,6 (keywordIndex) => {7 // Detection callback8 });9
10o.start();
1Porcupine o =2 Porcupine.FromKeywordPaths(3 accessKey,4 keywordPaths);5
6while (true)7{8 int keywordIndex =9 o.Process(Audio());10 if (keywordIndex >= 0)11 {12 // Detection callback13 }14}
1Porcupine o =2 new Porcupine.Builder()3 .setAccessKey(accessKey)4 .setKeywordPath(keywordPath)5 .build();6
7while (true) {8 int keywordIndex =9 o.process(audioFrame());10 if (keywordIndex >= 0) {11 // Detection callback12 }13}
1pv_porcupine_t *porcupine = NULL;2pv_porcupine_init(3 access_key,4 model_path,5 num_keywords,6 keyword_paths,7 &sensitivities,8 &porcupine);9
10while (true) {11 pv_porcupine_process(12 porcupine,13 audio_frame(),14 &keyword_index);15 if (keyword_index >= 0) {16 // Detection callback17 }18}