Smartskills

'MediaServer' Skill Help


MediaServer currently supports 129 different spoken intents that address practically everything that can be done with LMS to control music playback and more.

On Alexa-enabled devices with touchscreens (such as the Echo Show family), all commands provide persistent visual feedback using Amazon's APL to either display Cover Art and Metadata extracted from your music's tags, or to visualize the spoken response:

Most responses include touchable control elements which facilitate making further selections using touch after kicking things off with an initial voice command.

In addition to controlling your Squeezeboxes, MediaServer can use the /stream.mp3 endpoint in LMS to stream audio to your Echo. Ephemeral 'AlexaPlayers' appear in the LMS GUI or iPeng for each Echo during streaming. Favorites can be streamed losslessly to your Echo when they address a https URL that identifies as flac.

Before you can use the skill (or its sister Smart Home skill LMS-Lite) you will have to take steps to make your LMS server externally accessible — your Echo may sit inside your LAN, but the Amazon cloud service that it relies on does not. Amazon requires https connections for all skills and it also makes sense to add authentication. We have a special installer you can download to handle this automatically in less than 5 minutes. The how-to is in the Easy Setup tab.

In a word, excellently! A few pointers:

MediaServer uses fuzzy matching extensively in querying LMS, but if your tags are missing, inconsistent, (very) badly-spelled or just plain wrong, there's not much it can do to help. In the end, it's all about your tags !

Remember, the fuzziness is in the skill's code and not in LMS itself (unfortunately) — it can only do its magic if a queried LMS returns something for it to wade through.

Not unexpectedly, Alexa can't get around homophones — words that sound the same but are spelled differently. Think of ate/eight, flour/flower, bare/bear, cell/sell, brothers/bros. If you ask to play a song by the 'Knight Sons' and Alexa thinks that's spelled as 'Night Suns', it will never match your library. Cropped words in tags can also be an issue — e.g. a library search for 'Tru Colors' would find 'True Colors', but not vice versa.

If a query for an item doesn't match, reducing specificity can help. For example, try 'Allman Brothers' vs 'The Allman Brothers Band' or 'Alabama' vs 'Sweet Home Alabama'.

If a search fails, adding context can help. If you ask to play 'Abacab' and it's wrongly spelled as 'Abakab' in your tags, LMS will not return it. However, if you also specify that the artist is Genesis, the skill can fuzzy-match through all your Genesis albums (because LMS will return results for that) and still find Abacab. Without that extra clue, there would never be a match.

During its first run (and also whenever you use the Discover command), the skill retrieves the names of your players from your LMS server(s).

In MediaServer's code, the {Player} slot association in all intents is of the built-in type AMAZON.Room. This biases Alexa towards an understanding of a room name when what you said was not clear enough for outright comprehension. However, this is just a guideline and basically any player name should work. Do yourself a favor though and if you notice that Alexa keeps asking you to repeat the name of a particular player, just rename it for simplicity's sake.

Note that you can freely use the word player in your utterances if you like — you can also mix the use of "in the", "on" and "on the". Commands such as Play the album Mylo Xyloto in the 'Kitchen' and Play the album Mylo Xyloto on the 'Kitchen' player are fully interchangeable.

Using the Rename command it's possible to rename players to something other than the name reported by LMS. This only affects the name used in the skill, not the name known to the server or e.g. iPeng/Material. Re-doing player discovery will offer to revert any renamed players back to their LMS original names.

The skill recognizes Group Players if you have that plugin installed and will mention during discovery how many players it found in that category. Note that the name everything is reserved by the skill to assemble synchronization groups with all your players — it's therefore better not to have your own Group Player called "everything".

Finally, any player names ending in an asterisk (e.g. "Spare*") will be deliberately skipped during discovery.

MediaServer is a so-called custom skill, meaning it has to be invoked using the skill name in your utterance. Given that Alexa herself can play music sourced from e.g. Spotify or Amazon Music directly on an Echo's speaker, you omit the name at your peril !

Some different and freely interchangeable ways of invoking the skill include:

  • Alexa, ask MediaServer to play the album 'Phaedra'
  • Alexa, tell MediaServer to play the album 'Abacab'
  • Alexa, open MediaServer and play some Jazz
  • Alexa, launch MediaServer and set the volume to 70
  • Alexa, start MediaServer and cancel repeat mode
  • Alexa, next track using MediaServer
  • Alexa, get what's playing from MediaServer
Notice the above example commands don't have a squeezebox name in the utterance. That's because they use an implicit player[1] which is a squeezebox that's permanently associated with the Echo in question. You set it up like this:

  • Alexa, tell MediaServer to assume the 'Kitchen' player[1]
You can query the current association by saying "Alexa, get the assumed player from MediaServer".

You can also tell e.g. the Kitchen Echo that "I'm within earshot of the Livingroom Echo". Subsequently, when you issue a command in the open area between your Livingroom and Kitchen Echos, you don't have to worry which Echo actually hears you and assumes the player to target. The skill will check which of the two players is actually playing a song and react accordingly. If both players happen to be playing, normal 1:1 association applies.


[1] This step only exists to make using the 'Play' commands easier. 'Stream' commands always target the Echo you are speaking to.

There are two basic ways to invoke any custom skill: one-shot and session.

