Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    osx-wifi-volume-remotepublic

    Daplie is Taking Back the Internet!

    Stop serving the empire and join the rebel alliance!

    OS X WiFi Volume Remote

    A web-based html5 / node.js app to control OS X system volume from iPhone, Android, etc

    screenshot

    Installation & Usage

    1. Get Node.js

    2. Open Terminal

    3. Install osx-wifi-volume-remote like so

       npm install -g osx-wifi-volume-remote
      
    4. Start the server like so (and note that it shows the name of your computer)

       osx-wifi-volume-server 4040
      
    5. Type the http://<your-computer-name>.local:4040/ whatever onto your phone's browser (NOTE: Your phone or whatever device must be on the same WiFi or ethernet network as your computer)

    6. Enjoy controlling your MacBook's volume over wifi!

    Tunneling outside of your local network

    Use with serve-https to be able to use this with your own domain (i.e. <username>.daplie.me) over the Internet (i.e. your laptop on WiFi and your phone on 3g/4g/LTE).

    npm install --global daplie-tools
    npm install --global serve-https@2.x
     
    git clone https://git.daplie.com/coolaj86/osx-wifi-volume-remote.git

    Register a domain with daplie.me:

    daplie domains:search

    Run the tunnel server

    USER=jane               # or whatever 
    EMAIL=jane@example.com  # or whatever 
     
    serve-https \
      --servername $USER.daplie.me \
      --agree-tos --email $EMAIL \
      --tunnel \
      --express-app osx-wifi-volume-remote/app.js

    Initiate (the very first time) with curl:

    curl "https://$USER.daplie.com"
    

    API Example

    npm install --save osx-wifi-volume-remote
    (function () {
      'use strict';
     
      var applvol = require('osx-wifi-volume-remote')
        ;
     
      // All callbacks have the same arguments
      applvol.get(function (err, volume, muted) {
        console.log('Volume is set to ' + volume + '% and is ' + (muted ? '' : 'not ') + 'muted');
      });
    }());

    API

    • get(cb) read the current volume level and mute status
    • fade(cb, level, duration) specify a volume level to fade to
    • fadeBy(cb, difference, duration) specify a positive or negative difference in volume to fade to
    • mute(cb, duration) fades to 0, mutes, then restores volume while muted
    • unmute(cb, duration) sets volume to 0, unmutes, then fades back in to volume level
    • set(cb, level) hard set a volume without fading
    • all callbacks have the arguments err, volume, muted

    NOTE: The callbacks all must come first (it was just easier to write the code that way).

    Development

    If you want to develop, here's the clone and build process:

    git clone https://git.daplie.com/coolaj86/osx-wifi-volume-remote.git
    pushd osx-wifi-volume-remote
     
    npm install -g jade
    jade browser/index.jade; mv browser/index.html public/
     
    npm install
    node app 4040

    AppleScript

    I had to learn a bit of AppleScript to get this all together. I'll give the gist of it below an you can also read the article on my blog.

    # Check volume level and mute status 
    osascript -e "output volume of (get volume settings) & output muted of (get volume settings)"
     
    # Mute 
    osascript -e "set volume with output muted"
     
    # Unmute 
    osascript -e "set volume without output muted"
     
    # Mute status 
    osascript -e "output muted of (get volume settings)"
     
    # Set volume by 100ths 
    osascript -e "set volume output volume 51 --100%"
     
    # Set to 0% without muting (the secret lowest possible setting) 
    osascript -e "set volume without output muted output volume 0 --100%"
     
    # Set to non-0 without unmuting 
    osascript -e "set volume with output muted output volume 42 --100%"
     
    # Decrement the current volume by 1 
    osascript -e "set volume output volume (output volume of (get volume settings) - 1) --100%"

    It turns out that AppleScript takes about 80ms to start up and run, so for the fade I actually create a file with the whole loop unrolled and it looks like this:

    set volume without output muted output volume 18 --100%
    delay 0.033
    set volume without output muted output volume 17 --100%
    delay 0.033
    set volume without output muted output volume 16 --100%

    install

    npm i osx-wifi-volume-remote

    Downloadsweekly downloads

    7

    version

    1.0.4

    license

    (MIT or Apache2)

    repository

    githubgit

    last publish

    collaborators

    • avatar