<!doctype html>
<html lang="en" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
      
      
      <link rel="shortcut icon" href="../../resources/images/alexa-favicon-02.png">
      <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.0.2">
    
    
      
        <title>API v2 - Amazon Wake Word Engine</title>
      
    
    
      <link rel="stylesheet" href="../../assets/stylesheets/main.38780c08.min.css">
      
        
        <link rel="stylesheet" href="../../assets/stylesheets/palette.3f72e892.min.css">
        
      
    
    
    
      
        
        <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
        <style>body,input{font-family:"Roboto",-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono",SFMono-Regular,Consolas,Menlo,monospace}</style>
      
    
    
    
      <link rel="stylesheet" href="../../resources/stylesheets/extra.css">
    
    
      
    
    
  </head>
  
  
    
    
    
    
    
    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="">
      
  
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#api-sample-v2-api" class="md-skip">
          Skip to content
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
      <header class="md-header" data-md-component="header">
  <nav class="md-header-nav md-grid" aria-label="Header">
    <a href="../.." title="Amazon Wake Word Engine" class="md-header-nav__button md-logo" aria-label="Amazon Wake Word Engine">
      
  <img src="../../resources/images/logo-alexa-blue-ring.png" alt="logo">

    </a>
    <label class="md-header-nav__button md-icon" for="__drawer">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
    </label>
    <div class="md-header-nav__title" data-md-component="header-title">
      
        <div class="md-header-nav__ellipsis">
          <span class="md-header-nav__topic md-ellipsis">
            Amazon Wake Word Engine
          </span>
          <span class="md-header-nav__topic md-ellipsis">
            
              API v2
            
          </span>
        </div>
      
    </div>
    
      <label class="md-header-nav__button md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
      </label>
      
<div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active">
      <label class="md-search__icon md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
      </label>
      <button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
      </button>
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" data-md-scrollfix>
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">
            Initializing search
          </div>
          <ol class="md-search-result__list"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
    
    
  </nav>
</header>
    
    <div class="md-container" data-md-component="container">
      
      
        
          

  

<nav class="md-tabs md-tabs--active" aria-label="Tabs" data-md-component="tabs">
  <div class="md-tabs__inner md-grid">
    <ul class="md-tabs__list">
      
        
  
  
    <li class="md-tabs__item">
      
        <a href="../../index.html" class="md-tabs__link">
          Home
        </a>
      
    </li>
  

      
        
  
  
    
    
  
  
    <li class="md-tabs__item">
      
        <a href="index.html" class="md-tabs__link md-tabs__link--active">
          Getting Started
        </a>
      
    </li>
  

  

      
        
  
  
    
    
  
  
    <li class="md-tabs__item">
      
        <a href="../../features/wakeword/overview.html" class="md-tabs__link">
          Features
        </a>
      
    </li>
  

  

      
        
  
  
    <li class="md-tabs__item">
      
        <a href="../../avs-device-sdk/index.html" class="md-tabs__link">
          AVS Device SDK
        </a>
      
    </li>
  

      
        
  
  
    <li class="md-tabs__item">
      
        <a href="../../api-reference/index.html" class="md-tabs__link">
          API Reference
        </a>
      
    </li>
  

      
        
  
  
    <li class="md-tabs__item">
      
        <a href="../../support/getting-help.html" class="md-tabs__link">
          Support
        </a>
      
    </li>
  

      
    </ul>
  </div>
</nav>
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href="../.." title="Amazon Wake Word Engine" class="md-nav__button md-logo" aria-label="Amazon Wake Word Engine">
      
  <img src="../../resources/images/logo-alexa-blue-ring.png" alt="logo">

    </a>
    Amazon Wake Word Engine
  </label>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-1" type="checkbox" id="nav-1">
    
    <label class="md-nav__link" for="nav-1">
      Home
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Home" data-md-level="1">
      <label class="md-nav__title" for="nav-1">
        <span class="md-nav__icon md-icon"></span>
        Home
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../index.html" class="md-nav__link">
      Welcome
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../general-architecture.html" class="md-nav__link">
      General Architecture
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../api-versions-features.html" class="md-nav__link">
      API Versions & Features
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../wrappers-sdk-integrations.html" class="md-nav__link">
      Wrappers & SDK Integrations
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../supported-architectures.html" class="md-nav__link">
      Supported Architectures
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../release-history.html" class="md-nav__link">
      Release History
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

    
      
      
      

  


  <li class="md-nav__item md-nav__item--active md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked>
    
    <label class="md-nav__link" for="nav-2">
      Getting Started
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Getting Started" data-md-level="1">
      <label class="md-nav__title" for="nav-2">
        <span class="md-nav__icon md-icon"></span>
        Getting Started
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          

  


  <li class="md-nav__item md-nav__item--active md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-1" type="checkbox" id="nav-2-1" checked>
    
    <label class="md-nav__link" for="nav-2-1">
      API Usage Samples
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="API Usage Samples" data-md-level="2">
      <label class="md-nav__title" for="nav-2-1">
        <span class="md-nav__icon md-icon"></span>
        API Usage Samples
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="index.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="api-sample-v1.html" class="md-nav__link">
      API v1
    </a>
  </li>

        
          
          
          

  


  <li class="md-nav__item md-nav__item--active">
    
    <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
    
      
    
    
    <a href="api-sample-v2.html" class="md-nav__link md-nav__link--active">
      API v2
    </a>
    
  </li>

        
      </ul>
    </nav>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../release-contents/index.html" class="md-nav__link">
      Release Contents
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../model-selection.html" class="md-nav__link">
      Model Selection
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../filesim.html" class="md-nav__link">
      File Simulators
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
    
    <label class="md-nav__link" for="nav-3">
      Features
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Features" data-md-level="1">
      <label class="md-nav__title" for="nav-3">
        <span class="md-nav__icon md-icon"></span>
        Features
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-1" type="checkbox" id="nav-3-1">
    
    <label class="md-nav__link" for="nav-3-1">
      Wake Word
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Wake Word" data-md-level="2">
      <label class="md-nav__title" for="nav-3-1">
        <span class="md-nav__icon md-icon"></span>
        Wake Word
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/overview.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/performance.html" class="md-nav__link">
      Wake Word Performance
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/detection-threshold.html" class="md-nav__link">
      Detection Threshold
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-1-4" type="checkbox" id="nav-3-1-4">
    
    <label class="md-nav__link" for="nav-3-1-4">
      Media Wake Suppression
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Media Wake Suppression" data-md-level="3">
      <label class="md-nav__title" for="nav-3-1-4">
        <span class="md-nav__icon md-icon"></span>
        Media Wake Suppression
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/media-wakes/media-wakes.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-1-4-2" type="checkbox" id="nav-3-1-4-2">
    
    <label class="md-nav__link" for="nav-3-1-4-2">
      Fingerprinting
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Fingerprinting" data-md-level="4">
      <label class="md-nav__title" for="nav-3-1-4-2">
        <span class="md-nav__icon md-icon"></span>
        Fingerprinting
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/media-wakes/fingerprinting/overview.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/media-wakes/fingerprinting/integration-guide.html" class="md-nav__link">
      Integration Guide
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-1-4-3" type="checkbox" id="nav-3-1-4-3">
    
    <label class="md-nav__link" for="nav-3-1-4-3">
      Watermarking
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Watermarking" data-md-level="4">
      <label class="md-nav__title" for="nav-3-1-4-3">
        <span class="md-nav__icon md-icon"></span>
        Watermarking
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/media-wakes/watermarking/overview.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/media-wakes/watermarking/integration.html" class="md-nav__link">
      Integration Guide
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
      </ul>
    </nav>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/self-wake/self-wake-overview.html" class="md-nav__link">
      Self-Wake Suppression
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-1-6" type="checkbox" id="nav-3-1-6">
    
    <label class="md-nav__link" for="nav-3-1-6">
      Pre-roll
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Pre-roll" data-md-level="3">
      <label class="md-nav__title" for="nav-3-1-6">
        <span class="md-nav__icon md-icon"></span>
        Pre-roll
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/preroll/preroll-overview.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/preroll/preroll-integration-guide.html" class="md-nav__link">
      Integration Guide
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/cascade-mode.html" class="md-nav__link">
      Cascade Mode
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wakeword/client-properties.html" class="md-nav__link">
      Client Properties
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-2" type="checkbox" id="nav-3-2">
    
    <label class="md-nav__link" for="nav-3-2">
      Diagnostic Information (WWDI)
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Diagnostic Information (WWDI)" data-md-level="2">
      <label class="md-nav__title" for="nav-3-2">
        <span class="md-nav__icon md-icon"></span>
        Diagnostic Information (WWDI)
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wwdi/overview.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/wwdi/integration-guide.html" class="md-nav__link">
      Integration Guide
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-3" type="checkbox" id="nav-3-3">
    
    <label class="md-nav__link" for="nav-3-3">
      Standalone Voice Activity Detection (VAD)
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Standalone Voice Activity Detection (VAD)" data-md-level="2">
      <label class="md-nav__title" for="nav-3-3">
        <span class="md-nav__icon md-icon"></span>
        Standalone Voice Activity Detection (VAD)
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/vad/overview.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-3-2" type="checkbox" id="nav-3-3-2">
    
    <label class="md-nav__link" for="nav-3-3-2">
      Energy Detection
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Energy Detection" data-md-level="3">
      <label class="md-nav__title" for="nav-3-3-2">
        <span class="md-nav__icon md-icon"></span>
        Energy Detection
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/vad/energydetection/overview.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/vad/energydetection/integration-guide.html" class="md-nav__link">
      Integration Guide
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
      </ul>
    </nav>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-4" type="checkbox" id="nav-3-4">
    
    <label class="md-nav__link" for="nav-3-4">
      Device Artifact Vending Service (DAVS)
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Device Artifact Vending Service (DAVS)" data-md-level="2">
      <label class="md-nav__title" for="nav-3-4">
        <span class="md-nav__icon md-icon"></span>
        Device Artifact Vending Service (DAVS)
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/davs/overview.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/davs/integration-guide.html" class="md-nav__link">
      Integration Guide
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../features/davs/davs-filters.html" class="md-nav__link">
      DAVS filters in wakeword engine package
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
      </ul>
    </nav>
  </li>

    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
    
    <label class="md-nav__link" for="nav-4">
      AVS Device SDK
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="AVS Device SDK" data-md-level="1">
      <label class="md-nav__title" for="nav-4">
        <span class="md-nav__icon md-icon"></span>
        AVS Device SDK
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../avs-device-sdk/index.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../avs-device-sdk/integration-guide.html" class="md-nav__link">
      Integration Guide
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
    
    <label class="md-nav__link" for="nav-5">
      API Reference
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="API Reference" data-md-level="1">
      <label class="md-nav__title" for="nav-5">
        <span class="md-nav__icon md-icon"></span>
        API Reference
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../api-reference/index.html" class="md-nav__link">
      API Reference
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-5-2" type="checkbox" id="nav-5-2">
    
    <label class="md-nav__link" for="nav-5-2">
      Wrappers
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Wrappers" data-md-level="2">
      <label class="md-nav__title" for="nav-5-2">
        <span class="md-nav__icon md-icon"></span>
        Wrappers
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-5-2-1" type="checkbox" id="nav-5-2-1">
    
    <label class="md-nav__link" for="nav-5-2-1">
      Java
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Java" data-md-level="3">
      <label class="md-nav__title" for="nav-5-2-1">
        <span class="md-nav__icon md-icon"></span>
        Java
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../api-reference/wrappers/java/java-binding-overview.html" class="md-nav__link">
      Overview
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../api-reference/wrappers/java/java-binding-reference.html" class="md-nav__link">
      Reference
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../api-reference/wrappers/java/java-binding-engine-reference.html" class="md-nav__link">
      Engine API
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../api-reference/wrappers/java/java-binding-wake-word-reference.html" class="md-nav__link">
      Wake Word API
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../api-reference/wrappers/java/java-binding-fingerprinting-reference.html" class="md-nav__link">
      Fingerprinting API
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../api-reference/wrappers/swift/index.html" class="md-nav__link">
      Swift
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
      </ul>
    </nav>
  </li>

    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-nav__toggle md-toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
    
    <label class="md-nav__link" for="nav-6">
      Support
      <span class="md-nav__icon md-icon"></span>
    </label>
    <nav class="md-nav" aria-label="Support" data-md-level="1">
      <label class="md-nav__title" for="nav-6">
        <span class="md-nav__icon md-icon"></span>
        Support
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../support/getting-help.html" class="md-nav__link">
      Getting Help
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../support/faq/index.html" class="md-nav__link">
      FAQ
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
    
  
  
</nav>
                  </div>
                </div>
              </div>
            
          
          <div class="md-content">
            <article class="md-content__inner md-typeset">
              
                
                
                <h1 id="api-sample-v2-api">API Sample (V2 API)</h1>
<hr />
<p>The following code demonstrates the general operation of the Wake Word Engine using the V2 API.</p>
<div class="highlight"><pre><span></span><code><span class="c1">///////////////////////////////////////////////////////////////////////////</span>
<span class="c1">// Copyright 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.</span>
<span class="c1">///////////////////////////////////////////////////////////////////////////</span>

<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;string.h&gt;</span><span class="cp"></span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span><span class="cp"></span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdlib.h&gt;</span><span class="cp"></span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;pryon_lite_common_client_properties.h&quot;</span><span class="cp"></span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;pryon_lite_v2.h&quot;</span><span class="cp"></span>

<span class="cp">#define SAMPLES_PER_FRAME (160)</span>
<span class="cp">#define false 0</span>
<span class="cp">#define true 1</span>

<span class="c1">// global flag to stop processing, set by application</span>
<span class="k">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">quit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span>

<span class="c1">// engine handle</span>
<span class="k">static</span><span class="w"> </span><span class="n">PryonLiteV2Handle</span><span class="w"> </span><span class="n">sHandle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">};</span><span class="w"></span>

<span class="cp">#define ALIGN(n) __attribute__((aligned(n)))</span>

<span class="k">static</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">engineBuffer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">};</span><span class="w"> </span><span class="c1">// should be an array large enough to hold the largest engine</span>