With a so-called one-shot, the skill handles a single intent and exits upon completion. An example would be "Alexa, ask MediaServer to play the album Abacab". The music starts, Alexa will tell you that the first track is called 'Abacab', and the skill exits (blue ring off). Great for issuing a single command with no fuss.

A session is started by issuing a so-called LaunchRequest to fire up the skill in an interactive mode. For example, "Alexa, open MediaServer" or "Alexa, start MediaServer". Alexa will greet you with "…say a MediaServer command" and listen for an intent. After each intent is handled, Alexa will repeatedly ask a variant of "… what else?" and keep the session open (the blue ring stays on). You can issue as many back-to-back commands as you like until you terminate by saying one of no, stop, cancel, shut-up, never mind, forget it, or that's it. You can also simply ignore her until she beeps and the blue ring goes off. An example volley might be:

 Alexa, open MediaServer
 Say a MediaServer command
 Play the album Abacab
 The album Abacab, by Genesis, is now playing on the KITCHEN player.What else?
 Increase the volume by 20
 Volume is now 65.Anything else?
 Disable shuffle by song
 OK.Anything further?
 Goto track 4
 Now playing track 4 of 9 total. It's "Keep it Dark", by Genesis.Anything else?
 No
 Goodbye

Note that you can interrupt Alexa's response during a session (e.g. because the answer is rather long) by just saying "Alexa…" and then issuing a new MediaServer command immediately, such as "…what's playing?" or "…track 5". This will break in on her current speech but keep the session open for a new MediaServer command .

