soundcontrol
Version:
Control and manage desktop audio players in Mac OSX
97 lines (75 loc) • 2.38 kB
JavaScript
(function(){
var exec = require('child_process').exec;
var paused = false;
var apps = [
'iTunes',
'spotify',
'rdio',
'pandora'
];
var sc = {
version: '0.1.3'
};
/* public methods */
sc.isPlaying = function(app, callback) {
exec("osascript -e 'tell application \""+ app +"\" to player state as string'", function(err,stdout,stderr){
if (stdout.trim() == "playing") {
paused = app;
callback(err, true);
} else {
callback(err, false);
}
});
};
sc.isSpotifyPlaying = function(callback) {
sc.isPlaying('spotify', callback);
};
sc.isItunesPlaying = function(callback) {
sc.isPlaying('iTunes', callback);
};
sc.isRdioPlaying = function(callback) {
sc.isPlaying('rdio', callback);
};
sc.pause = function(app) {
if (!app) return pauseAll();
exec("osascript -e 'tell application \""+ app +"\" to pause';");
paused = app;
};
sc.stop = sc.pause;
sc.play = function(app) {
exec("osascript -e 'tell application \""+ app +"\" to play';");
};
sc.resume = function() {
if (paused) {
sc.play(paused);
paused = false;
}
};
sc.nextTrack = function(app) {
if (app == 'iTunes') {
exec("osascript -e 'tell application \""+ app +"\" to next track';");
}
};
sc.previousTrack = function(app) {
if (app == 'iTunes') {
exec("osascript -e 'tell application \""+ app +"\" to previous track';");
}
};
/* private methods */
var pauseAll = function() {
apps.forEach(function(app){
isAppOpenMac(app, function(err, open){
if (!open) return;
sc.isPlaying(app, function(err, playing){
if (playing) sc.pause(app);
});
});
});
};
var isAppOpenMac = function(app, callback) {
exec("osascript -e 'application \""+ app +"\" is running';", function(err,stdout,stderr){
callback(err, stdout.trim() == "true");
});
};
module.exports = sc;
})();