<span class="c1">//---- Application functions to be implemented by the client -------------------</span>

<span class="c1">// ---- Wake Word ----</span>
<span class="c1">// binary model buffer, allocated by application</span>
<span class="c1">// this buffer can be read-only memory as PryonLite will not modify the contents</span>
<span class="n">ALIGN</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">wakewordModelBuffer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">};</span><span class="w"> </span><span class="c1">// should be an array large enough to hold the largest wake word model</span>

<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">loadWakewordModel</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">model</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="o">*</span><span class="n">sizeofModel</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="c1">// In order to detect keywords, the decoder uses a model which defines the parameters,</span>
<span class="w">    </span><span class="c1">// neural network weights, classifiers, etc that are used at runtime to process the audio</span>
<span class="w">    </span><span class="c1">// and give detection results.</span>

<span class="w">    </span><span class="c1">// Each model is packaged in two formats:</span>
<span class="w">    </span><span class="c1">// 1. A .bin file that can be loaded from disk (via fopen, fread, etc)</span>
<span class="w">    </span><span class="c1">// 2. A .cpp file that can be hard-coded at compile time</span>

<span class="w">    </span><span class="o">*</span><span class="n">sizeofModel</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="c1">// example value, will be the size of the binary model byte array</span>
<span class="w">    </span><span class="o">*</span><span class="n">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wakewordModelBuffer</span><span class="p">;</span><span class="w"> </span><span class="c1">// pointer to model in memory</span>
<span class="p">}</span><span class="w"></span>
<span class="c1">// ---- Feature Extraction ----</span>
<span class="c1">// binary config buffer, allocated by application</span>
<span class="c1">// this buffer can be read-only memory as PryonLite will not modify the contents</span>
<span class="n">ALIGN</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">featexConfigBuffer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">};</span><span class="w"> </span><span class="c1">// should be an array large enough to hold the largest featex config</span>

