Skip to content

🗣️ npm library for speech detection in Electron apps using SoX binaries

License

Notifications You must be signed in to change notification settings

nathanjzhao/electron-audio-record

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

electron-audio-record

This module is an extension of node-record-lpcm16 to include binaries for ease of usage in Electron apps. Depending on demand, may explore implementing hot word detect given Snowboy's deprecation. This library records audio only using SoX, so there is no extra video data overhead during processing.

Records a 16-bit signed-integer linear pulse modulation code WAV audio file. These audio files are fully compatible with both the @google-cloud/speech and the Wit.ai Speech API.

Note: For MacOS, must enable permissions for utilizing audio devices. Additionally, should asarUnpack this package within node_modules so that the binaries are accessible to the app in Electron.

Installation

npm install electron-audio-record

Dependencies

None. Feel free to remove certain binaries in bin/ according to platforms that your app will be used on.

Options

sampleRate            : 16000  // audio sample rate
channels              : 1      // number of channels
threshold             : 0.5    // silence threshold (rec only)
endOnSilence          : false  // automatically end on silence (if supported)
thresholdStart        : null   // silence threshold to start recording, overrides threshold (rec only)
thresholdEnd          : null   // silence threshold to end recording, overrides threshold (rec only)
silence               : '1.0'  // seconds of silence before ending
device                : null   // recording device (e.g.: 'plughw:1')
audioType             : 'wav'  // audio type to record

Usage

const recorder = require('electron-audio-record')
const fs = require('fs')

const file = fs.createWriteStream('test.wav', { encoding: 'binary' })

recorder.record({
  sampleRate: 44100
})
.stream()
.pipe(file)

You can pause, resume and stop the recording manually.

const recorder = require('electron-audio-record')
const fs = require('fs')

const file = fs.createWriteStream('test.wav', { encoding: 'binary' })

const recording = recorder.record()
recording.stream().pipe(file)

// Pause recording after one second
setTimeout(() => {
  recording.pause()
}, 1000)

// Resume another second later
setTimeout(() => {
  recording.resume()
}, 2000)

// Stop recording after three seconds
setTimeout(() => {
  recording.stop()
}, 3000)

Error handling

Some recorders might be logging errors to stderr and throw an exit code. You can catch early termination by adding an error event listener to the stream.

To debug the recorder see debugging below.

recording.stream()
  .on('error', err => {
    console.error('recorder threw an error:', err)
  })
  .pipe(file)

Debugging

Debug logging is implemented with visionmedia/debug

DEBUG=record node examples/file.js

Example

Here's how you can write your own Siri in just 10 lines of code.

const recorder = require('electron-audio-record')
const request = require('request')

const witToken = process.env.WIT_TOKEN // get one from wit.ai!

function parseResult (err, resp, body) {
  if (err) console.error(err)
  console.log(body)
}

const recording = recorder.record()

recording
  .stream()
  .pipe(request.post({
    'url': 'https://api.wit.ai/speech?client=chromium&lang=en-us&output=json',
    'headers': {
      'Accept': 'application/vnd.wit.20160202+json',
      'Authorization': `Bearer ${witToken}`,
      'Content-Type': 'audio/wav'
    }
  }, parseResult))

setTimeout(() => {
  recording.stop()
}, 3000) // Stop after three seconds of recording

About

🗣️ npm library for speech detection in Electron apps using SoX binaries

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published