| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A stream wrapper around SoX. Transcode audio streams easily!
The other implementations I found felt klunky to use. This module implements a streaming interface. (If you don't know how to use streams, I recommend reading the stream handbook.)
Simple transcode:
var sox = require('sox-stream')
var fs = require('fs')
fs.createReadStream('song.wav')
.pipe( sox({ output: { type: 'flac' } }) )
.pipe( fs.createWriteStream('song.flac') )Lower volume:
var sox = require('sox-stream')
var fs = require('fs')
var src = fs.createReadStream('song.flac')
var lowerVolume = sox({ input: { volume: 0.8 }, output: { type: flac }})
var dest = fs.createWriteStream('song2.flac')
src.pipe(lowerVolume).pipe(dest)Transcode with options and error handling:
var sox = require('sox-stream')
var fs = require('fs')
var src = fs.createReadStream('song.ogg')
var transcode = sox({
output: {
bits: 16,
rate: 44100,
channels: 2,
type: 'wav'
}
})
var dest = fs.createWriteStream('song.wav')
src.pipe(transcode).pipe(dest)
transcode.on('error', function (err) {
console.log('oh no! ' + err.message)
})var sox = require('sox-stream')An object of options. Every option is optional except options.output.type is required.
If you want an exhaustive list of each SoX option in depth, take a look at the SoX documentation.
Internally, these options are transformed into the command-line arguments passed to a SoX child process.
You can supply an array of strings/numbers, or an object that will be transformed into an array of strings/numbers using hash-to-array.
Currently, sox-stream only supports one input file, so some of these options don't really make sense.
| Command(s) | Functionality |
|---|---|
| { buffer: BYTES } | Set the size of all processing buffers (default 8192) |
| { combine: 'concatenate' } | Concatenate all input files (default for sox, rec) |
| { combine: 'sequence' } | Sequence all input files (default for play) |
| '-m', { m: true }, { combine: 'mix' } | Mix multiple input files (instead of concatenating) |
| { combine: 'mix-power' } | Mix to equal power (instead of concatenating) |
| '-M', { M: true }, { combine: 'merge' } | Merge multiple input files (instead of concatenating) |
| '-T', { T: true }, { combine: 'multiply' } | Multiply samples of corresponding channels from all input files (instead of concatenating) |
| '-D', { D: true }, { 'no-dither': true } | Don't dither automatically |
| { 'effects-file': FILENAME } | File containing effects and options |
| '-G', { G: true }, { guard: true } | Use temporary files to guard against clipping |
| { input-buffer: BYTES } | Override the input buffer size (default: same as --buffer; 8192) |
| '--norm', { norm: true } | Guard (see --guard) & normalise |
| { play-rate-arg: ARG } | Default rate argument for auto-resample with `play' |
| { plot: 'gnuplot', 'octave' } | Generate script to plot response of filter effect |
| { 'replay-gain': 'track', 'album', 'off' } | Default: 'off' (sox, rec), track (play) |
| '-R', { R: true } | Use default random numbers (same on each run of SoX) |
| '--single-threaded', { 'single-threaded': true } | Disable parallel effects channels processing |
| { temp: DIRECTORY } | Specify the directory to use for temporary files |
var transform = sox({
global: {
buffer: 4096,
norm: true,
'single-threaded': true
},
output: { type: 'ogg' }
})You can supply an array of strings/numbers, or an object that will be transformed into an array of strings/numbers using hash-to-array.
| Input | Output | Command(s) | Functionality |
|---|---|---|---|
| ✓ | X | { v: FACTOR }, { volume: FACTOR } | Input file volume adjustment factor (Floating point number between 0 and 1) |
| ✓ | X | { ignore-length: true } | Ignore input file length given in header; read to EOF |
| ✓ | ✓ | { t: FILETYPE }, { type: FILETYPE } | Audio file type. E.g. 'wav', 'ogg' |
| ✓ | ✓ | { e: ENCODING }, { encoding: ENCODING } | ENCODING can be 'signed-integer', 'unsigned-integer', 'floating-point', 'mu-law', 'a-law', 'ima-adpcm', 'ms-adpcm', or 'gsm-full-rate' |
| ✓ | ✓ | '-b', { b: BITS }, { bits: BITS } | Encoded sample size in bits, A.K.A. the bit depth. E.g. 16, 24. (Not applicable to complex encodings such as MP3 or GSM.) |
| ✓ | ✓ | '-N', { N: true }, { 'reverse-nibbles': true } | Encoded nibble-order |
| ✓ | ✓ | '-X', { X: true }, { 'reverse-bits': true } | Encoded bit-order |
| ✓ | ✓ | '-L', { endian: 'little' }, { L: true } | Encoded byte-order: Little endian |
| ✓ | ✓ | '-B', { endian: 'big' }, { B: true } | Encoded byte-order: Big endian |
| ✓ | ✓ | '-x', { endian: 'swap' }, { x: true } | Encoded byte-order: swap means opposite to default |
| ✓ | ✓ | { c: CHANNELS }, { channels: CHANNELS } | Number of channels of audio data. E.g. 2 for stereo |
| ✓ | ✓ | '--no-glob', { 'no-glob': true } | Don't `glob' wildcard match the following filename |
| ✓ | ✓ | { r: RATE }, { rate: RATE } | Sample rate of audio. E.g. 44100, 48000 |
| X | ✓ | { C: FACTOR }, { compression: FACTOR } | Compression factor. (Might be bitrate, depending on the file type.) See SoX format docs for more info. |
| X | ✓ | { 'add-comment': TEXT } | Append output file comment |
| X | ✓ | { comment: TEXT } | Specify comment text for the output file |
| X | ✓ | { 'comment-file': FILENAME } | File containing comment text for the output file |
var transform = sox({
input: [
[ '--volume', 1.1 ],
[ '--endian', 'big' ],
[ '--no-glob' ]
],
output: { type: 'ogg' }
})
// same as
var transform = sox({
input: {
volume: 1.1,
endian: 'big',
'no-glob': true
],
output: [
'--type', 'ogg'
]
})
// same as
var transform = sox({
input: '--volume 1.1 --endian big --no-glob',
output: '--type ogg'
})Please see the SoX Documentation on Effects to see all the options.
Pass them into sox-stream like this:
var transform = sox({
input: { type: 'ogg' },
output: { type: 'wav' },
effects: 'speed 1.5 swap'
// same as
effects: [
'speed 1.5 swap'
]
// same as
effects: [
'speed', 1.5,
'swap'
]
// same as
effects: [
[ 'speed', '1.5' ],
'swap'
]
})To run the tests, you must have SoX in your PATH. Then run: npm test
I run the tests using SoX 14.4.2, but other versions of SoX should work as well.
| Back | FazBrowse Home | New Git URL |