<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">loadFeatexConfig</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">blob</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="o">*</span><span class="n">sizeofBlob</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="c1">// In order to calculate features, the engine uses a config which defines the parameters,</span>
<span class="w">    </span><span class="c1">// that are used at runtime to process the audio</span>

<span class="w">    </span><span class="c1">// Each config is packaged in two formats:</span>
<span class="w">    </span><span class="c1">// 1. A .bin file that can be loaded from disk (via fopen, fread, etc)</span>
<span class="w">    </span><span class="c1">// 2. A .cpp file that can be hard-coded at compile time</span>

<span class="w">    </span><span class="o">*</span><span class="n">sizeofBlob</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="c1">// example value, will be the size of the binary config byte array</span>
<span class="w">    </span><span class="o">*</span><span class="n">blob</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">featexConfigBuffer</span><span class="p">;</span><span class="w"> </span><span class="c1">// pointer to config in memory</span>
<span class="p">}</span><span class="w"></span>
<span class="c1">// ---- Fingerprinting ----</span>
<span class="c1">// binary fingerprint list buffer, allocated by application</span>
<span class="c1">// this buffer can be read-only memory as PryonLite will not modify the contents</span>
<span class="n">ALIGN</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">fingerprintListBuffer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">};</span><span class="w"> </span><span class="c1">// should be an array large enough to hold the fingerprint list data.</span>

<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">loadFingerprintList</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">fingerprintList</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="o">*</span><span class="n">sizeofFingerprintList</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="c1">// In order to suppress wakes from fingerprinted media, PryonLite uses a binary list which</span>
<span class="w">    </span><span class="c1">// tells its engine which audio to suppress.</span>

<span class="w">    </span><span class="c1">// Each list is a binary file that can be loaded from disk and should be downloaded</span>
<span class="w">    </span><span class="c1">// via a DAVS client.</span>

<span class="w">    </span><span class="o">*</span><span class="n">sizeofFingerprintList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="c1">// example value, will be the size of the binary fingerprint list byte array</span>
<span class="w">    </span><span class="o">*</span><span class="n">fingerprintList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fingerprintListBuffer</span><span class="p">;</span><span class="w"> </span><span class="c1">// pointer to fingerprint list in memory</span>
<span class="p">}</span><span class="w"></span>

<span class="c1">// client implemented function to read audio samples</span>
<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">readAudio</span><span class="p">(</span><span class="kt">short</span><span class="o">*</span><span class="w"> </span><span class="n">samples</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">sampleCount</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="c1">// todo - read samples from file, audio system, etc.</span>
<span class="p">}</span><span class="w"></span>

<span class="c1">//---- Engine callback functions to be implemented by the client --------------</span>

