• Stars
    star
    174
  • Rank 214,526 (Top 5 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 11 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

`Reader` and `Writer` streams for Microsoft WAVE audio files

node-wav

Reader and Writer streams for Microsoft WAVE audio files

Build Status

This module offers streams to help work with Microsoft WAVE files.

Installation

Install through npm:

$ npm install wav

Example

Here's how you would play a standard PCM WAVE file out of the speakers using node-wav and node-speaker:

var fs = require('fs');
var wav = require('wav');
var Speaker = require('speaker');

var file = fs.createReadStream('track01.wav');
var reader = new wav.Reader();

// the "format" event gets emitted at the end of the WAVE header
reader.on('format', function (format) {

  // the WAVE header is stripped from the output of the reader
  reader.pipe(new Speaker(format));
});

// pipe the WAVE file to the Reader instance
file.pipe(reader);

API

Reader()

The Reader class accepts a WAV audio file written to it and outputs the raw audio data with the WAV header stripped (most of the time, PCM audio data will be output, depending on the audioFormat property).

A "format" event gets emitted after the WAV header has been parsed.

Writer(options)

The Writer class accepts raw audio data written to it (only PCM audio data is currently supported), and outputs a WAV file with a valid WAVE header at the beginning specifying the formatting information of the audio stream.

Note that there's an interesting problem, because the WAVE header also specifies the total byte length of the audio data in the file, and there's no way that we can know this ahead of time. Therefore the WAVE header will contain a byte-length if 0 initially, which most WAVE decoders will know means to just read until EOF.

Optionally, if you are in a situation where you can seek back to the beginning of the destination of the WAVE file (like writing to a regular file, for example), then you may listen for the "header" event which will be emitted after all the data has been written, and you can go back and rewrite the new header with proper audio byte length into the beginning of the destination (though if your destination is a regular file, you should use the the FileWriter class instead).

Default options:

{
  "channels": 2,
  "sampleRate": 44100,
  "bitDepth": 16
}

FileWriter(path, options)

The FileWriter class is, essentially, a combination of fs.createWriteStream() and the above Writer() class, except it automatically corrects the header after the file is written. Options are passed to both Writer() and fs.createWriteStream().

Example usage with mic:

var FileWriter = require('wav').FileWriter;
var mic = require('mic'); // requires arecord or sox, see https://www.npmjs.com/package/mic

var micInstance = mic({
  rate: '16000',
  channels: '1',
  debug: true
});

var micInputStream = micInstance.getAudioStream();

var outputFileStream = new FileWriter('./test.wav', {
  sampleRate: 16000,
  channels: 1
});

micInputStream.pipe(outputFileStream);

micInstance.start();

setTimeout(function() {
  micInstance.stop();
}, 5000);

More Repositories

1

Java-WebSocket

A barebones WebSocket client and server implementation written in 100% Java.
Java
10,340
star
2

NodObjC

The Node.js ⇆ Objective-C bridge
JavaScript
1,396
star
3

proxy-agents

Node.js HTTP Proxy Agents Monorepo
TypeScript
866
star
4

node-spotify-web

Node.js implementation of the Spotify Web protocol
JavaScript
695
star
5

node-speaker

Output PCM audio data to the speakers
JavaScript
634
star
6

ansi-canvas

Render a <canvas> node to your terminal
JavaScript
578
star
7

node-lame

Node.js native bindings to libmp3lame & libmpg123
C++
561
star
8

plist.js

Mac OS X Plist parser/builder for Node.js and browsers
JavaScript
496
star
9

ref

Turn Buffer instances into "pointers"
JavaScript
449
star
10

node-bindings

Helper module for loading your native module's `.node` file
JavaScript
394
star
11

node-time

"time.h" bindings for Node.js
JavaScript
377
star
12

node-applescript

A Node.js module to easily execute arbitrary AppleScript code on Mac OS X.
JavaScript
375
star
13

keypress

Make any Node ReadableStream emit "keypress" events
JavaScript
352
star
14

node-socks-proxy-agent

A SOCKS (v4/v5) proxy `http.Agent` implementation for HTTP and HTTPS
333
star
15

ansi.js

Advanced ANSI formatting tool for Node.js
JavaScript
315
star
16

node-icy

Node.js module for parsing and/or injecting ICY metadata
JavaScript
288
star
17

node-proxy-agent

Maps proxy protocols to `http.Agent` implementations
282
star
18

node-iOS

Native node bindings to iOS functionality (vibrate, acceleromoter, geoservices, etc.)
C++
265
star
19

proxy

An HTTP proxy written with Node.js (think Squid)
254
star
20

gnode

Run node with ES6 Generators, today!
JavaScript
247
star
21

node-throttle

Node.js Transform stream that passes data through at `n` bytes per second
JavaScript
179
star
22

superagent-proxy

`Request#proxy(uri)` superagent extension
JavaScript
154
star
23

nx.js

JavaScript runtime for Nintendo Switch homebrew applications
C++
131
star
24

node-nat-pmp

Node.js implementation of the NAT Port Mapping Protocol
JavaScript
129
star
25

node-http-proxy-agent

An HTTP(s) proxy `http.Agent` implementation for HTTP endpoints
128
star
26

ref-struct

Create ABI-compliant "struct" instances on top of Buffers
JavaScript
118
star
27

node-cgi

An http/stack/connect layer to invoke and serve CGI executables.
Perl
100
star
28

nTunes

A REST (HTTP) API for interacting with iTunes written in NodeJS.
JavaScript
95
star
29

node-modbus-stack

A `StreamStack` implementation of the MODBUS protocol, for NodeJS.
JavaScript
87
star
30

node-data-uri-to-buffer

Generate a Buffer instance from a Data URI string
86
star
31

node-telnet

Telnet implementation for Node.js
JavaScript
84
star
32

node-upnp-client

UPnP Library for NodeJS.
JavaScript
69
star
33

spotify-uri

Parse and format the various Spotify URI formats
JavaScript
66
star
34

node-ogg

Node.js native binding to libogg
JavaScript
65
star
35

node-pac-proxy-agent

A PAC file proxy `http.Agent` implementation for HTTP and HTTPS
58
star
36

node-agent-base

Turn a function into an `http.Agent` instance
58
star
37

NodeFloyd

An Icecast-compatible server written in NodeJS that streams non-stop "Pink Floyd"!
JavaScript
54
star
38

ref-array

Create C "array" instances on top of Buffers
JavaScript
53
star
39

node-pac-resolver

Generates an asynchronous resolver function from a PAC file
53
star
40

node-get-uri

Returns a `stream.Readable` from a URI string
49
star
41

stat-mode

Offers convenient getters and setters for the fs.stat()'s `mode`
TypeScript
48
star
42

node-gitweb

Directly invoke and serve GitWeb through NodeJS.
JavaScript
40
star
43

util-deprecate

The Node.js `util.deprecate()` function with browser support
JavaScript
37
star
44

ttys

Guaranteed read and write streams to the terminal
JavaScript
36
star
45

blessed-css

CSS engine for `blessed`
TypeScript
35
star
46

node-flv

FLV media container file format encoder and decoder
JavaScript
34
star
47

click-outside

The inverse of the DOM "click" event
HTML
34
star
48

n8.io-old

my blog (deployed to DigitalOcean)
JavaScript
32
star
49

node-drone-joystick

Control AR.Drones using any SDL-compatible Joystick (PS3 Sixaxis, etc.)
JavaScript
31
star
50

SandboxJS

JavaScript "Sandboxes" for the web browser.
JavaScript
31
star
51

node-stream-parser

Generic interruptible "parser" mixin for Transform & Writable streams
JavaScript
29
star
52

node-vorbis

Node.js native binding to libvorbis
JavaScript
28
star
53

node-iTunes

A native node interface to interact with an iTunes process.
C++
28
star
54

node-elf-logger

A Node.js library for configurable HTTP logging following the W3C Extended Log File Format
JavaScript
28
star
55

file-uri-to-path

Convert a `file:` URI to a file path
JavaScript
27
star
56

node-function-name

Set the "name" property of `Function` objects
JavaScript
27
star
57

node-stream-stack

Filter low-level `Stream` instances into stackable, protocol-based streams.
JavaScript
27
star
58

switch-tools

Web app to create "NSP forwarders" for your modded Nintendo Switch
TypeScript
27
star
59

node-buffer-dataview

Minimal DataView implementation that works with Node.js Buffers
JavaScript
26
star
60

node-dlopen

Native bindings to libuv's uv_dlopen() and friends
JavaScript
26
star
61

Simple-Game-Framework

An object-oriented JavaScript API to develop simple, shape and sprite based games.
JavaScript
25
star
62

rocker

Remote Docker: docker -H ssh://[email protected] run -p 80:80 nginx
Shell
23
star
63

once

Creates a Promise that waits for a single event
TypeScript
23
star
64

node-amf

"Action Message Format" read() and write() functions for Buffers
JavaScript
22
star
65

iheart

iHeart Radio JavaScript API
JavaScript
22
star
66

SoundJS

A cross-browser JavaScript sound loading, playing and layering library primarily designed for browser-based games to have a multi-layering sound API.
Haxe
22
star
67

pcre-to-regexp

Converts PCRE regexp strings to JavaScript RegExp instances
JavaScript
21
star
68

node-ctypes

Node.js implementation of "ctypes" to interface with C libs
JavaScript
20
star
69

node-degenerator

Turns sync functions into async functions
19
star
70

node-function-class

Easy `Function` subclasses
JavaScript
19
star
71

nightscout-ps1

Renders your latest blood glucose reading from Nightscout in the command line
JavaScript
19
star
72

nightscout-ps1-c

Tiny C program that formats your latest Nightscout BGL reading for use in your terminal prompt (a.k.a $PS1)
C
18
star
73

ar-drone-socket.io-proxy

Proxy AR.Drone UDP messages over a Socket.io HTTP connection
JavaScript
17
star
74

dotfiles

My dotfiles and such...
Vim Script
17
star
75

path-array

Treat your $PATH like a JavaScript Array
JavaScript
17
star
76

node-drone-video

Dump AR.Drone h264 video streams with matching metadata video. Splicing/editing is left up to you.
JavaScript
16
star
77

RetroPie-Profiles

RetroPie plugin to create profiles for save files and save states
Shell
15
star
78

ref-union

Create ABI-compliant "union" instances on top of Buffers
JavaScript
15
star
79

babel-plugin-transform-dirname-filename

Babel plugin that rewrites `__dirname` and `__filename` to static values
JavaScript
15
star
80

mpg123.js

Decode MP3s in the browser using libmpg123 compiled with emscripten
JavaScript
15
star
81

react-tela

Use React to render images, shapes and text to `<canvas>`
TypeScript
15
star
82

s3fs

Implementation of NodeJS FS interface using Amazon Simple Storage Service (S3).
JavaScript
14
star
83

array-index

Invoke getter/setter functions on array-like objects
JavaScript
14
star
84

node-gitProvider

An http/connect/stack layer to serve the contents of a 'git' repository over HTTP.
JavaScript
14
star
85

n8-make

Opinionated Makefile to build ES6 JS, JSX and Pug files
Makefile
13
star
86

ref-wchar

A ref "type" implementation of `wchar_t *` (a.k.a. wide string) backed by "node-iconv"
JavaScript
13
star
87

nTunesAnywhere

A mobile WebApp to stream your iTunes library from anywhere (using nTunes and jo)!
JavaScript
12
star
88

node-dlfcn

Native bindings to the dynamic shared library linker (dlfcn)
JavaScript
11
star
89

dexcom-share

Async Iterator API for reading blood glucose readings from Dexcom's Share servers
TypeScript
10
star
90

ModuleJS

Asynchronous CommonJS-like Module Loader for web-browsers.
JavaScript
10
star
91

node-objc

This module is deprecated in favor of NodObjC. Use that instead.
C++
9
star
92

vercel-dev-builder

Meta-runtime for Vecel that makes developing Runtimes easier
TypeScript
9
star
93

create

The missing Native.create() functions that ECMA forgot.
JavaScript
9
star
94

nexec

Execute a remote command over HTTP
JavaScript
9
star
95

ansi-hash

Get an ANSI color code for a given string
JavaScript
8
star
96

node-http-stack

A `StreamStack` implementation of the HTTP protocol, for NodeJS.
JavaScript
8
star
97

node-mail-stack

A `StreamStack` subclass that parses raw e-mail messages.
JavaScript
8
star
98

browserify-single-file

Runs browserify transforms/plugins on a single file. Useful for make pipeline tasks.
JavaScript
8
star
99

node-autoreleasepool

A very simple wrapper around the OS X NSAutoreleasePool, for NodeJS
C++
7
star
100

require-string

Turns an arbitrary String into a CommonJS compatible module
JavaScript
7
star