JSPM

wake-word-command

1.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 5
  • Score
    100M100P100Q41068F
  • License MIT

A library for detecting wake words and extracting commands from speech

Package Exports

  • wake-word-command
  • wake-word-command/wake-word-detection.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (wake-word-command) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Wake Word Command

A JavaScript library for wake word detection and command extraction using the Web Speech API.

Table of Contents

Features

  • Wake word detection using the Web Speech API
  • Command extraction after wake word detection
  • Configurable language support
  • Event-based architecture with callbacks
  • TypeScript support
  • Configurable logging levels

Installation

npm install wake-word-command

Usage

import { createWakeWordDetection } from "wake-word-command";

const wakeWordDetection = createWakeWordDetection({
  wakeWord: "hey computer",
  language: "en-US",
  logLevel: "info", // Optional: Set log level (none, error, warn, info, debug, all)
  onWakeWordDetected: () => {
    console.log("Wake word detected!");
  },
  onCommand: (command) => {
    console.log("Command:", command);
  },
  onError: (error) => {
    console.error("Error:", error);
  },
});

// Start listening
wakeWordDetection.start();

// Stop listening
wakeWordDetection.stop();

// Change wake word
wakeWordDetection.setWakeWord("hey assistant");

// Change language
wakeWordDetection.setLanguage("es-ES");

// Change log level
wakeWordDetection.setLogLevel("debug");

Example: Voice-Controlled Todo List

Here's a practical example of using the library to create a voice-controlled todo list:

import { createWakeWordDetection } from "wake-word-command";

// Create a simple todo list UI
const todoList = document.createElement("ul");
document.body.appendChild(todoList);

// Create the wake word detector
const wakeWord = createWakeWordDetection({
  wakeWord: "hey todo",
  onWakeWordDetected: () => {
    // Show a visual indicator that the system is listening
    document.body.classList.add("listening");
  },
  onCommand: (command) => {
    // Remove the listening indicator
    document.body.classList.remove("listening");

    // Process the command
    const cmd = command.toLowerCase();

    if (cmd.includes("add")) {
      // Extract the todo item text
      const itemText = cmd.replace("add", "").trim();
      if (itemText) {
        const li = document.createElement("li");
        li.textContent = itemText;
        todoList.appendChild(li);
      }
    } else if (cmd.includes("remove") || cmd.includes("delete")) {
      // Extract the item number or text to remove
      const itemToRemove = cmd.replace(/remove|delete/, "").trim();
      const items = Array.from(todoList.children);
      const index = parseInt(itemToRemove) - 1;

      if (!isNaN(index) && items[index]) {
        items[index].remove();
      } else {
        // Try to find by text
        const item = items.find((li) =>
          li.textContent.toLowerCase().includes(itemToRemove)
        );
        if (item) item.remove();
      }
    } else if (cmd.includes("clear") || cmd.includes("clear all")) {
      todoList.innerHTML = "";
    }
  },
});

// Add some basic styles
const style = document.createElement("style");
style.textContent = `
  .listening::after {
    content: '🎤 Listening...';
    position: fixed;
    top: 20px;
    right: 20px;
    background: #4CAF50;
    color: white;
    padding: 10px 20px;
    border-radius: 20px;
  }
`;
document.head.appendChild(style);

// Start listening
wakeWord.start();

Try these voice commands:

  • "Hey todo, add buy groceries"
  • "Hey todo, add call mom"
  • "Hey todo, remove 1"
  • "Hey todo, delete buy groceries"
  • "Hey todo, clear all"

API Reference

createWakeWordDetection(options)

Creates a new wake word detection instance.

Parameters

Parameter Type Required Description
options Object Yes Configuration options
options.wakeWord string Yes The wake word to detect
options.language string No Language code (default: 'en-US')
options.logLevel string No The log level for console output
options.onWakeWordDetected Function No Callback when wake word is detected
options.onTranscription Function No Callback with current transcription
options.onCommand Function No Callback with extracted command
options.onCommandTimeout Function No Callback when command timeout occurs
options.onError Function No Callback when an error occurs
options.commandTimeoutMs number No Timeout duration in milliseconds for command detection

Returns

An object with the following methods:

Method Description
start() Start listening for the wake word
stop() Stop listening for the wake word
pause() Pause listening for the wake word
resume() Resume listening for the wake word
setWakeWord(wakeWord) Change the wake word
setLanguage(language) Change the language
setLogLevel(logLevel) Change the log level
isSupported() Check if speech recognition is supported

Example

const wakeWord = createWakeWordDetection({
  wakeWord: "hey assistant",
  language: "en-US",
  logLevel: "info",
  onWakeWordDetected: () => console.log("Wake word detected!"),
  onCommand: (command) => console.log("Command:", command),
});

Callback Functions

onWakeWordDetected()

Called when the wake word is detected. No parameters.

onTranscription(text)

Called with the current transcription as it's being spoken.

  • text (string): The current transcription

onCommand(command)

Called when a complete command is detected.

  • command (string): The extracted command (text after the wake word)

onCommandTimeout()

Called when no command is detected within the timeout period (default: 3 seconds) after the wake word is detected. This indicates that the system is returning to listening for the wake word.

onError(error)

Called when an error occurs.

  • error (string): The error message

Browser Support

This library uses the Web Speech API, which is supported in modern browsers:

  • Chrome (desktop and mobile)
  • Edge
  • Safari (desktop and mobile)

Note: Firefox does not currently support the Web Speech API's speech recognition feature.

License

MIT

Contributing

Contributions are welcome! Please read our Contributing Guidelines for details on our code of conduct and the process for submitting pull requests.