<span class="c1">// ---- Wake Word ----</span>
<span class="c1">// VAD event handler</span>
<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">vadEventHandler</span><span class="p">(</span><span class="n">PryonLiteV2Handle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">PryonLiteVadEvent</span><span class="o">*</span><span class="w"> </span><span class="n">vadEvent</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;VAD state %d</span>
<span class="s">&quot;, (int) vadEvent-&gt;vadState);</span>
<span class="p">}</span><span class="w"></span>
<span class="c1">// Wake Word event handler</span>
<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">wakewordEventHandler</span><span class="p">(</span><span class="n">PryonLiteV2Handle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">PryonLiteWakewordResult</span><span class="o">*</span><span class="w"> </span><span class="n">wwEvent</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Detected wake word &#39;%s&#39;</span>
<span class="s">&quot;, wwEvent-&gt;keyword);</span>
<span class="p">}</span><span class="w"></span>
<span class="c1">// ---- Feature Extraction ----</span>
<span class="c1">// Featex event handler</span>
<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">featexEventHandler</span><span class="p">(</span><span class="n">PryonLiteV2Handle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">PryonLiteFeatexResult</span><span class="o">*</span><span class="w"> </span><span class="n">featexResult</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Received %d features</span>
<span class="s">&quot;, featexResult-&gt;featureVectorLength);</span>
<span class="p">}</span><span class="w"></span>
<span class="c1">// ---- Fingerprinting ----</span>
<span class="c1">// Fingerprint match event handler</span>
<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">fingerprintMatchEventHandler</span><span class="p">(</span><span class="n">PryonLiteV2Handle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">PryonLiteFingerprintMatchEvent</span><span class="o">*</span><span class="w"> </span><span class="n">fingerprintMatchEvent</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Detected fingerprint match with keyword &#39;%s&#39;</span>
<span class="s">&quot;, fingerprintMatchEvent-&gt;keyword);</span>
<span class="p">}</span><span class="w"></span>
<span class="c1">// ---- Wake Word Internal API ----</span>
<span class="c1">// DNN Score handler</span>
<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">dnnScoreHandler</span><span class="p">(</span><span class="n">PryonLiteV2Handle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">PryonLiteDnnScoreInternal</span><span class="o">*</span><span class="w"> </span><span class="n">dnnScore</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"></span>

<span class="w">    </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;DNN Scores Q: %d</span>
<span class="s">&quot;, dnnScore-&gt;scoresQ);</span>
<span class="w">    </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;DNN Scores : &quot;</span><span class="p">);</span><span class="w"></span>
<span class="w">    </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">dnnScore</span><span class="o">-&gt;</span><span class="n">numScores</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"></span>
<span class="w">    </span><span class="p">{</span><span class="w"></span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;, &quot;</span><span class="p">);</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>
<span class="w">        </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;%d&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">dnnScore</span><span class="o">-&gt;</span><span class="n">scores</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span><span class="w"></span>
<span class="w">    </span><span class="p">}</span><span class="w"></span>
<span class="w">    </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;</span>
<span class="s">&quot;);</span>
<span class="p">}</span><span class="w"></span>


<span class="c1">///</span>
<span class="c1">/// @brief Callback function triggered by the engine when any event occurs.</span>
<span class="c1">///</span>
<span class="c1">/// @param handle [in] Handle for the engine which created the event</span>
<span class="c1">/// @param event [in] Event that occurred</span>
<span class="c1">///</span>
<span class="c1">/// @return void</span>
<span class="c1">///</span>
<span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">handleEvent</span><span class="p">(</span><span class="n">PryonLiteV2Handle</span><span class="w"> </span><span class="o">*</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">PryonLiteV2Event</span><span class="o">*</span><span class="w"> </span><span class="n">event</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Wake Word ----</span>
<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">event</span><span class="o">-&gt;</span><span class="n">vadEvent</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span>
<span class="w">    </span><span class="p">{</span><span class="w"></span>
<span class="w">        </span><span class="n">vadEventHandler</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="n">event</span><span class="o">-&gt;</span><span class="n">vadEvent</span><span class="p">);</span><span class="w"></span>
<span class="w">    </span><span class="p">}</span><span class="w"></span>
<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">event</span><span class="o">-&gt;</span><span class="n">wwEvent</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span>
<span class="w">    </span><span class="p">{</span><span class="w"></span>
<span class="w">        </span><span class="n">wakewordEventHandler</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="n">event</span><span class="o">-&gt;</span><span class="n">wwEvent</span><span class="p">);</span><span class="w"></span>
<span class="w">    </span><span class="p">}</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Feature Extraction ----</span>
<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">event</span><span class="o">-&gt;</span><span class="n">featexEvent</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span>
<span class="w">    </span><span class="p">{</span><span class="w"></span>
<span class="w">        </span><span class="n">featexEventHandler</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="n">event</span><span class="o">-&gt;</span><span class="n">featexEvent</span><span class="p">);</span><span class="w"></span>
<span class="w">    </span><span class="p">}</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Fingerprinting ----</span>
<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">event</span><span class="o">-&gt;</span><span class="n">fingerprintMatchEvent</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span>
<span class="w">    </span><span class="p">{</span><span class="w"></span>
<span class="w">        </span><span class="n">fingerprintMatchEventHandler</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="n">event</span><span class="o">-&gt;</span><span class="n">fingerprintMatchEvent</span><span class="p">);</span><span class="w"></span>
<span class="w">    </span><span class="p">}</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Wake Word Internal API ----</span>
<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">event</span><span class="o">-&gt;</span><span class="n">dnnScore</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"></span>
<span class="w">    </span><span class="p">{</span><span class="w"></span>
<span class="w">        </span><span class="n">dnnScoreHandler</span><span class="p">(</span><span class="n">handle</span><span class="p">,</span><span class="w"> </span><span class="n">event</span><span class="o">-&gt;</span><span class="n">dnnScore</span><span class="p">);</span><span class="w"></span>
<span class="w">    </span><span class="p">}</span><span class="w"></span>

<span class="p">}</span><span class="w"></span>

<span class="c1">//---- Main processing loop ----------------------------------------------------</span>

<span class="c1">// The main loop below shows the full life cycle of the engine. This</span>
<span class="c1">// life cycle is broken down into three phases.</span>
<span class="c1">//</span>
<span class="c1">// Phase 1 - Initialization</span>
<span class="c1">//     STEP 1.1 - Load the models</span>
<span class="c1">//     STEP 1.2 - Configure engine</span>
<span class="c1">//     STEP 1.3 - Enable engine events</span>
<span class="c1">//     STEP 1.4 - Query for configuration specific attributes</span>
<span class="c1">//     STEP 1.5 - Allocate/Check engine buffer</span>
<span class="c1">//     STEP 1.6 - Initialize engine</span>
<span class="c1">//     STEP 1.7 - Post-init functionality setup</span>
<span class="c1">//     STEP 1.8 - Optional : Runtime configuration functions</span>
<span class="c1">// Phase 2 - Audio Processing</span>
<span class="c1">//     STEP 2.1 - Gather audio</span>
<span class="c1">//     STEP 2.2 - Push audio to engine</span>
<span class="c1">//     STEP 2.3 - Handle engine events</span>
<span class="c1">// Phase 3 - Cleanup</span>
<span class="c1">//     STEP 3.1 - Functionality specific cleanup</span>
<span class="c1">//     STEP 3.2 - Engine cleanup</span>
<span class="c1">//</span>
<span class="c1">// The sample below is for a single locale/model. To change the locale/model</span>
<span class="c1">// being used, complete Phase 3 - Cleanup for the engine instance and then</span>
<span class="c1">// create a new instance by going back through Phase 1 - Initialization with</span>
<span class="c1">// the new model.</span>
<span class="kt">int</span><span class="w"> </span><span class="n">main</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">argc</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">**</span><span class="n">argv</span><span class="p">)</span><span class="w"></span>
<span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="n">PryonLiteV2ConfigAttributes</span><span class="w"> </span><span class="n">configAttributes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">};</span><span class="w"></span>

