<liclass="toc-h2 nav-item toc-entry"><aclass="reference internal nav-link"href="#tips-tricks">Tips & Tricks</a><ulclass="nav section-nav flex-column">
<liclass="toc-h3 nav-item toc-entry"><aclass="reference internal nav-link"href="#playing-music-on-multiple-devices">Playing Music on Multiple Devices</a></li>
<liclass="toc-h3 nav-item toc-entry"><aclass="reference internal nav-link"href="#the-skill-appears-to-work-but-no-music-is-played-errors-similar-to-below-appear-in-the-web-service-log">The skill appears to work but no music is played. Errors similar to below appear in the web service log</a></li>
<liclass="toc-h3 nav-item toc-entry"><aclass="reference internal nav-link"href="#the-following-error-is-displayed-when-you-try-to-run-the-docker-container">The following error is displayed when you try to run the Docker container</a></li>
<liclass="toc-h3 nav-item toc-entry"><aclass="reference internal nav-link"href="#you-are-having-trouble-connecting-to-the-skill-and-use-cloudflare">You are having trouble connecting to the skill and use CloudFlare</a></li>
<h1><strong>AskNavidrome Alexa Skill Documentation</strong><aclass="headerlink"href="#asknavidrome-alexa-skill-documentation"title="Link to this heading">#</a></h1>
<p><strong>AskNavidrome</strong> is an Alexa skill which allows you to play music hosted on a SubSonic API compatible media server, like Navidrome.</p>
<p>This allows to you stream your own music collection to your Echo devices without the restrictions you would normally face with regular
streaming services like Amazon Music or Spotify. AskNavidrome allows you to:</p>
<ulclass="simple">
<li><p>Skip backwards and forwards in your current queue or playlist without limitation.</p></li>
<li><p>Avoid paying subscription costs.</p></li>
<li><p>Avoid being forced to listen to adverts at regular intervals.</p></li>
<li><p>Actually use the music collection you have already paid for!</p></li>
<li><p>Run the service on a PC directly or inside a Docker container.</p></li>
</ul>
<p>This skill was inspired by <aclass="reference external"href="https://github.com/srichter/asksonic">AskSonic</a>, however AskSonic was missing two features I required,
the ability to play playlists and the ability to play an individual song. Instead of contributing to that project I have opted to
create a new skill based on the <strong>Alexa Skills Kit SDK for Python</strong> as this has been updated more recently than <em>flask-ask</em> which is used
by AskSonic, AskNavidrome is not a replacement for AskSonic and it does not implement all of AskSonic’s features, it is however a viable
alternative for those that would like a simple skill to let you stream your own music collection.</p>
<divclass="admonition warning">
<pclass="admonition-title">Warning</p>
<p>The skill requires a username and password for your Navidrome installation which is stored in clear text. As the web service needs to be
publicly accessible there is a chance that this password could be compromised. Please do not use an administrative account for your
Navidrome installation or a password that you use on any other service. This software is distributed under the MIT license and no warranty
<p>In order to use AskNavidrome you will need:</p>
<p><strong>Your Music Collection</strong></p>
<p>Your collection needs to have been converted to a digital format like MP3. There are many tutorials available on the web to help you do this, but do
be aware that there are limitations on the types of files that Echo devices can stream. You should review these before converting your collection as if
you do not meet the requirements they will need to be transcoded before your Echo device can stream them. This article explains <aclass="reference external"href="https://developer.amazon.com/en-US/docs/alexa/custom-skills/audioplayer-interface-reference.html#audio-stream-requirements">Amazon’s
Audio Stream Requirements</a></p>
<p><strong>A SubSonic API Compatible Media Server</strong></p>
<p>I use Navidrome, but you can use any flavour of SubSonic that you like. For information on getting and setting up Navidrome
check out their website <aclass="reference external"href="https://www.navidrome.org/">Navidrome</a>. Your media server must be available on port 443 and serve requests using
https with a valid TLS certificate, these are requirements dictated by Amazon and you must meet them or you will be unable to stream your collection.
The media server needs to be publicly accessible from the Internet, in addition to allowing you to use this skill you will then be able to use any
SubSonic API compatible mobile app to listen to your collection too.</p>
<p>You can get free TLS certificates from <aclass="reference external"href="https://letsencrypt.org/">Let’s Encrypt</a></p>
<p>You can set up dynamic DNS to make your media server accessible for free with <aclass="reference external"href="https://freedns.afraid.org/">afraid.org</a></p>
<p><strong>Tags</strong></p>
<p>This may seem obvious but you need to make sure that your collection is accurately tagged with information like the artist, title, track number etc.
as this is the only way that your media server can identify the music in your collection. If you need a tool to help with this have a look at
<p>Due to the way that Alexa skills operate there are some limitations. Full music Alexa skills require a catalog of content to be provided and this defeats
the purpose of being able to search and stream from your own server directly. Because of this a custom skill type is used along with the AudioPlayer interface,
but this has some limitations in how the skill is invoked.</p>
<p>The following voice commands should be successful (thanks to Raul824)</p>
<ulclass="simple">
<li><p>Alexa ask Navisonic What is Playing?</p></li>
<li><p>Alexa ask Navisonic to star this song.</p></li>
<li><p>Alexa ask Navisonic to unstar this song.</p></li>
<li><p>Alexa ask Navisonic to play rock music</p></li>
<li><p>Alexa ask Navisonic to play playlist “Playlist Name”</p></li>
</ul>
<p>If you have any problems with these, you can open the skill manually with <em>Alexa, open Navisonic</em>. Similarly this can be done when a track is playing, for example
if you want to get information on the track that is playing you will need to invoke the skill and call the intent by saying the following while the track is playing:</p>
<li><p>Login to the Amazon Alexa Skills Kit Builder at <aclass="reference external"href="https://developer.amazon.com">https://developer.amazon.com</a>.
- You must use the same account that is set on your Echo devices.</p></li>
<li><p>Set <em>Skill name</em> to the name you wish to use to invoke the skill. This should be two words or a warning will be raised, I have found that a single word
still works when testing. It can be hard to find a good skill name so feel free to experiment!</p></li>
<li><p>Set <em>Primary locale</em> to your locale, this <strong>must</strong> also be the locale set on your Echo device.</p>
<divclass="admonition note">
<pclass="admonition-title">Note</p>
<p>The locale setting is extremely important, if the skill locale and the locale set on your Echo device do not match the skill will not work. In
addition there are no error messages generated making the issue quite difficult to troubleshoot. The locale on your Echo device can be set via the Alexa Android
app. Please do check the locale setting if you have trouble setting up the skill as the Alexa Skill Builder will default to your local locale, but Echo devices
are set to the US locale by default. Checking this first will save you a few hours of troubleshooting!</p>
</div>
</li>
<li><p>Set sync locales to <em>No</em></p></li>
<li><p>Choose <em>Custom</em> as the model.</p></li>
<li><p>Choose <em>Provision your own</em> as the hosting method for backend resources.</p></li>
<p>There are three options to pick from when setting the SSL certificate type in the Amazon Developer portal.
To confirm that you are using the correct option browse to the URL of your AskNavidrome skill, you will see a message similar to <em>405 Method Not Allowed</em>, this is normal.
View the certificate in use by the skill in your browser and look at the <strong>Common Name (CN)</strong> field. If this contains a <strong>*</strong> for example <strong>*.ngrok-free.app</strong> then you
are using a wildcard certificate. If the common name does not contain a <strong>*</strong> then you have a regular certificate.</p>
<ulclass="simple">
<li><dlclass="simple">
<dt>My development endpoint is a sub-domain of a domain that has a wildcard certificate from a certificate authority</dt><dd><ul>
<li><p>Use this if your skill uses a wildcard certificate with a <strong>*</strong></p></li>
</ul>
</dd>
</dl>
</li>
<li><dlclass="simple">
<dt>My development endpoint has a certificate from a trusted certificate authority</dt><dd><ul>
<li><p>Use this if you have a regular certificate</p></li>
</ul>
</dd>
</dl>
</li>
<li><dlclass="simple">
<dt>I will upload a self-signed certificate in X509 format</dt><dd><ul>
<li><p>Do not select this option unless you know what you are doing.</p></li>
<p>The AskNavidrome Web Service is written in Python and can be run directly on a PC with a Python installation, or as a Docker container (recommended).
Whichever method you use, the service and your Navidrome installation must be available via HTTPS with a well known certificate. One of the easiest
ways to implement this is with a reverse proxy. There are several
<p>A Dockerfile has been provided and a prebuilt container is hosted on github.com. <strong>Please note that the prebuilt container was created on an amd64 platform</strong>. If you
require a different architecture such as arm for a Raspberry Pi, you will need to build a new image using the Dockerfile provided with the repository.</p>
<p>You can configure the service by passing environment variables to the <em>docker run</em> command.</p>
<p>If you intent to use the container to build a Kubernetes pod, I have created a side car container which can automatically configure and renew
TLS certificates with the Kubernetes Nginx Ingress. <aclass="reference external"href="https://github.com/rosskouk/docker-image-k8s-letsencrypt">More information</a>.</p>
<td><p>Enable debugging, by setting this variable to 1, or 3.</p></td>
<td><p>1</p></td>
</tr>
</tbody>
</table>
</div>
</section>
</section>
</section>
<sectionid="tips-tricks">
<h2>Tips & Tricks<aclass="headerlink"href="#tips-tricks"title="Link to this heading">#</a></h2>
<p>Here are a list of tips and ideas for using the skill</p>
<sectionid="playing-music-on-multiple-devices">
<h3>Playing Music on Multiple Devices<aclass="headerlink"href="#playing-music-on-multiple-devices"title="Link to this heading">#</a></h3>
<divclass="admonition note">
<pclass="admonition-title">Note</p>
<p>Thanks to @Rusty77</p>
</div>
<p>You can play music on multiple devices, by following these steps:</p>
<olclass="arabic simple">
<li><p>Add all devices you wish to play music on simultaneously to a group in your Alexa app</p></li>
<li><p>Start playback by asking Alexa to play something on the group</p></li>
<li><p>Then ask AskNavidrome to play something. It should be played on all devices in the group.</p></li>
</ol>
</section>
</section>
<sectionid="troubleshooting">
<h2>Troubleshooting<aclass="headerlink"href="#troubleshooting"title="Link to this heading">#</a></h2>
<sectionid="general">
<h3>General<aclass="headerlink"href="#general"title="Link to this heading">#</a></h3>
<p>Troubleshooting and debugging Alexa skills can be a little frustrating, here are the best ways I have found to do it.</p>
<olclass="arabic">
<li><p>Understand that the Alexa skill is effectively just a set of buttons.
All the skill does is call functions in the web service, it does nothing other than translate what you say to the function name that will perform the task.
Very little can go wrong with this, but here is a list of things to check:</p>
<ulclass="simple">
<li><p>Does the locale of the skill match the locale on your Echo device? If this is mismatched it looks like nothing happens when you try to invoke the skill.</p></li>
<li><p>Is the endpoint set correctly? The endpoint is the URL to the web service, if the skill cannot communicate with the web service check this first.
you must ensure that the URL is https and the certificate is compatible with Amazon services.</p></li>
<li><p>If an intent does not work, you might need to add an additional phrase to the intent in the developer console. The included phrases work for me, you might
want to make some changes though.</p></li>
</ul>
</li>
<li><p>Enable debugging and look at the logs generated by the web service.</p></li>
<li><p>When level 3 debugging is enabled the following web pages are available from the web service</p>
<ulclass="simple">
<li><p>url-to-web-service/queue</p>
<ul>
<li><p>Shows the tracks in the current queue</p></li>
</ul>
</li>
<li><p>url-to-web-service/history</p>
<ul>
<li><p>Shows the tracks that have already been played</p></li>
</ul>
</li>
<li><p>url-to-web-service/buffer</p>
<ul>
<li><p>Shows the tracks in the buffer. Note that the buffer and queue differ as Amazon will request the next track to be queued before the track playing is
finished. The buffer can be thought of as the list of tracks still to be sent to Amazon, where as the queue is the list of tracks still to be played.</p></li>
</ul>
</li>
</ul>
</li>
<li><p>Use the test page in the developer console
The test page will show you the responses between Amazon and an simulated Echo device, this can help you uncover error messages that are normally hidden.</p>
<li><p>After you have entered a command you will get the Alexa response back, scroll down to the <strong>Device Log</strong> section and click through the entries
the entries will contain any errors that were thrown.</p></li>
</ul>
</li>
</ol>
</section>
<sectionid="debug-options">
<h3>Debug Options<aclass="headerlink"href="#debug-options"title="Link to this heading">#</a></h3>
<p>You can enable the following debug options by setting the NAVI_DEBUG environment variable.</p>
<ulclass="simple">
<li><p>0 = Logging set to WARNING and higher.</p></li>
<li><p>1 = Logging set to INFO and higher.</p></li>
<li><p>2 = Logging set to DEBUG and higher and request / response
interceptors are enabled.</p></li>
<li><p>3 = All features of level 2 and the web ui. Note the UI
will be <strong>publicly</strong> available while this is enabled.</p></li>
</ul>
</section>
</section>
<sectionid="known-issues">
<h2>Known Issues<aclass="headerlink"href="#known-issues"title="Link to this heading">#</a></h2>
<h3>The skill appears to work but no music is played. Errors similar to below appear in the web service log<aclass="headerlink"href="#the-skill-appears-to-work-but-no-music-is-played-errors-similar-to-below-appear-in-the-web-service-log"title="Link to this heading">#</a></h3>
<h3>The following error is displayed when you try to run the Docker container<aclass="headerlink"href="#the-following-error-is-displayed-when-you-try-to-run-the-docker-container"title="Link to this heading">#</a></h3>
<h3>You are having trouble connecting to the skill and use CloudFlare<aclass="headerlink"href="#you-are-having-trouble-connecting-to-the-skill-and-use-cloudflare"title="Link to this heading">#</a></h3>
<blockquote>
<div><divclass="admonition note">
<pclass="admonition-title">Note</p>
<p>Thanks to @dwebb8272 and @jame25</p>
</div>
<p>Several users have had difficulty connecting to the skill when hosted in or when using CloudFlare for DNS. A user has reported that CloudFlare have
a default <strong>Web Application Firewall (WAF)</strong> which block requests made by Python URLLib, this results in you not being able to connect and is quite difficult
to debug.</p>
<p>The following screenshots show an example of how the user was able to overcome the issue.</p>
<aclass="reference internal image-reference"href="_images/cloudflare-waf-1.jpg"><imgalt="CloudFlare WAF Rule Example 1 of 3"class="align-center"src="_images/cloudflare-waf-1.jpg"style="width: 800px;"/>
</a>
<aclass="reference internal image-reference"href="_images/cloudflare-waf-2.jpg"><imgalt="CloudFlare WAF Rule Example 2 of 3"class="align-center"src="_images/cloudflare-waf-2.jpg"style="width: 800px;"/>
</a>
<aclass="reference internal image-reference"href="_images/cloudflare-waf-3.jpg"><imgalt="CloudFlare WAF Rule Example 3 of 3"class="align-center"src="_images/cloudflare-waf-3.jpg"style="width: 800px;"/>
</a>
<p>Once you have the rule in place disable proxying for your AskNavidrome web service domain in CloudFlare by navigating to <em>DNS -> Records</em>
and setting it to <em>DNS Only</em>.</p>
</div></blockquote>
</section>
</section>
<sectionid="code-documentation">
<h2>Code Documentation<aclass="headerlink"href="#code-documentation"title="Link to this heading">#</a></h2>
<divclass="toctree-wrapper compound">
</div>
<sectionid="module-app">
<spanid="asknavidrome-main"></span><h3>AskNavidrome main<aclass="headerlink"href="#module-app"title="Link to this heading">#</a></h3>
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">CheckAudioInterfaceHandler</span></span><aclass="headerlink"href="#app.CheckAudioInterfaceHandler"title="Link to this definition">#</a></dt>
<dd><p>Check if device supports audio play.</p>
<p>This can be used as the first handler to be checked, before invoking
other handlers, thus making the skill respond to unsupported devices
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.CheckAudioInterfaceHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.CheckAudioInterfaceHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">GeneralExceptionHandler</span></span><aclass="headerlink"href="#app.GeneralExceptionHandler"title="Link to this definition">#</a></dt>
<dd><p>Handle general exceptions</p>
<p>Handles exceptions and prints error information
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">exception</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">Exception</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.GeneralExceptionHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Checks if the handler can support the exception raised
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">exception</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">Exception</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.GeneralExceptionHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Process the handler input and exception.</p>
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">HelpHandler</span></span><aclass="headerlink"href="#app.HelpHandler"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.HelpHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.HelpHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">LaunchRequestHandler</span></span><aclass="headerlink"href="#app.LaunchRequestHandler"title="Link to this definition">#</a></dt>
<dd><p>Handle LaunchRequest and NavigateHomeIntent</p>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.LaunchRequestHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.LaunchRequestHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">LoggingRequestInterceptor</span></span><aclass="headerlink"href="#app.LoggingRequestInterceptor"title="Link to this definition">#</a></dt>
<dd><p>Intercept all requests</p>
<p>Intercepts all requests sent to the skill and prints them in the log</p>
<spanclass="sig-name descname"><spanclass="pre">process</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><aclass="headerlink"href="#app.LoggingRequestInterceptor.process"title="Link to this definition">#</a></dt>
<dd><p>Process the input before the Handler is run.</p>
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">LoggingResponseInterceptor</span></span><aclass="headerlink"href="#app.LoggingResponseInterceptor"title="Link to this definition">#</a></dt>
<dd><p>Intercept all responses</p>
<p>Intercepts all responses sent from the skill and prints them in the log</p>
<spanclass="sig-name descname"><spanclass="pre">process</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">response</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">Response</span></span></em><spanclass="sig-paren">)</span><aclass="headerlink"href="#app.LoggingResponseInterceptor.process"title="Link to this definition">#</a></dt>
<dd><p>Process the input and the response after the Handler is run.</p>
<li><p><strong>response</strong> (Union[None, <codeclass="xref py py-class docutils literal notranslate"><spanclass="pre">ask_sdk_model.response.Response</span></code>]) – Execution result of the Handler on
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicPlayAlbumByArtist</span></span><aclass="headerlink"href="#app.NaviSonicPlayAlbumByArtist"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayAlbumByArtist.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayAlbumByArtist.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicPlayFavouriteSongs</span></span><aclass="headerlink"href="#app.NaviSonicPlayFavouriteSongs"title="Link to this definition">#</a></dt>
<dd><p>Handle the NaviSonicPlayFavouriteSongs intent</p>
<p>Play all starred / liked songs, songs are automatically shuffled.</p>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayFavouriteSongs.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayFavouriteSongs.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicPlayMusicByArtist</span></span><aclass="headerlink"href="#app.NaviSonicPlayMusicByArtist"title="Link to this definition">#</a></dt>
<dd><p>Handle NaviSonicPlayMusicByArtist</p>
<p>Play a selection of songs for the given artist</p>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayMusicByArtist.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayMusicByArtist.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicPlayMusicByGenre</span></span><aclass="headerlink"href="#app.NaviSonicPlayMusicByGenre"title="Link to this definition">#</a></dt>
<dd><p>Play songs from the given genre</p>
<p>50 tracks from the given genre are shuffled and played</p>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayMusicByGenre.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayMusicByGenre.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicPlayMusicRandom</span></span><aclass="headerlink"href="#app.NaviSonicPlayMusicRandom"title="Link to this definition">#</a></dt>
<dd><p>Handle the NaviSonicPlayMusicRandom intent</p>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayMusicRandom.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayMusicRandom.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicPlayPlaylist</span></span><aclass="headerlink"href="#app.NaviSonicPlayPlaylist"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayPlaylist.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicPlayPlaylist.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicPlaySongByArtist</span></span><aclass="headerlink"href="#app.NaviSonicPlaySongByArtist"title="Link to this definition">#</a></dt>
<dd><p>Handle the NaviSonicPlaySongByArtist intent</p>
<p>Play the given song by the given artist if it exists in the
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicPlaySongByArtist.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicPlaySongByArtist.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicRandomiseQueue</span></span><aclass="headerlink"href="#app.NaviSonicRandomiseQueue"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicRandomiseQueue.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicRandomiseQueue.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicSongDetails</span></span><aclass="headerlink"href="#app.NaviSonicSongDetails"title="Link to this definition">#</a></dt>
<dd><p>Handle NaviSonicSongDetails Intent</p>
<p>Returns information on the track that is currently playing</p>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicSongDetails.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicSongDetails.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicStarSong</span></span><aclass="headerlink"href="#app.NaviSonicStarSong"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicStarSong.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicStarSong.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NaviSonicUnstarSong</span></span><aclass="headerlink"href="#app.NaviSonicUnstarSong"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NaviSonicUnstarSong.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NaviSonicUnstarSong.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">NextPlaybackHandler</span></span><aclass="headerlink"href="#app.NextPlaybackHandler"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.NextPlaybackHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.NextPlaybackHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">PausePlaybackHandler</span></span><aclass="headerlink"href="#app.PausePlaybackHandler"title="Link to this definition">#</a></dt>
<dd><p>Handler for stopping audio.</p>
<p>Handles Stop, Cancel and Pause Intents and PauseCommandIssued event.</p>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.PausePlaybackHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.PausePlaybackHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">PlaybackFailedEventHandler</span></span><aclass="headerlink"href="#app.PlaybackFailedEventHandler"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.PlaybackFailedEventHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.PlaybackFailedEventHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">PlaybackFinishedHandler</span></span><aclass="headerlink"href="#app.PlaybackFinishedHandler"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.PlaybackFinishedHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.PlaybackFinishedHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">PlaybackNearlyFinishedHandler</span></span><aclass="headerlink"href="#app.PlaybackNearlyFinishedHandler"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.PlaybackNearlyFinishedHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.PlaybackNearlyFinishedHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">PlaybackStartedHandler</span></span><aclass="headerlink"href="#app.PlaybackStartedHandler"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.PlaybackStartedHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.PlaybackStartedHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">PlaybackStoppedHandler</span></span><aclass="headerlink"href="#app.PlaybackStoppedHandler"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.PlaybackStoppedHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.PlaybackStoppedHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">PreviousPlaybackHandler</span></span><aclass="headerlink"href="#app.PreviousPlaybackHandler"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.PreviousPlaybackHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.PreviousPlaybackHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">ResumePlaybackHandler</span></span><aclass="headerlink"href="#app.ResumePlaybackHandler"title="Link to this definition">#</a></dt>
<dd><p>Handler for resuming audio on different events.</p>
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.ResumePlaybackHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.ResumePlaybackHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">SkillEventHandler</span></span><aclass="headerlink"href="#app.SkillEventHandler"title="Link to this definition">#</a></dt>
<dd><p>Close session for skill events or when session ends.</p>
<p>Handler to handle session end or skill events (SkillEnabled,
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.SkillEventHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Returns true if Request Handler can handle the Request
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.SkillEventHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Handles the Request inside handler input and provides a
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">SystemExceptionHandler</span></span><aclass="headerlink"href="#app.SystemExceptionHandler"title="Link to this definition">#</a></dt>
<dd><p>Handle System.ExceptionEncountered</p>
<p>Handles exceptions and prints error information
<spanclass="sig-name descname"><spanclass="pre">can_handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">exception</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">Exception</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#app.SystemExceptionHandler.can_handle"title="Link to this definition">#</a></dt>
<dd><p>Checks if the handler can support the exception raised
<spanclass="sig-name descname"><spanclass="pre">handle</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">exception</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">Exception</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#app.SystemExceptionHandler.handle"title="Link to this definition">#</a></dt>
<dd><p>Process the handler input and exception.</p>
<spanclass="sig-prename descclassname"><spanclass="pre">app.</span></span><spanclass="sig-name descname"><spanclass="pre">queueWorkerThread</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">connection</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">play_queue</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">song_id_list</span></span></em><spanclass="sig-paren">)</span><aclass="headerlink"href="#app.queueWorkerThread"title="Link to this definition">#</a></dt>
<spanid="asknavidrome-controller"></span><h3>AskNavidrome controller<aclass="headerlink"href="#module-asknavidrome.controller"title="Link to this heading">#</a></h3>
<spanclass="sig-prename descclassname"><spanclass="pre">asknavidrome.controller.</span></span><spanclass="sig-name descname"><spanclass="pre">add_screen_background</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">card_data</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">dict</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">AudioItemMetadata</span><spanclass="w"></span><spanclass="p"><spanclass="pre">|</span></span><spanclass="w"></span><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.controller.add_screen_background"title="Link to this definition">#</a></dt>
<spanclass="sig-prename descclassname"><spanclass="pre">asknavidrome.controller.</span></span><spanclass="sig-name descname"><spanclass="pre">enqueue_songs</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">api</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><aclass="reference internal"href="#asknavidrome.subsonic_api.SubsonicConnection"title="asknavidrome.subsonic_api.SubsonicConnection"><spanclass="pre">SubsonicConnection</span></a></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">queue</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><aclass="reference internal"href="#asknavidrome.media_queue.MediaQueue"title="asknavidrome.media_queue.MediaQueue"><spanclass="pre">MediaQueue</span></a></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">song_id_list</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">list</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.controller.enqueue_songs"title="Link to this definition">#</a></dt>
<li><p><strong>api</strong> (<aclass="reference internal"href="#asknavidrome.subsonic_api.SubsonicConnection"title="asknavidrome.subsonic_api.SubsonicConnection"><em>SubsonicConnection</em></a>) – A SubsonicConnection object to allow access to the Navidrome API</p></li>
<li><p><strong>queue</strong> (<aclass="reference internal"href="#asknavidrome.media_queue.MediaQueue"title="asknavidrome.media_queue.MediaQueue"><em>MediaQueue</em></a>) – A MediaQueue object</p></li>
<li><p><strong>song_id_list</strong> (<em>list</em>) – A list of song IDs to enqueue</p></li>
<li><p><strong>mode</strong> (<em>str</em>) – play | continue - Play immediately or enqueue a track</p></li>
<li><p><strong>text</strong> (<em>str</em>) – Text which should be spoken before playback starts</p></li>
<li><p><strong>card_data</strong> (<em>dict</em>) – Data to display on a card</p></li>
<li><p><strong>track_details</strong> (<aclass="reference internal"href="#asknavidrome.track.Track"title="asknavidrome.track.Track"><em>Track</em></a>) – A Track object containing details of the track to use</p></li>
<li><p><strong>handler_input</strong> (<em>HandlerInput</em>) – The Amazon Alexa HandlerInput object</p></li>
<spanclass="sig-prename descclassname"><spanclass="pre">asknavidrome.controller.</span></span><spanclass="sig-name descname"><spanclass="pre">stop</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">handler_input</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">HandlerInput</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">Response</span></span></span><aclass="headerlink"href="#asknavidrome.controller.stop"title="Link to this definition">#</a></dt>
<emclass="property"><spanclass="k"><spanclass="pre">class</span></span><spanclass="w"></span></em><spanclass="sig-prename descclassname"><spanclass="pre">asknavidrome.media_queue.</span></span><spanclass="sig-name descname"><spanclass="pre">MediaQueue</span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">add_track</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">track</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><aclass="reference internal"href="#asknavidrome.track.Track"title="asknavidrome.track.Track"><spanclass="pre">Track</span></a></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.add_track"title="Link to this definition">#</a></dt>
<ddclass="field-odd"><p><strong>track</strong> (<aclass="reference internal"href="#asknavidrome.track.Track"title="asknavidrome.track.Track"><em>Track</em></a>) – A Track object containing details of the track to be played</p>
<spanclass="sig-name descname"><spanclass="pre">clear</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.clear"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">enqueue_next_track</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><aclass="reference internal"href="#asknavidrome.track.Track"title="asknavidrome.track.Track"><spanclass="pre">Track</span></a></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.enqueue_next_track"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">get_buffer</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">deque</span></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.get_buffer"title="Link to this definition">#</a></dt>
<dd><p>Get the buffer</p>
<p>Returns a deque containing the current buffer</p>
<spanclass="sig-name descname"><spanclass="pre">get_current_queue</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">deque</span></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.get_current_queue"title="Link to this definition">#</a></dt>
<dd><p>Get the current queue</p>
<p>Returns a deque containing the current queue of music to be played</p>
<spanclass="sig-name descname"><spanclass="pre">get_current_track</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><aclass="reference internal"href="#asknavidrome.track.Track"title="asknavidrome.track.Track"><spanclass="pre">Track</span></a></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.get_current_track"title="Link to this definition">#</a></dt>
<dd><p>Method to return current_track attribute</p>
<p>Added to allow access to the current_track object while using BaseManager
for multi threading, as BaseManager does not allow access to class
<spanclass="sig-name descname"><spanclass="pre">get_history</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">deque</span></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.get_history"title="Link to this definition">#</a></dt>
<dd><p>Get history</p>
<p>Returns a deque of tracks that have already been played</p>
<spanclass="sig-name descname"><spanclass="pre">get_history_count</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">int</span></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.get_history_count"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">get_next_track</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><aclass="reference internal"href="#asknavidrome.track.Track"title="asknavidrome.track.Track"><spanclass="pre">Track</span></a></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.get_next_track"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">get_previous_track</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><aclass="reference internal"href="#asknavidrome.track.Track"title="asknavidrome.track.Track"><spanclass="pre">Track</span></a></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.get_previous_track"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">get_queue_count</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">int</span></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.get_queue_count"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">set_current_track_offset</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">offset</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">int</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.set_current_track_offset"title="Link to this definition">#</a></dt>
<dd><p>Method to set the offset of the current track in milliseconds</p>
<p>Set the offset for the current track in milliseconds. This is used
when resuming a paused track to ensure the track isn’t played from
<spanclass="sig-name descname"><spanclass="pre">shuffle</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.shuffle"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">sync</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.sync"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">buffer</span></span><emclass="property"><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="pre">deque</span></em><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.buffer"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">current_track</span></span><emclass="property"><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><aclass="reference internal"href="#asknavidrome.track.Track"title="asknavidrome.track.Track"><spanclass="pre">Track</span></a></em><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.current_track"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">history</span></span><emclass="property"><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="pre">deque</span></em><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.history"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">logger</span></span><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.logger"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">queue</span></span><emclass="property"><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="pre">deque</span></em><aclass="headerlink"href="#asknavidrome.media_queue.MediaQueue.queue"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">albums_by_artist</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">id</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">list</span><spanclass="p"><spanclass="pre">[</span></span><spanclass="pre">dict</span><spanclass="p"><spanclass="pre">]</span></span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.albums_by_artist"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">build_random_song_list</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">count</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">int</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">list</span><spanclass="w"></span><spanclass="p"><spanclass="pre">|</span></span><spanclass="w"></span><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.build_random_song_list"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">build_song_list_from_albums</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">albums</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">list</span><spanclass="p"><spanclass="pre">[</span></span><spanclass="pre">dict</span><spanclass="p"><spanclass="pre">]</span></span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">length</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">int</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">list</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.build_song_list_from_albums"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">build_song_list_from_favourites</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">list</span><spanclass="w"></span><spanclass="p"><spanclass="pre">|</span></span><spanclass="w"></span><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.build_song_list_from_favourites"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">build_song_list_from_genre</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">genre</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">count</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">int</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">list</span><spanclass="w"></span><spanclass="p"><spanclass="pre">|</span></span><spanclass="w"></span><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.build_song_list_from_genre"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">build_song_list_from_playlist</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">id</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">list</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.build_song_list_from_playlist"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">get_song_details</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">id</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">dict</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.get_song_details"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">get_song_uri</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">id</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">str</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.get_song_uri"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">ping</span></span><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">bool</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.ping"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">scrobble</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">track_id</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">time</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">int</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.scrobble"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">search_album</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">term</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">dict</span><spanclass="w"></span><spanclass="p"><spanclass="pre">|</span></span><spanclass="w"></span><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.search_album"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">search_artist</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">term</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">dict</span><spanclass="w"></span><spanclass="p"><spanclass="pre">|</span></span><spanclass="w"></span><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.search_artist"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">search_playlist</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">term</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">str</span><spanclass="w"></span><spanclass="p"><spanclass="pre">|</span></span><spanclass="w"></span><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.search_playlist"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">search_song</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">term</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">dict</span><spanclass="w"></span><spanclass="p"><spanclass="pre">|</span></span><spanclass="w"></span><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.search_song"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">star_entry</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">id</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">mode</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.star_entry"title="Link to this definition">#</a></dt>
<spanclass="sig-name descname"><spanclass="pre">unstar_entry</span></span><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n"><spanclass="pre">id</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em>, <emclass="sig-param"><spanclass="n"><spanclass="pre">mode</span></span><spanclass="p"><spanclass="pre">:</span></span><spanclass="w"></span><spanclass="n"><spanclass="pre">str</span></span></em><spanclass="sig-paren">)</span><spanclass="sig-return"><spanclass="sig-return-icon">→</span><spanclass="sig-return-typehint"><spanclass="pre">None</span></span></span><aclass="headerlink"href="#asknavidrome.subsonic_api.SubsonicConnection.unstar_entry"title="Link to this definition">#</a></dt>
<liclass="toc-h2 nav-item toc-entry"><aclass="reference internal nav-link"href="#tips-tricks">Tips & Tricks</a><ulclass="nav section-nav flex-column">
<liclass="toc-h3 nav-item toc-entry"><aclass="reference internal nav-link"href="#playing-music-on-multiple-devices">Playing Music on Multiple Devices</a></li>
<liclass="toc-h3 nav-item toc-entry"><aclass="reference internal nav-link"href="#the-skill-appears-to-work-but-no-music-is-played-errors-similar-to-below-appear-in-the-web-service-log">The skill appears to work but no music is played. Errors similar to below appear in the web service log</a></li>
<liclass="toc-h3 nav-item toc-entry"><aclass="reference internal nav-link"href="#the-following-error-is-displayed-when-you-try-to-run-the-docker-container">The following error is displayed when you try to run the Docker container</a></li>
<liclass="toc-h3 nav-item toc-entry"><aclass="reference internal nav-link"href="#you-are-having-trouble-connecting-to-the-skill-and-use-cloudflare">You are having trouble connecting to the skill and use CloudFlare</a></li>