Important: Whenever APL is being displayed on the screen of an Echo Show, the session is subsequently held open — even if you actually issued a one-shot command. However, unlike a deliberately-launched session following a LaunchRequest, the microphone is closed (there's no blue bar at the bottom of your screen). To issue a follow-up command while APL is still showing on your screen, you should omit the invocation name and just start the command with "Alexa, …" (to open the microphone) instead of "Alexa, tell MediaServer to…". The hints showing at the bottom of a now-playing screen reflect this syntax and serve to jog your memory. To close this persistent APL-induced session, say either "Alexa, Exit" or "Alexa, Home Screen".

Observe that using any 'Stream' intents will close the session as it does not make sense to continually interrupt music playback on the Echo with a volley of commands.

The stream commands in the skill are made possible by the inclusion of the AudioPlayer interface which natively supports a number of built-in intents. What this means is that any of Play, Resume, Pause, Stop, StartOver, Cancel, Next, Previous, Shuffle, Shuffle Off, Loop, Loop Off can be used without using the skill's invocation name of 'MediaServer'. In other words, when Streaming you can just say "Alexa, pause" instead of having to say "Alexa, tell MediaServer to pause".

This can catch you off guard when controlling regular Squeezebox players instead of the AlexaPlayer. The trick is to either include the player name with the command, or to append 'playback' or 'track' where that makes sense. Explicitly:

  • Start playback
  • Resume Touch
  • Stop playback
  • Stop Touch
  • Pause playback
  • Pause Boom
  • Next track
  • Previous track

Otherwise, the AlexaPlayer will be targeted !

It's better to avoid using the word "stop" when you just want to silence Alexa after a misunderstanding — say "cancel" or "exit" instead. That way, you won't accidentally stop audio playback.

If you'd prefer bare-bones setup instructions without explanation, see here.

LMS pre-dates the cloud era[1] and was never designed to be controlled from outside your home. Luckily we can install a separate piece of software called a proxy to facilitate ultra-secure access for Alexa.

If you have any install-related questions then you can ask them at the slimdevices forum here.

Our easy-setup procedure deploys a free proxy called ngrok, with no need to open any router ports or worry about a certificate for SSL. When completed, your LMS will be reachable via its own password-protected URL like https://70c663eee228.eu.ngrok.io.

The skill communicates through a so-called tunnel with 'your' ngrok, which in turn interacts with LMS:

  Alexa  ⇆  [443/https]  ⇆  ngrok  ⇆  [9000/http]  ⇆  LMS  

There are actually two components to ngrok — a cloud service and a program we'll install on one of your computers. The ngrok cloud service provides the internet-facing URL that Alexa or a browser 'sees'. Incoming requests to this service are sent down the secure tunnel to your local program which is always 'listening'. It 'knows' to relay all incoming requests onwards to your LMS server because it's configured accordingly. Responses from LMS simply follow the reverse path back up to the internet-facing ngrok cloud service where Alexa or the browser receives them. It's all lightning fast and adds no perceivable delay to your enjoyment of the skill(s).

With this approach[2], cloud control is password-protected while local control within your LAN remains completely unrestricted. You should therefore not set a password in the LMS settings when using our skills.


[1] SliMP3 dates from 2001. Logitech stopped development of LMS in 2012.

[2] You don't have to use this procedure to link the skill(s). If your LMS is already exposed via a https reverse-proxy, this can be used as-is. Should you prefer manual setup, see section Ⅵ here.

Visit the ngrok.com website (no affiliation) for an explanation of how it works and what plans are available. The free plan[1] works just fine for our purposes so go ahead and Sign Up.

Note that at no stage in the easy-setup process will you be asked for the login particulars for your ngrok account. The username and password you will later choose to protect your tunnel are a different concept. The former protect your ngrok account while the latter protect remote access to LMS. If you have difficulty managing multiple passwords, by all means choose Login with Google when signing up for ngrok.

You should make a note of your personal authtoken which resides at https://dashboard.ngrok.com/auth/your-authtoken. It will look something like 4nq9771bPxe8ctg7LKr_2ClH7Y15Zqe4bWLWF9p.

Please ignore any download/setup instructions at the ngrok website as they are geared towards setting up access to a web-server on port 80 rather than a media server like LMS on 9000.

Our installer will automatically download the correct binary version of ngrok for your system and also pre-configure it for operation with LMS.

Make sure you respond to the ngrok verification-email before continuing with running the setup script as otherwise you will encounter errors!


[1] A drawback of the free plan is that your assigned ngrok-URL (deliberately) changes every time ngrok restarts. However, our easy-setup installer includes an updater-script to push your new tunnel details off to the skill(s) when that happens.

Screenshot of the configurator landing page form

Visit our secure[1] configurator landing page to download your personalized easy-install script. You can do this on any platform and it does not have to be the machine LMS or ngrok runs on.

Please stay within a single browser tab during the entire setup process, as otherwise your browser's localStorage cannot perform its magic.

On the web-form, provide the following 7 pieces of information:

  •  Target platform / operating system[2] under which ngrok will run. If you cannot remember if your Linux distro is 32-bit or 64-bit, the result of uname -mpi will enlighten you. For example, ARMv7 is 32-bit while ARMv8 is 64.
  •  Region. To minimize latency, ngrok will use a cloud server physically near you. You can choose one of us eu ap au sa jp in.
  •  Authtoken. Paste the personal authtoken you copied after ngrok sign-up (e.g. 4nq9771bPxe8ctg7LKr_2ClH7Y15Zqe4bWLWF9p) or else click the yellow -icon button to visit your ngrok dashboard in the cloud and retrieve it.
  •  Pick a username to associate with your tunnel to prevent unauthorized access to LMS. It must be at least 4 characters and may not contain spaces or |.
  •  Pick a password[3] to associate with your tunnel to prevent unauthorized access to LMS. It must be at least 8 characters and may not contain spaces or |.
  •  The local fixed IP address used to access LMS inside your LAN. For example, http://192.168.1.10:9000. You may omit the http prefix but not the 9000.
  •  A nickname[4] by which to refer to the tunnel — defaults to lmstunnel if left blank.

When all the entries are completed, press the large yellow Download Script button and the script file will be saved by your browser.

Your browser may warn that files sourced from the internet are potentially harmful — it does this based on the .sh or .ps1 file extension, not the actual file contents. Some browsers or antivirus software may even change the extension of the saved file to .txt to render it 'harmless'. If that happens you will need to manually rename with the correct extension before running it. Remember, because the script file is ascii, you can easily check its contents in any text editor.


[1] All data is transported over SSL and is AES-256 encrypted at rest.

[2] For Max2Play, choose Linux 32 or 64 bit. Windows 10 and 11 are supported as-is — earlier versions may work if your system's PowerShell is v5.1 or greater.

[3] The password you choose for your tunnel is stored in plain-text in ngrok's .yml file on your machine. It's probably wise not to re-use a password you use elsewhere.

[4] You only need to change the nickname if you have multiple LMS servers and therefore multiple instances of ngrok in parallel use. You'll never encounter the nickname otherwise.

Follow only the appropriate instructions for your platform or operating system — pCP, Linux, macOS, or Windows:


piCorePlayer
Make sure that the LMS server under pCP is already installed and running when you attempt this.

  • Open a terminal. Place[1] the downloaded file setup.sh in your /home/tc directory.
  • Run it using sh setup.sh

Installs ngrok as a persistent tcz package and adds it to onboot.lst. It also builds a file called ~/.config/ngrok/ngrok.yml with your configuration details. An entry in /opt/bootlocal.sh ensures ngrok_startup.sh runs at system boot to continually refresh your tunnel details when you reboot.


Debian Linuxes
Applies to any Debian-based distro which supports systemd services and bash scripting. Examples include Raspberry Pi OS, Ubuntu, Debian and Max2Play.

  • Open a terminal. Place[1] the downloaded file setup.sh in your home directory, e.g. /home/pi.
  • Run it using sudo bash setup.sh

If your target machine is a pi there's one more important step to ensure the OS waits for the network to come up at boot time. Issue the command sudo raspi-config. Choose System Options and then S6 Network at Boot and choose <Yes>.

If something does not work and you are wondering if your fetched ngrok binary is the correct version for your architecture, type which ngrok and then use the file command on the result, e.g. file /usr/local/bin/ngrok. The output will include something like ELF 64-bit LSB executable, x86-64 or ELF 64-bit LSB executable, ARM aarch64.

Installs ngrok to /usr/local/bin/ngrok and creates a service file /etc/systemd/system/ngrok.service to run ngrok as a daemon at boot. It also builds a file called ~/.config/ngrok/ngrok.yml with your configuration. Finally, it creates the ~/ngrok_updater.sh auto-updater file that refreshes your tunnel details when you reboot.


macOS
Place the downloaded setup.sh script in your normal Downloadsfolder.

  • In the Finder, open the Applications folder and then Utilities. Double-click on Terminal to pop open a terminal.
  • Inside the terminal window, typecd ~/Downloads
  • Run the installer using sudo /bin/bash setup.sh (you will need to type your mac password to authorize).

Installs ngrok to /usr/local/bin/ngrok and creates a launchd file /Library/LaunchDaemons/com.ngrok.onstartup.plist to run ngrok as a daemon at boot. It also builds a file called /usr/local/bin/.config/ngrok/ngrok.yml with your configuration. Finally, it creates the /usr/local/bin/ngrok_updater.sh auto-updater file that refreshes your tunnel details when you reboot.


Windows

  • Right-click on the downloaded PowerShell file setup.ps1 in your downloads folder and select the option to Run with PowerShell. If that is not allowed on your PC, see the comments in the file for a simple fix.

Installs ngrok to c:\ngrok and creates a config file called %HOMEPATH%\AppData\Local\ngrok\ngrok.yml. In c:\ngrok, you'll see ngrok_autostart.ps1 and a wrapper ngrok_autostart.cmd. A shortcut to that .cmd file is added to Windows' startup apps folder (usually %HOMEPATH%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup).


[1] If the target system is headless, use ssh or scp via e.g. filezilla, winscp or putty to transfer the script file across.

When the setup script finished, you were told that ngrok started a tunnel with a URL like e.g. https://70c663eee228.eu.ngrok.io (yours will be different of course).

You can easily verify that your tunnel works correctly by visiting this URL from a browser (enter your chosen credentials in the popup). You should see the familiar 9000 LMS default skin (notice the which you don't see inside your LAN).

You have 2 choices for how to perform account-linking:

  • With App-to-App linking, you will be redirected to log in to your Amazon account[1] and authorize/allow Alexa access to the skill in question. The correct language version for your locale will be automatically selected. After you have successfully run the installer script, follow these links: [ → MediaServer | LMS-lite | Playground | Squeeze ][2].

  • If you prefer, you can link the skill(s) manually from the Alexa web-portal using a PC or mac (from within the Alexa app on a mobile device usually works but can sometimes fail without a clear error message). See the instructions here.

If you installed LMS-lite, you can now say "Alexa, discover devices". In the case of MediaServer, say "Alexa, open MediaServer". That's it — enjoy the skill(s)!


Hints

Make sure to keep a safe copy of the installer script so that you can re-install ngrok with the same uuid should the need arise. That way, there will be no need to re-link the skill(s).

For MediaServer, verify that LAME is installed on your system if you intend to use any of the stream commands. You can find information on how to do that here.


[1] The skill(s) should be linked with you logged in as the main user in an Amazon family account. Make sure that FreeTime for Kids is not blocking commands from any Echos you intend to use with the skill(s).

[2] If the links won't unblock, it's probably just a localStorage issue (your uuid is unretrievable). Try forced-refreshing the page (e.g. hit ctrl-F5 in Chrome). Alternatively, close the browser and then re-open it at this page. The links should then be active.

If you have any unanswered questions then you can ask them at the slimdevices forum threads for Mediaserver or for LMS-lite.

localStorage

Notice you didn't create an account with smartskills.tech. Each visitor to our configurator is assigned a random uuid which is stored in your browser's localStorage cache so that you don't have to copy/paste as you move from step to step in the overall setup-process. For security purposes, localStorage is domain-specific and even protected across different browser tabs of the same site. That's why you need to perform all steps in the same browser and in the same tab. If you don't, you'll be seen as a new visitor and served up a fresh uuid so where you are in the overall process will be lost.


ngrok tunnel or auth invalid

The golden rule is — think before you re-link! It's almost never necessary.

The updater-script is run whenever you restart your machine but if something goes wrong then you sometimes have to run it manually to recover. Open a terminal and run:

  • On pCP, sh ~/ngrok_startup.sh
  • On Debian, /bin/bash ~/ngrok_updater.sh
  • On macOS, /bin/bash /usr/local/bin/ngrok_updater.sh
  • On Windows, double-click on C:\ngrok\ngrok_autostart.cmd

ngrok 108 error

On the free plan, ngrok can only be run on a single machine in your local LAN. If it's already running and you start a second instance, you'll receive a 108 error. If you need to run ngrok with the same authtoken in a different (remote) LAN, you can select a different region code for the second instance as a workaround. If you need multiple tunnels in the same LAN, up to 4 can all be run from the same ngrok instance by adding extra tunnel entries to the .yml file. Do it this way rather than trying to run multiple instances of ngrok itself. The legacy help has an example. For a full list of ngrok errors, see here.


ngrok status

From any machine in your local network, you can watch what the background ngrok process is doing by browsing to the IP address of the ngrok host machine on port 4040, e.g. http://192.168.1.8:4040 or http://localhost:4040. The status tab there will show you the ngrok subdomain assigned to your tunnel.

Alternatively, you can login to your ngrok online dashboard and see your assigned tunnel at https://dashboard.ngrok.com/status/tunnels.


No audio using Stream commands

The /stream.mp3 endpoint in LMS requires non-mp3 formats to be transcoded to mp3 for streaming. LMS does this under the hood but it does rely on your system having the LAME encoder utility installed. If you notice that non-mp3 sources produce no sound while streaming, make sure that you have it installed. You can find information on how to do that here.


Windows Server — Run-as-Service

The easy-setup Windows installation procedure runs ngrok in a windowless process. If you'd prefer to run ngrok as a service that will survive logouts, do the following. You will need to use a program that can create services from regular .exe files. An example of a free program that does this is NSSM (Non-Sucking Service Manager). Download NSSM and place its exe in the same directory as ngrok. Open a cmd or Powershell terminal and cd into the same directory as your nssm.exe. Run the following command:

nssm.exe install ngrok

select the ngrok executable in the window that appears and add the following to the arguments:

start --all --config=%HOMEPATH%\AppData\Local\ngrok\ngrok.yml

then press 'Install service'. The service can now be managed from service manager. Start it here or alternatively open a cmd as administrator and run the following:

sc start ngrok


uuid reset

If for whatever reason you want to reset your uuid to start an install with a clean slate, click on the tiny symbol in the info-banner on the configuration page.

When Amazon confirms that your skill was successfully linked, launch it by saying "Alexa, open MediaServer". On a first-time run, it will automatically attempt to connect to your server(s) and discover your Squeezebox players. If that fails, the error message should be pretty descriptive. If using ngrok, check its 4040 status page.

If the discovery was successful, Alexa will tell you what players she found. Congrats! That list will include any hardware, software or bridged-players (AirPlay, Chromecast, Group, DLNA) visible within LMS. You won't see any AlexaPlayers (Echos) mentioned as they are ephemeral and only appear in LMS when actively streaming something.

The first thing you should try out is associating an 'assumed' Squeezebox player to each of your Echos[1]. Go around to each Echo in your house and say "Alexa, tell MediaServer to assume the [squeezebox-name-here] player". If you only have one player, it will always be automatically assumed for all commands, even if you have multiple Echos. If you have many players but only one Echo, still assign a nearest-player as assumed for the Echo.[2]

Supposing you have a Squeezebox called e.g. Livingroom, try saying "Alexa, get the 'Livingroom' player status using MediaServer" to any Echo. If all is well, she'll tell you several things about what state that player is currently in. Next, try saying "Alexa, ask MediaServer what's playing?" without saying the player name and verify that the response reflects the assumed player's activity.

Note that it's a design principle of MediaServer that you always mention a word describing the library category (song, album, favorite, playlist or genre) in each spoken command requesting playback/streaming. If you were simply to say e.g. "Play Abacab", how would Alexa know to target the whole Album called Abacab or just the track Abacab? Or a favorite called Abacab Radio that you're abbreviating? By requiring that you specify the category in the intent, MediaServer avoids disappointing you unnecessarily.

Now go and check out the Example Commands tab to start enjoying MediaServer fully !


[1] This step only exists to make using the 'Play' commands easier. 'Stream' commands always target the Echo you are speaking to even without knowing what you called it. In fact — to protect your privacy — skills don't have permission to retrieve the name you provided to your Echo in the Alexa app (they are only assigned a 'deviceId').

[2] If you link the skill to multiple LMS servers then you must assign assumed players. Otherwise, Alexa does not know which of your servers the command applies to.

On Echos with screens, this summary is shown when you say "Alexa, ask MediaServer for Help"

Album
  • Play the album 'Phaedra'
  • Play the album 'Ghost Stories' by Coldplay
  • Play the compilation[1] 'American Road Trip'
  • Play the single[2] 'Flight 643 (CDM)'
  • Play the single[2] 'Sunny Days' by Armin van Buuren
  • Play a random album by Steve Winwood
  • Play a random single[2] by Madonna
  • What Paul Young albums do I have?
  • What Sheryl Crow singles[2] do I have?
  • List my new[3] albums
  • Search[4] new albums for ZZ Top
  • Play my most recent Pearl Jam album
  • Tee up[5] the album 'Erotica' by Madonna
  • What albums contain 'Roxanne' by The Police?
Song
  • Play the song[6] 'Dancing in the Dark'
  • Play the song[6] 'Chasing Cars' by Snow Patrol
  • Play the track[6] 'Sussudio' by Phil Collins
  • Play the tune[6] 'Nine Tonight' by Bob Seger
  • Play early[7] Bruce Springsteen
  • Play recent[8] Adele
  • Play songs from 1984
  • Play the track 'Run Like Hell' from the album 'Pulse'
  • Play the 'Live & Dangerous' rendition of 'The Boys are Back in Town'
  • Play something by The Corrs
  • Play songs by The Cure
  • Play songs about 'Girls'
  • Play songs featuring Eddie Vedder
  • Play index 3[9] from 'The Wall'
  • Append[10] 'Solsbury Hill' by Peter Gabriel
  • Add[10] 'Mr. Blue Sky' by ELO
  • Insert[11] 'Cradle of Love' from the album 'Charmed Life'
  • Append[10] 'High Hopes' from the album 'The Division Bell'
  • Add[10] 'Legs' from the album 'Eliminator'
  • List the songs on 'The Wall' by Pink Floyd
Genre
  • Play some[12] Classic Rock
  • Play some[12] Christmas music
  • Play some[12] Jazz tracks
  • Give me some[12] Oldies
  • What genres do I have?
Playlist
  • Play my 'Supperclub' playlist
  • Play a random playlist
  • Load the 'Oldies' playlist
  • Add this track to my 'Fitness' playlist
  • Bookmark this track
  • Blacklist this song
  • Clear the current playlist
  • Fetch[13] my 'Christmas Songs' playlist
  • Fetch[13] the 'Joe Rogan Experience' podcast
  • What playlists do I have?
Favorites
  • Play favorite 'JAZZ FM'
  • List my favorites
  • List level 2 favorites
  • List the favorites in folder 'Podcasts'
  • Play favorite number 3
  • Play my fourth favorite
  • Play favorite 'Podcasts' item 7
  • Play favorite folder 'Audiobooks' item 12
  • Play favorite 3 . 2 . 5 [dot]
Query
  • What's playing?
  • What's coming next?
  • What's the duration of this song?
  • What's the 'Bedroom' player status?
  • List my new[3] albums
  • Search[4] new items for Alanis Morissette
  • Do I have 'Dark Side of the Moon'?
  • Do I have 'Giants' by Chicane?
  • Check if I have '101 Driving Songs'
  • What players do I have?
  • List known sync groups
  • List my playlists
  • List known genres
  • List my Chris Rea albums
  • List any singles[2] by Roxette
  • List the songs on 'Rumors' by Fleetwood Mac
  • Which albums contain 'Roxanne' by The Police?
Follow Me
  • Follow me to the 'Lounge'
  • Transfer playback from 'Livingroom' to 'Study'
  • Transpose 'Kitchen' player and 'Garage' player
Synchronize/Groups
  • Synchronize the 'Bedroom', 'Bathroom', 'Office' and 'Nursery' players
  • Synchronize everything
  • Include the 'Guestroom' player in the group
  • Remove 'Library' player from the group
  • Cancel synchronization
  • List known sync groups
Sleep
  • Sleep the 'Bedroom' player in 8 mins 30 seconds
  • Sleep this player after the current song
  • Cancel sleep mode for the 'Livingroom' player
Alarms
  • What alarms do I have on the 'Bedroom' player?
  • Enable my 7 AM alarm
  • Cancel my 7:30 AM alarm
  • Change my 7 AM alarm to 8:30 AM
Player Control
  • Start playback in the 'Bedroom'
  • Resume 'Kitchen'
  • Pause 'Bedroom'
  • Stop 'Livingroom'
  • Next Track
  • Previous Track
  • Goto track 12
  • Skip ahead 2 minutes
  • Skip back 44 seconds
  • Seek directly to 17 minutes and 12 seconds
  • Set the volume to 60
  • Increase the volume by 10
  • Decrease the volume by 25
  • Mute the 'Livingroom' player
  • Unmute the 'Kitchen'
  • Turn On the 'Library' player
  • Power Off 'Bedroom'
  • Power Down everything
  • Turn On shuffle
  • Shuffle again
  • Enable shuffle-by-album on the 'Kitchen' player
  • Enable shuffle-by-song for the 'Bedroom' player
  • Deactivate shuffle
  • Enable / Disable Repeat
  • Turn On repeat-playlist mode
  • Enable repeat-song mode
  • Deactivate repeat for the 'Basement' player
  • Rename 'Touch' player 'Bedroom' player
  • Discover my players
  • Assume the 'Livingroom' player
  • I'm within earshot of 'Diningroom'
  • Enable / Disable artwork display
Play Music on Echo (Stream)[14]
  • Stream the album 'Listen Without Prejudice'
  • Stream the album 'Parachutes' by Coldplay
  • Stream the compilation[1] '101 Running Songs'
  • Stream the single[2] 'Generate (CDM)'
  • Stream the single[2] 'Alone Tonight' by Above & Beyond
  • Stream my newest album by Peter Gabriel
  • Stream the song[6] 'Rosalie'
  • Stream the song[6] 'Chocolate' by Snow Patrol
  • Stream the track 'Sledgehammer' from the album 'So'
  • Stream early[7] Coldplay
  • Stream recent[8] London Grammar
  • Stream songs from 1976
  • Stream the 'Plastic Letters' rendition of 'Denis'
  • Stream something by The Police
  • Stream songs about 'Alabama'
  • Stream songs featuring ATB
  • Stream index 7[9] from 'Musique' by Daft Punk
  • Stream a random album by Pink Floyd
  • Stream a random single[2] by Shakira
  • Stream some[12] Alternative Rock
  • Stream favorite number 7
  • Stream favorite 'FUNK FM'
  • Stream my 'Ambient' playlist
  • Stream a random playlist
  • Stream favorite 'Podcasts' item 3
  • Stream favorite folder 'Audiobooks' item 4
  • Stream favorite 2 . 4 . 2 [dot]
  • No invocation-name required for: Resume, Continue, Pause, Stop, Cancel, StartOver, Restart, Start Again, Next, Skip, Skip Forward, Previous, Go Back, Back Up, Skip Back, Shuffle, Shuffle Off, Stop Shuffling, Loop, Loop Off
General
  • Help
  • Display
  • Repeat
  • Say that Again
  • Never Mind
  • Forget It
  • Exit
  • Yes
  • No
  • No Thanks
  • What's new?


[1] A compilation is defined as an album with the albumartist or band tag being one of Various, Various Artists, VA or V.A. (case-insensitive).

[2] A single is any album with the term CDS or CDM in the Album tag (brackets are ok).

[3] Lists the 10 latest albums scanned to your library.

[4] If the search item is found among the latest 100 additions scanned to you library, Alexa will offer to play it for you. If more than one item matches, you get to choose one.

[5] The Tee Up syntax is used to append an entire album to the end of the now-playing playlist. It's basically an 'Append' but that word is reserved for appending a song.

[6] This will enqueue one each of all the uniquely-named versions of that song from all albums that contain it, with the oldest (by year) version having the shortest name queued to play first. To limit playback to a specific version of the song from a named album, use the rendition or the from-the-album variant of the command instead. If your Echo has a screen, you'll see the unqueued versions at the bottom of the screen and can tap one if you want it to play.

[7] 'Early' enqueues songs from the first half of an artist's oeuvre, based on the year tag.

[8] 'Recent' enqueues songs from the second half of an artist's oeuvre, based on the year tag.

[9] 'Index' enqueues the entire album in question but jumps immediately to the requested index. The rest of the album will continue to play after that track.

[10] The item is added to the end of the currently-playing playlist.

[11] The item is inserted into the current playlist and will play next, pushing other tracks down the list.

[12] Some always specifies a genre. Use something (by) to enqueue tracks by a named artist.

[13] Fetch targets a Spotify playlist or podcast specifically (when e.g. you have a local playlist with the same name but want the Spotify one).

[14] Note that your Echo devices will not show in the LMS GUI until you first start a stream by voice. They will also disappear again from the GUI when the stream ends. While available in the GUI, if you change the now-playing track other than by voice, saying "Alexa, Resume" will immediately activate the new track. If you don't say this, you will have to wait for the Echo's buffer to empty before the change will take effect.

With LMS-lite enabled, your Squeezeboxes become part of Amazon's smart home paradigm and show up as a device in the Alexa app, meaning they can be included in a group with other smart home devices and used in a routine to do clever things like switch an amplifier on/off together with a Squeezebox or automatically start music playback whenever you enter a room.

Once you account link the skill successfully, you just say "Alexa, discover devices" (this should also be done any time you add, delete or change a player name in LMS). Because of how smart home skills work, you may not be told if any devices were found — rest assured they will nevertheless show up in the Alexa app when opened.

During discovery, your player names are untouched by the skill and reported as-is to Alexa (except for removing disallowed characters). If you have unwieldy names like Onkyo-XTR672VMK, you might want to edit/change them in the Alexa app because you cannot abbreviate player names much when issuing commands.

Once a player name has been mentioned in any of the commands, it persists until a different player is mentioned (or some other music-playing skill is launched) from that particular Echo. This means you can omit the name in the next command(s) addressing the same player. Each Echo has its own persisted Squeezebox too, so remember that fact if you move to another room and issue a name-free command there. If in doubt, always mention the player name in the command.

The available categories of command, with invocation examples are:

Power
  • Alexa, power ON 'Livingroom'
  • Alexa, power OFF the 'Bedroom' Player
  • Alexa, turn ON the 'Touch'
  • Alexa, turn OFF the 'Library' Player
Volume
  • Alexa, set 'Kitchen' volume to 70
  • Alexa, volume 20 on 'Touch'
  • Alexa, increase the 'Bedroom' Player volume by 10
  • Alexa, pump up the volume
  • Alexa, pump it up
  • Alexa, louder
  • Alexa, make it louder
  • Alexa, louder please
  • Alexa, quieter
  • Alexa, tone it down
  • Alexa, lower the volume
  • Alexa, decrease the volume by 20
  • Alexa, mute the Livingroom Player
  • Alexa, unmute Livingroom
Transport
  • Alexa, next track on 'Lounge' Player
  • Alexa, next
  • Alexa, skip this
  • Alexa, previous track on 'Touch'
  • Alexa, previous
  • Alexa, go back
  • Alexa, play on the 'Office' Player
  • Alexa, resume 'Bedroom' Player
  • Alexa, pause
  • Alexa, stop
  • Alexa, rewind[-60 sec]
  • Alexa, fast-forward [+60 sec]
Track Index
  • Alexa, start-over [ → track 1]
  • Alexa, track 7 on 'Kitchen' Player
  • Alexa, song 9 on 'Touch'
  • Alexa, what track is the 'Touch' at?
  • Alexa, what track is the 'Bedroom' Player on?
Favorite/Preset
  • Alexa, favorite 3 on 'Touch'
  • Alexa, preset 1 on the 'Office' Player
Looping [repeat-playlist]
  • Alexa, turn ON 'loop' on 'Kitchen'
  • Alexa, activate 'loop' on 'Bedroom' Player
  • Alexa, turn OFF 'loop' on 'Office' Player
  • Alexa, deactivate 'loop' on 'Squeezeplay'
  • Alexa, is 'loop' ON, on 'PiCorePlayer3'?
Shuffle Play [shuffle-by-song]
  • Alexa, turn ON 'shuffle play' on 'Kitchen'
  • Alexa, activate 'shuffle play' on 'Bedroom' Player
  • Alexa, turn OFF 'shuffle play' on 'Office' Player
  • Alexa, deactivate 'shuffle play' on 'Squeezeplay'
  • Alexa, is 'shuffle play' ON, on 'PiCorePlayer3'?
Repeat Mode
  • Alexa, set 'repeat mode' on 'Livingroom' to 'OFF'
  • Alexa, set 'repeat mode' on 'Kitchen' to 'song'
  • Alexa, set 'repeat mode' on 'Office' Player to 'playlist'
  • Alexa, set 'repeat mode' on 'Bedroom' to 'album'
  • Alexa, what is the repeat mode on 'Bathroom' Player?
Shuffle Mode
  • Alexa, set 'shuffle mode' on 'Kitchen' to 'OFF'
  • Alexa, set 'shuffle mode' on 'Bathroom' to 'song'
  • Alexa, set 'shuffle mode' on 'Study' to 'playlist'
  • Alexa, set 'shuffle mode' on 'Library' to 'album'
  • Alexa, what is the shuffle mode on 'PiCorePlayer3'?

With an Alexa routine, you can have a single trigger send a volley of commands to a player — much like a smart-home 'scene'. A trigger can be a self-defined voice command, time of day, or input from a sensor such as motion/contact/illuminance. Any combination of player Power (on/off), Favorite (#), Loop (on/off), Player Volume (0-100), Preset (#), Repeat Mode (off/song/album), Shuffle Mode (off/song/album), Shuffle Play (on/off) and Track (#) can be assigned to a single trigger. Players can respond differently to multiple triggers.

To control a player in a routine, in the Alexa app select routines and under at the top right, select the add action option. Then, under add new select the  smart home trigger. Under all devices you should see your players distributed alphabetically among all the other devices. If you select one of your players, you will see the options for Power, Favorite, Loop, Player Volume, Repeat Mode, Shuffle Mode, Shuffle Play, Track. Under each of those will be options like on/off or off/track/album, and, for favorite/track/volume, a slider to set a value from 1 to max. You can specify more than one category of these commands and have them all triggered at once when that action runs.

Note that if you have no recognized event triggering devices such as door contacts or motion sensors among the gadgets in your Amazon account, you may not see any devices under actions. In that case, you can still add the players to groups so they at least power on/off with the other devices in the group, although you then have less settings options than in routines.

The skill implements 129 intents, 94 of which are free to use with 35 requiring a subscription. The Command Reference section denotes premium commands with an asterisk after the name, but basically any commands starting with 'Play' fall into this category. Note that the 'Stream' equivalents are free to use.

The activation is handled as an In-Skill Purchase (ISP) which is managed entirely by voice. There is no minimum contract period and subscriptions can be cancelled at any time. Ask "Alexa, how do I enable voice purchasing" for help.

To access premium commands, just say "Alexa, tell MediaServer I want a subscription". She'll explain the applicable pricing structure for your regional Amazon account and ask for a verbal yes/no confirmation (plus your voice PIN code if you enabled that) so you can safely experiment with the ISP process without actually committing.

First-time subscribers can access a free 7-day trial. Thereafter, the credit card associated with your Amazon account will be billed monthly but you can cancel at any time. Just say "Alexa, tell MediaServer I want to cancel my subscription".


Availability in your Region
If you attempt to subscribe but receive a message along the lines of "sorry, this content is not available for purchase in your country…" you can very easily temporarily set your Amazon marketplace for Digital Content (a.k.a. Kindle)[1] to .com (or .co.uk) to enable the skill and then subscribe. Don't worry — you can change it back again when finished, and the subscription stays intact after reverting.

If Alexa does not speak your native language and you'd prefer en-US (or en-GB) as locale setting, then by all means leave it set this way indefinitely. Either way, you can allow your Echos to speak either American or British English at will.

To make the change, go to your 'own' Amazon URL (e.g. amazon.nl) and under Your Account, select Manage your Content and Devices:

Then select Preferences:

and click on Country/Region Settings to fold it out. You'll see:

It's worth clicking on the link 'click here to learn more about other Amazon sites you are eligible to shop on based on your country/region of residence' to see if you're already 'allowed' to set your content-store to .com or .co.uk. If so, you're done already, if not then there's an extra step:

For .com, click the Change button and then under Enter new address type e.g. the particulars of Amazon's HQ at 410 Terry Ave N, Seattle 98109, Washington, USA, phone 206 266 1000 (any valid US address is acceptable and Amazon's helpdesk have confirmed this is allowed):

If you would prefer to target .co.uk, under Enter new address type e.g. the particulars of Amazon's AWS London office at 60 Holbourn Viaduct, London EC1A 2FD, Middlesex, United Kingdom, phone 020 7084 7911 (any valid UK address is acceptable and Amazon's helpdesk have confirmed this is allowed):


After pressing 'Update', you'll see an 'are you sure?' screen like this:

The text sounds a little off-putting but remember that this is only for Digital Content and not regular shopping. You can very easily change things back to the way they were because you won't replace your existing Amazon details with this new address, you'll just add an extra choice and create a new 'bucket' for Digital Content that will co-exist with your 'old' one. Go ahead and select 'Update' and you should see confirmation:

Your changes may trigger a banner message (which you can ignore) about you being able to shop for content on your 'own' local Amazon domain (proof that Amazon still 'knows' you at your own domain):

Note that to change back again, you will need to do so via Manage your Content and Devices at the new Amazon domain and not from your 'own' domain.[2]

When you now go to the Alexa app or web-portal[2], don't panic if you no longer see any installed skills from your 'own' store. They will reappear when you change back (verified). MediaServer will likely not yet be installed at your new domain because you tried it first at your 'own' domain. Search for it at your 'new' store and install — the prior account linking should stay intact but if not then go ahead and link.

Any new attempt at subscribing should now succeed and the subscribed state should survive transitioning back to your 'own' store.


[1] For historical reasons, Amazon still refers to digital content like skills as being in the 'Kindle' (e-book) category.

[2] You may need to log out and back in to your Alexa app/portal for the changes to take effect.