<span class="w">    </span><span class="c1">// Start Phase 1 - Initialization</span>
<span class="w">    </span><span class="c1">//</span>
<span class="w">    </span><span class="c1">// The initialization phase begins with nothing and ends with a fully</span>
<span class="w">    </span><span class="c1">// initialized instance of the engine.</span>
<span class="w">    </span><span class="c1">//</span>
<span class="w">    </span><span class="c1">// STEP 1.1 - Load the models</span>
<span class="w">    </span><span class="c1">//          This step covers loading the model data from source. Models are</span>
<span class="w">    </span><span class="c1">//          delivered in two different forms, a C file with an array</span>
<span class="w">    </span><span class="c1">//          containing the model source or a separate bin file. If using</span>
<span class="w">    </span><span class="c1">//          the C file, the model source and size are already defined. If</span>
<span class="w">    </span><span class="c1">//          using the bin file, the model source needs to be read into an</span>
<span class="w">    </span><span class="c1">//          array and the length needs to be retrieved.</span>
<span class="w">    </span><span class="c1">// ---- Wake Word ----</span>
<span class="w">        </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">wakewordModel</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="kt">size_t</span><span class="w"> </span><span class="n">wakewordModelSize</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">loadWakewordModel</span><span class="p">(</span><span class="o">&amp;</span><span class="n">wakewordModel</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">wakewordModelSize</span><span class="p">);</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Feature Extraction ----</span>
<span class="w">        </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">featexBlob</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="kt">size_t</span><span class="w"> </span><span class="n">sizeofFeatexBlob</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">loadFeatexConfig</span><span class="p">(</span><span class="o">&amp;</span><span class="n">featexBlob</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sizeofFeatexBlob</span><span class="p">);</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Fingerprinting ----</span>
<span class="w">        </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">fingerprintList</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="kt">size_t</span><span class="w"> </span><span class="n">sizeofFingerprintList</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">loadFingerprintList</span><span class="p">(</span><span class="o">&amp;</span><span class="n">fingerprintList</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sizeofFingerprintList</span><span class="p">);</span><span class="w"></span>

<span class="w">    </span><span class="c1">// STEP 1.2 - Configure engine</span>
<span class="w">    </span><span class="c1">//          PryonLiteV2Config contains initialization-time configuration</span>
<span class="w">    </span><span class="c1">//          parameters. Each feature to be enabled must be configured</span>
<span class="w">    </span><span class="c1">//          individually and then hooked to the top level engine</span>
<span class="w">    </span><span class="c1">//          configuration. For each feature use the _Default macro to set</span>
<span class="w">    </span><span class="c1">//          up the initial values of the configuration structure. There are</span>
<span class="w">    </span><span class="c1">//          required fields which must be modified from their default</span>
<span class="w">    </span><span class="c1">//          values; see the example below.</span>
<span class="w">        </span><span class="n">PryonLiteV2Config</span><span class="w"> </span><span class="n">engineConfig</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">};</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Wake Word ----</span>
<span class="w">        </span><span class="n">PryonLiteWakewordConfig</span><span class="w"> </span><span class="n">wakewordConfig</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PryonLiteWakewordConfig_Default</span><span class="p">;</span><span class="w"></span>

<span class="w">        </span><span class="c1">// Required fields: model, sizeofModel loaded in STEP 1</span>
<span class="w">        </span><span class="n">wakewordConfig</span><span class="p">.</span><span class="n">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wakewordModel</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">wakewordConfig</span><span class="p">.</span><span class="n">sizeofModel</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wakewordModelSize</span><span class="p">;</span><span class="w"></span>

<span class="w">        </span><span class="c1">// Optional fields: VAD Configuration</span>
<span class="w">        </span><span class="c1">//                  Enabling will use VAD in the wake word engine.</span>
<span class="w">        </span><span class="n">PryonLiteVadConfig</span><span class="w"> </span><span class="n">vadConfig</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">PryonLiteEnergyDetectionConfig</span><span class="w"> </span><span class="n">energyDetection</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">vadConfig</span><span class="p">.</span><span class="n">energyDetection</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">energyDetection</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">wakewordConfig</span><span class="p">.</span><span class="n">vadConfig</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">vadConfig</span><span class="p">;</span><span class="w"></span>

<span class="w">        </span><span class="n">energyDetection</span><span class="p">.</span><span class="n">enableGate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// disable voice activity detection energy detection based gate, set to 1 to enable</span>

<span class="w">        </span><span class="c1">// Required: Link the wake word configuration to the engine configuration</span>
<span class="w">        </span><span class="n">engineConfig</span><span class="p">.</span><span class="n">ww</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">wakewordConfig</span><span class="p">;</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Feature Extraction ----</span>
<span class="w">        </span><span class="n">PryonLiteFeatexConfig</span><span class="w"> </span><span class="n">featexConfig</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PryonLiteFeatexConfig_Default</span><span class="p">;</span><span class="w"></span>

<span class="w">        </span><span class="c1">// Required fields: blob, sizeofBlob loaded in STEP 1</span>
<span class="w">        </span><span class="n">featexConfig</span><span class="p">.</span><span class="n">blob</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">featexBlob</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">featexConfig</span><span class="p">.</span><span class="n">sizeofBlob</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sizeofFeatexBlob</span><span class="p">;</span><span class="w"></span>

<span class="w">        </span><span class="c1">// Optional fields: useFloatingPointOutput</span>
<span class="w">        </span><span class="c1">//                  Selects either fixed or floating point output in the events</span>
<span class="w">        </span><span class="n">featexConfig</span><span class="p">.</span><span class="n">useFloatingPointOutput</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span><span class="w"> </span><span class="c1">// Return floating point values</span>

<span class="w">        </span><span class="c1">// Required: Link the featex configuration to the engine configuration</span>
<span class="w">        </span><span class="n">engineConfig</span><span class="p">.</span><span class="n">featex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">featexConfig</span><span class="p">;</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Fingerprinting ----</span>
<span class="w">        </span><span class="n">PryonLiteFingerprintConfig</span><span class="w"> </span><span class="n">fingerprintConfig</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PryonLiteFingerprintConfig_Default</span><span class="p">;</span><span class="w"></span>

<span class="w">        </span><span class="c1">// Required fields: fingerprintList, sizeofFingerprintList loaded in STEP 1</span>
<span class="w">        </span><span class="n">fingerprintConfig</span><span class="p">.</span><span class="n">fingerprintList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fingerprintList</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">fingerprintConfig</span><span class="p">.</span><span class="n">sizeofFingerprintList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sizeofFingerprintList</span><span class="p">;</span><span class="w"></span>

<span class="w">        </span><span class="c1">// Required: Disable VAD in the wake word config as it is incompatible with fingerprint match suppression</span>
<span class="w">        </span><span class="n">wakewordConfig</span><span class="p">.</span><span class="n">useVad</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span>

<span class="w">        </span><span class="c1">// Required: Link the fingerprinting configuration to the engine configuration</span>
<span class="w">        </span><span class="n">engineConfig</span><span class="p">.</span><span class="n">fingerprinter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="n">fingerprintConfig</span><span class="p">;</span><span class="w"></span>

<span class="w">    </span><span class="c1">// STEP 1.3 - Enable engine events</span>
<span class="w">    </span><span class="c1">//          PryonLiteV2EventConfig is used to select which events the</span>
<span class="w">    </span><span class="c1">//          engine will pass back to the application layer. Each field in</span>
<span class="w">    </span><span class="c1">//          this structure is a flag that enables or disables the emission</span>
<span class="w">    </span><span class="c1">//          of the event.</span>
<span class="w">        </span><span class="n">PryonLiteV2EventConfig</span><span class="w"> </span><span class="n">engineEventConfig</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">};</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Wake Word ----</span>
<span class="w">        </span><span class="n">engineEventConfig</span><span class="p">.</span><span class="n">enableVadEvent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span><span class="w"> </span><span class="c1">// disable VAD event, set to true to receive VAD events</span>
<span class="w">        </span><span class="n">engineEventConfig</span><span class="p">.</span><span class="n">enableWwEvent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Feature Extraction ----</span>
<span class="w">        </span><span class="n">engineEventConfig</span><span class="p">.</span><span class="n">enableFeatexEvent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">engineEventConfig</span><span class="p">.</span><span class="n">enableVadEvent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span><span class="w"> </span><span class="c1">// disable VAD event, set to true to receive VAD events</span>
<span class="w">    </span><span class="c1">// ---- Fingerprinting ----</span>
<span class="w">        </span><span class="n">engineEventConfig</span><span class="p">.</span><span class="n">enableFingerprintMatchEvent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Wake Word Internal API ----</span>
<span class="w">        </span><span class="n">engineEventConfig</span><span class="p">.</span><span class="n">enableDnnScoreEvent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span><span class="w"></span>


<span class="w">    </span><span class="c1">// STEP 1.4 - Query for configuration specific attributes</span>
<span class="w">    </span><span class="c1">//          The engine initialization requires a buffer be passed in which</span>
<span class="w">    </span><span class="c1">//          is owned by the application layer. This instance memory buffer</span>
<span class="w">    </span><span class="c1">//          must persist for the life of the engine instance. The size of</span>
<span class="w">    </span><span class="c1">//          this buffer is variable, and dependent on the client-specified</span>
<span class="w">    </span><span class="c1">//          configuration. Use PryonLite_GetConfigAttributes to determine</span>
<span class="w">    </span><span class="c1">//          the size of the buffer and other information about the</span>
<span class="w">    </span><span class="c1">//          configuration.</span>
<span class="w">        </span><span class="n">PryonLiteStatus</span><span class="w"> </span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PryonLite_GetConfigAttributes</span><span class="p">(</span><span class="o">&amp;</span><span class="n">engineConfig</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">engineEventConfig</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">configAttributes</span><span class="p">);</span><span class="w"></span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">.</span><span class="n">publicCode</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">PRYON_LITE_ERROR_OK</span><span class="p">)</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="c1">// handle error</span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>

