electron-audio-record
v1.0.6
Published
Record a microphone input stream using SoX binaries for Electron apps
Downloads
6
Maintainers
Readme
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