airtunes
Version:
an AirTunes v2 implementation: stream wirelessly to audio devices.
73 lines (53 loc) • 1.68 kB
JavaScript
var Stream = require('stream'),
util = require('util'),
devices = require('./devices.js'),
circularBuffer = require('./circular_buffer.js'),
audioOut = require('./audio_out.js');
function AirTunes() {
var self = this;
Stream.call(this);
devices.init();
devices.on('status', function(key, status, desc) {
self.emit('device', key, status, desc);
});
circularBuffer.on('status', function(status) {
self.emit('buffer', status);
});
audioOut.init(devices);
circularBuffer.on('drain', function() {
self.emit('drain');
});
circularBuffer.on('error', function(err) {
self.emit('error', err);
});
this.writable = true;
}
util.inherits(AirTunes, Stream);
AirTunes.prototype.add = function(host, options) {
return devices.add('airtunes', host, options);
};
AirTunes.prototype.addCoreAudio = function(options) {
return devices.add('coreaudio', null, options);
};
AirTunes.prototype.stopAll = function(cb) {
devices.stopAll(cb);
};
AirTunes.prototype.setVolume = function(deviceKey, volume, callback) {
devices.setVolume(deviceKey, volume, callback);
};
AirTunes.prototype.setTrackInfo = function(deviceKey, name, artist, album, callback) {
devices.setTrackInfo(deviceKey, name, artist, album, callback);
};
AirTunes.prototype.reset = function() {
circularBuffer.reset();
};
AirTunes.prototype.setArtwork = function(deviceKey, art, contentType, callback) {
devices.setArtwork(deviceKey, art, contentType, callback);
};
AirTunes.prototype.write = function(data) {
return circularBuffer.write(data);
};
AirTunes.prototype.end = function() {
circularBuffer.end();
};
module.exports = new AirTunes();