<span class="w">    </span><span class="c1">// ---- Wake Word ----</span>
<span class="w">        </span><span class="c1">// Optional - Sample code showing how to list supported keywords</span>
<span class="w">        </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Supported keywords: &quot;</span><span class="p">);</span><span class="w"></span>
<span class="w">        </span><span class="kt">int</span><span class="w"> </span><span class="n">keyword</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">keyword</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">keyword</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">configAttributes</span><span class="p">.</span><span class="n">wwConfigAttributes</span><span class="p">.</span><span class="n">numKeywords</span><span class="p">;</span><span class="w"> </span><span class="n">keyword</span><span class="o">++</span><span class="p">)</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keyword</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"></span>
<span class="w">            </span><span class="p">{</span><span class="w"></span>
<span class="w">                </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;, &quot;</span><span class="p">);</span><span class="w"></span>
<span class="w">            </span><span class="p">}</span><span class="w"></span>
<span class="w">            </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;%s&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">configAttributes</span><span class="p">.</span><span class="n">wwConfigAttributes</span><span class="p">.</span><span class="n">keywords</span><span class="p">[</span><span class="n">keyword</span><span class="p">]);</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>
<span class="w">        </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;</span>
<span class="s">&quot;);</span>


<span class="w">    </span><span class="c1">// STEP 1.5 - Allocate/Check engine buffer</span>
<span class="w">    </span><span class="c1">//          Once the size of the engine buffer has been determined, the</span>
<span class="w">    </span><span class="c1">//          application layer must create the buffer. This example uses</span>
<span class="w">    </span><span class="c1">//          a statically-defined buffer. If applicable to the device,</span>
<span class="w">    </span><span class="c1">//          this buffer can be dynamically allocated as well, but must</span>
<span class="w">    </span><span class="c1">//          remain allocated for the duration that the engine is in use.</span>
<span class="w">    </span><span class="c1">//          The requirement is that a buffer that is at least</span>
<span class="w">    </span><span class="c1">//          configAttributes.requiredMem size, in bytes, is created.</span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">configAttributes</span><span class="p">.</span><span class="n">requiredMem</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">engineBuffer</span><span class="p">))</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="c1">// handle error</span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>

