airtunes2
Version:
an AirTunes v2 implementation: stream wirelessly to audio devices.
69 lines (55 loc) • 1.84 kB
JavaScript
var AirTunes = require('../lib/'),
lame = require('lame'),
request = require('request')
spawn = require('child_process').spawn,
argv = require('optimist')
.usage('Usage: $0 --host [host] --port [num] --file [path] --volume [num]')
.default('port', 5002)
.default('volume', 50)
.default('file', './wakeup.mp3')
.demand(['host'])
.argv;
console.log('adding device: ' + argv.host + ':' + argv.port + ' ALL=%j', argv);
var airtunes = new AirTunes();
var device = airtunes.add(argv.host, argv);
// when the device is online, spawn ffmpeg to transcode the file
device.on('status', function(status) {
console.log('status: ' + status);
if(status !== 'ready')
return;
/*var ffmpeg = spawn(argv.ffmpeg, [
'-i', argv.file,
'-f', 's16le', // PCM 16bits, little-endian
'-ar', '44100', // Sampling rate
'-ac', 2, // Stereo
'pipe:1' // Output on stdout
]); //*/
/*var encoder = new lame.Decoder({
// input
bitRate: 128,
sampleRate: 44100,
mode: lame.STEREO, // STEREO (default), JOINTSTEREO, DUALCHANNEL or MONO
// output
channels: 2, // 2 channels (left and right)
bitDepth: 16, // 16-bit samples
sampleRate: 44100, // 44,100 Hz sample rate
}); //*/
request(argv.file)
.pipe(new lame.Decoder)
// .on('format', console.log)
.pipe(airtunes);
});
// monitor buffer events
airtunes.on('buffer', function(status) {
console.log('buffer ' + status);
// after the playback ends, give some time to AirTunes devices
if(status === 'end') {
console.log('playback ended, waiting for AirTunes devices');
setTimeout(function() {
airtunes.stopAll(function() {
console.log('end');
process.exit();
});
}, 2000);
}
});