<span class="w">    </span><span class="c1">// STEP 1.6 - Initialize engine</span>
<span class="w">    </span><span class="c1">//          Pass the engine configuration from STEP 2, event configuration</span>
<span class="w">    </span><span class="c1">//          from STEP 3, and engine buffer from STEP 5 to PryonLite_Initialize</span>
<span class="w">    </span><span class="c1">//          to create an instance of the engine. After this function is</span>
<span class="w">    </span><span class="c1">//          called, the engine instance referenced by sHandle is fully</span>
<span class="w">    </span><span class="c1">//          functional.</span>
<span class="w">        </span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PryonLite_Initialize</span><span class="p">(</span><span class="o">&amp;</span><span class="n">engineConfig</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">sHandle</span><span class="p">,</span><span class="w"> </span><span class="n">handleEvent</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">engineEventConfig</span><span class="p">,</span><span class="w"> </span><span class="n">engineBuffer</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">engineBuffer</span><span class="p">));</span><span class="w"></span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">.</span><span class="n">publicCode</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">PRYON_LITE_ERROR_OK</span><span class="p">)</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="c1">// handle error</span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>

<span class="w">    </span><span class="c1">// STEP 1.7 - Post-init functionality setup</span>
<span class="w">    </span><span class="c1">//          Some functionalities require additional setup steps after the</span>
<span class="w">    </span><span class="c1">//          engine is initialized. If such a step is required for a</span>
<span class="w">    </span><span class="c1">//          functionality it will be implemented here.</span>


<span class="w">    </span><span class="c1">// STEP 1.8 - Optional : Runtime configuration functions</span>
<span class="w">    </span><span class="c1">//          The optional functions below allow for the runtime configuration of</span>
<span class="w">    </span><span class="c1">//          certain aspects of the engine. These functions can be called on</span>
<span class="w">    </span><span class="c1">//          an engine instance any time after a successful PryonLite_Initialize</span>
<span class="w">    </span><span class="c1">//          and before PryonLite_Destroy.</span>
<span class="w">    </span><span class="c1">// ---- Wake Word ----</span>
<span class="w">        </span><span class="c1">// Set detection threshold for all keywords</span>
<span class="w">        </span><span class="kt">int</span><span class="w"> </span><span class="n">detectionThreshold</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">500</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PryonLiteWakeword_SetDetectionThreshold</span><span class="p">(</span><span class="n">sHandle</span><span class="p">.</span><span class="n">ww</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="n">detectionThreshold</span><span class="p">);</span><span class="w"></span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">.</span><span class="n">publicCode</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">PRYON_LITE_ERROR_OK</span><span class="p">)</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="c1">// handle error</span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>


<span class="w">    </span><span class="c1">// End Phase 1 - Initialization</span>

<span class="w">    </span><span class="c1">// Examples - Optional runtime functions</span>
<span class="w">    </span><span class="c1">//            The runtime functions below can be called on an engine</span>
<span class="w">    </span><span class="c1">//            instance any time after a successful PryonLite_Initialize</span>
<span class="w">    </span><span class="c1">//            and before PryonLite_Destroy.</span>
<span class="w">    </span><span class="c1">// ---- General ----</span>
<span class="w">        </span><span class="c1">// Call the set client property API to inform the engine of client state changes</span>
<span class="w">        </span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PryonLite_SetClientProperty</span><span class="p">(</span><span class="o">&amp;</span><span class="n">sHandle</span><span class="p">,</span><span class="w"> </span><span class="n">CLIENT_PROP_GROUP_COMMON</span><span class="p">,</span><span class="w"> </span><span class="n">CLIENT_PROP_COMMON_AUDIO_PLAYBACK</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"></span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">.</span><span class="n">publicCode</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">PRYON_LITE_ERROR_OK</span><span class="p">)</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>
<span class="w">    </span><span class="c1">// ---- Wake Word Internal API ----</span>
<span class="w">        </span><span class="n">PryonLiteInternalWakewordAttributes</span><span class="w"> </span><span class="n">wakewordAttributes</span><span class="p">;</span><span class="w"></span>

<span class="w">        </span><span class="c1">// Fetch model properties</span>
<span class="w">        </span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PryonLiteWakeword_GetWakewordAttributes</span><span class="p">(</span><span class="n">sHandle</span><span class="p">.</span><span class="n">ww</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">wakewordAttributes</span><span class="p">);</span><span class="w"></span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">.</span><span class="n">publicCode</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">PRYON_LITE_ERROR_OK</span><span class="p">)</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>

<span class="w">        </span><span class="c1">// Iterate over all available wakewords</span>
<span class="w">        </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">wakewordAttributes</span><span class="p">.</span><span class="n">numKeywordTargets</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="cm">/*</span>
<span class="cm">            The following properties are available for each wake word</span>
<span class="cm">            wakewordAttributes.target[i].keyword</span>
<span class="cm">            wakewordAttributes.target[i].acceptThreshold</span>
<span class="cm">            wakewordAttributes.target[i].acceptMin</span>
<span class="cm">            wakewordAttributes.target[i].acceptMax</span>
<span class="cm">            wakewordAttributes.target[i].notify</span>
<span class="cm">            */</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>


<span class="w">    </span><span class="c1">// allocate buffer to hold audio samples</span>
<span class="w">    </span><span class="kt">short</span><span class="w"> </span><span class="n">samples</span><span class="p">[</span><span class="n">SAMPLES_PER_FRAME</span><span class="p">];</span><span class="w"></span>

<span class="w">    </span><span class="c1">// run engine</span>
<span class="w">    </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"></span>
<span class="w">    </span><span class="p">{</span><span class="w"></span>
<span class="w">        </span><span class="c1">// Start Phase 2 - Audio Processing</span>
<span class="w">        </span><span class="c1">//</span>
<span class="w">        </span><span class="c1">// The audio processing phase is where audio is pushed into an initialized</span>
<span class="w">        </span><span class="c1">// engine instance, and engine events are emitted for handling by</span>
<span class="w">        </span><span class="c1">// registered application/client callbacks.</span>
<span class="w">        </span><span class="c1">//</span>
<span class="w">        </span><span class="c1">// STEP 1 - Gather audio</span>
<span class="w">        </span><span class="c1">//          Audio must be gathered into frames of length</span>
<span class="w">        </span><span class="c1">//          SAMPLES_PER_FRAME before sending to the engine.</span>
<span class="w">        </span><span class="n">readAudio</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span><span class="w"> </span><span class="n">SAMPLES_PER_FRAME</span><span class="p">);</span><span class="w"></span>

<span class="w">        </span><span class="c1">// STEP 2.2 - Push audio to engine</span>
<span class="w">        </span><span class="c1">//          Once the required amount of audio has been gathered, push</span>
<span class="w">        </span><span class="c1">//          the frame into the engine using PushAudioSamples. This</span>
<span class="w">        </span><span class="c1">//          signals the engine to process the audio and invokes callback</span>
<span class="w">        </span><span class="c1">//          functions to pass any resulting events to the client.</span>
<span class="w">        </span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PryonLite_PushAudioSamples</span><span class="p">(</span><span class="o">&amp;</span><span class="n">sHandle</span><span class="p">,</span><span class="w"> </span><span class="n">samples</span><span class="p">,</span><span class="w"> </span><span class="n">SAMPLES_PER_FRAME</span><span class="p">);</span><span class="w"></span>

<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">.</span><span class="n">publicCode</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">PRYON_LITE_ERROR_OK</span><span class="p">)</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="c1">// handle error</span>

<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>

<span class="w">        </span><span class="c1">// STEP 2.3 - Handle engine events</span>
<span class="w">        </span><span class="c1">//          The engine passes back event information to the application</span>
<span class="w">        </span><span class="c1">//          layer through a single callback function passed into</span>
<span class="w">        </span><span class="c1">//          PryonLite_Initialize. The event types emitted depend on the</span>
<span class="w">        </span><span class="c1">//          event configuration setup in Phase 1 Step 3. See the</span>
<span class="w">        </span><span class="c1">//          EventConfig structure definition in the header files for more</span>
<span class="w">        </span><span class="c1">//          information.</span>
<span class="w">        </span><span class="c1">//</span>
<span class="w">        </span><span class="c1">// End Phase 2 - Audio Processing</span>

<span class="w">        </span><span class="c1">// Examples - Optional runtime loop functions</span>
<span class="w">        </span><span class="c1">//            The runtime functions below can be invoked any time</span>
<span class="w">        </span><span class="c1">//            between a successful PryonLite_Initialize and</span>
<span class="w">        </span><span class="c1">//            PryonLite_Destroy. These functions are typically</span>
<span class="w">        </span><span class="c1">//            invoked during the core audio processing loop.</span>


<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">quit</span><span class="p">)</span><span class="w"></span>
<span class="w">        </span><span class="p">{</span><span class="w"></span>
<span class="w">            </span><span class="c1">// Start Phase 3 - Cleanup</span>
<span class="w">            </span><span class="c1">//</span>
<span class="w">            </span><span class="c1">// Cleanup should only occur when the engine is no longer needed</span>
<span class="w">            </span><span class="c1">// This will flush any unprocessed audio that has been</span>
<span class="w">            </span><span class="c1">// pushed and destroy the engine instance.</span>
<span class="w">            </span><span class="c1">//</span>
<span class="w">            </span><span class="c1">// STEP 3.1 - Functionality-specific cleanup</span>
<span class="w">            </span><span class="c1">//          These functionality-specific cleanup functions should</span>
<span class="w">            </span><span class="c1">//          be called before engine cleanup. If this step is</span>
<span class="w">            </span><span class="c1">//          required it will be implemented below.</span>


<span class="w">            </span><span class="c1">// STEP 3.2 - Engine cleanup</span>
<span class="w">            </span><span class="c1">//          This will flush any unprocessed audio that has been</span>
<span class="w">            </span><span class="c1">//          pushed and destroy the engine instance.</span>
<span class="w">            </span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PryonLite_Destroy</span><span class="p">(</span><span class="o">&amp;</span><span class="n">sHandle</span><span class="p">);</span><span class="w"></span>
<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">status</span><span class="p">.</span><span class="n">publicCode</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">PRYON_LITE_ERROR_OK</span><span class="p">)</span><span class="w"></span>
<span class="w">            </span><span class="p">{</span><span class="w"></span>
<span class="w">                </span><span class="c1">// handle error</span>

<span class="w">                </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span><span class="w"></span>
<span class="w">            </span><span class="p">}</span><span class="w"></span>
<span class="w">            </span><span class="k">break</span><span class="p">;</span><span class="w"></span>

<span class="w">            </span><span class="c1">// End Phase 3 - Cleanup</span>
<span class="w">        </span><span class="p">}</span><span class="w"></span>
<span class="w">    </span><span class="p">}</span><span class="w"></span>

<span class="w">    </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</code></pre></div>
                
              
              
                


              
            </article>
          </div>
        </div>
      </main>
      
        
<footer class="md-footer">
  
    <div class="md-footer-nav">
      <nav class="md-footer-nav__inner md-grid" aria-label="Footer">
        
          <a href="api-sample-v1.html" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
            <div class="md-footer-nav__button md-icon">
              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
            </div>
            <div class="md-footer-nav__title">
              <div class="md-ellipsis">
                <span class="md-footer-nav__direction">
                  Previous
                </span>
                API v1
              </div>
            </div>
          </a>
        
        
          <a href="../release-contents/index.html" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
            <div class="md-footer-nav__title">
              <div class="md-ellipsis">
                <span class="md-footer-nav__direction">
                  Next
                </span>
                Release Contents
              </div>
            </div>
            <div class="md-footer-nav__button md-icon">
              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
            </div>
          </a>
        
      </nav>
    </div>
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-footer-copyright">
        
          <div class="md-footer-copyright__highlight">
            AMAZON CONFIDENTIAL. Copyright &copy; 2021 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
          </div>
        
        Made with
        <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
          Material for MkDocs
        </a>
      </div>
      
    </div>
  </div>
</footer>
      
    </div>
    
      <script src="../../assets/javascripts/vendor.77e55a48.min.js"></script>
      <script src="../../assets/javascripts/bundle.9554a270.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script>
      

<script src="https://unpkg.com/iframe-worker/polyfill"></script>
<script src="../../search/search_index.js"></script>


      <script>
        app = initialize({
          base: "../..",
          features: ['navigation.tabs', 'navigation.expand'],
          search: Object.assign({
            worker: "../../assets/javascripts/worker/search.4ac00218.min.js"
          }, typeof search !== "undefined" && search)
        })
      </script>
      
        <script src="../../resources/javascripts/MathJax.min.js"></script>
      
    
  </body>
</html>