-
Notifications
You must be signed in to change notification settings - Fork 1
Wiki International Version
German Version (Deutsche Version)
This skill tries to make the handling of saved playlists for the player MPD comfortable. There is a very good MPD skill from forslund. If you don't use playlists, but only have a music collection of music files, you should use his skill. If you can answer three or more questions with yes, you should try this skill: Are different playlists used in MPD? Is there more than one MPD player in the network? Is there more than one Mycroft system in the house / apartment? Do you want to be able to control all MPD players with all Mycroft systems?
Under not fully reproducible conditions, conflicts with the mycroft-playback-control.mycroftai skill may occur. Please report on this at Issues.
For users who have compiled their own playlists, especially if they include internet radio streams, my skill might be helpful.
MPD server 1
Default radio (IP 1): Enter the IP address of the first MPD player
Port: 6600 MPD default port
Placement: Room name. Note: This name must be identical to the placement name of the Mycroft Device located in the same room as the MPD Player. Only then it is not necessary to specify the room name. The skill uses the Placement specification from the device configuration of home.mycroft.ai
If there are further MPD players, the corresponding information has to be given.
[If there are multiple Mycroft Devices, then please repeat the configuration for each device].
Another difference (from forslund's skill) is that this skill is designed to manage multiple MPD servers. It is rather not well suited to manage an MPD installation on the same device that Mycroft is running on. This is because if MPD is running on the same device that Mycroft is installed on, the wakeword detection will no longer work.
If several Mycroft devices are used - regardless of whether multiple MPD servers are also running on the local network - then it would make a lot of sense to add a room name to the "Placement" configuration field at home.mycroft.ai for all devices (Devices → Edit → Placement). If an MPD instance is running in the same room (not on the same device!), the name of Placement of the Mycroft device must match the Placement specification in the skill configuration. This is to identify if the MPD server in the same room is meant or an MPD server in another room.
For example, if there is a Mycroft in the kitchen, then the term 'Kitchen' should be entered in the Placement field in the Device configuration for this device. In the Skill Definition, the term 'Kitchen' must also be entered in the Placment field for the MPD player located in the kitchen. Only then will a voice command work without specifying the room. (In reality, the script replaces a non-existent room specification with the room specification of the Mycroft Device). On the other hand, you can of course say "Play station three on the radio in the kitchen" even if you are already standing in the kitchen.
There is an occasional conflict with the volume-speaker skill. It uses the same words as this skill for volume control. However, in the MPD skill the volume of the output signal of the MPD server is controlled with values from 0 to 100. The volume control in the volume-skill addresses the master channel of the ALSA mixer (in steps from 1-10). You can also think of it like this: MPD has its own preamp that can be controlled and ALSA is the power amp.
If the standard volume-skill is active, this can easily lead to a request for volume increase being countered by the system with the announcement that the maximum has already been reached. Nevertheless, the sound reproduction is too quiet. The reason for this can be a too low "preamplification" of the input channel of ALSA (e.g. "Headphone") or a too low output level of MPD itself. The whole audio topic is still complicated under Linux. There would be other solutions. But this is rather a topic that should be negotiated under Issues.
If you don't want to blacklist the default volume-skill, it's best to contact me via Issues to implement another solution.
The original language is german, a further localization by the author is only available for en-us. The revision of the en-us files and further localizations are welcome and will be taken over with pleasure!
Turn on the radio (if Mycroft and MPD are in the same room) or
Turn on the radio in the kitchen (if MPD is in a different room than Mycroft)
Turn the radio [in the kitchen] off
Play track (or station or position) one (in the same room) or
Play track one on the radio in the workshop (if MPD in another room)
(In the other examples, I will omit the addition of "on the radio in ..." because that applies to all intents.)
Play the next station
Play the previous station
Play the first station
Play the last station
Plays station five (three, seven,...)
Which playlists are there
Open playlist [name] and play song (station | title) one (three | five | ..)
What am I listening to
Which songs (titles | songs) are on the current list (search in current playlist)
Search [keyword] in any list (search in all playlists)
Search [keyword] in the music database
Search [keyword] in the music database and play song (title | song) one (three, seven…)
info_current_list.intent
which (songs | titles | songs | stations | channels) are on the current (list | playlist | playlist)?
which (songs | titles | songs | stations | channels) are on the radio (in | in the) {placement} on the current (list | playlist | playlist)
info_current_title.intent
What do (I | we) (hear | listen) right now
What do (I | we) (hear | listen)
What (am I | are we) listening
What is playing
Read the current title from the radio (in the | at) {placement}
What (I'm listening to) (we're listening to) on the radio (in the) {placement}
What is played (on | in) radio (in the | in) {placement}
what is playing (on | in) radio (in the | in) {placement}
What (I | we) are listening to (on | from) radio
playlist_replace_and_play.intent
(open | load) (playlist | playlist | list | the playlist | the list) {playlist} and play (song | title | number | position | channel | sender) {pos_nr}
(open | load) (playlist | playlist | list) {playlist} on (radio | device) {placement} and play (song | title | number | position | channel | sender) {pos_nr}
(open | load) (playlist | playlist | list) {playlist} on (radio | device) (in | in the) {placement} and play (song | title | number | position | channel | sender) {pos_nr}
playlist_stored.intent
What are the playlists on the radio (at | in} {placement}
List the playlists on the radio (in the) {placement}
Which (playlists | playlist) are there
pos.intent
(choose | play | switch to) (station | channel | song | number | position | title | place) {pos_nr} on (radio | device) (in | in the) {placement}
(choose | play | switch to) on (radio | device) (in | in the) {placement} (station | channel | song | song | number | position | title | place) {pos_nr}
(choose | play | switch to) (station | channel | song | song | number | position | title | place) {pos_nr}
pos.intent.orig
(wähle | spiele | wechsel zu) am (radio | gerät) {radio} (sender | kanal | lied | song | nummer | position | titel | platz) {pos_nr}
(wähle | spiele | wechsel zu) am (radio | gerät) (im | in der) {radio} (sender | kanal | lied | song | nummer | position | titel | platz) {pos_nr}
pos_first.intent
(choose | games | change to) the first (station | channel | song | number | position | title)
(choose | games | switch to) on (radio | device) (in | the) {placement} first (station | channel | song | number | position | title)
(choose | play | switch to) on (radio | device) {placement} the first (station | channel | song | number | position | title)
pos_last.intent
(choose | games | change to) the last (station | channel | song | number | position | title)
(choose | games | switch to) on (radio | device) (in | the) {placement} last (station | channel | song | number | position | title)
(choose | play | switch to) on (radio | device) {placement} the last (station | channel | song | number | position | title)
pos_next.intent
(choose | games | change to) next (station | channel | song | number | position | title)
(choose | games | switch to) on (radio | device) (in | the) {placement} next (station | channel | song | number | position | title)
(choose | play | switch to) on (radio | device) {placement} next (station | channel | song | number | position | title)
pos_previous.intent
(choose | games | change to) previous (station | channel | song | number | position | title)
(choose | games | switch to) on (radio | device) (in | the) {placement} previous (station | channel | song | number | position | title)
(choose | play | switch to) on (radio | device) {placement} previous (station | channel | song | number | position | title)
search.intent
(search | find | is there) on (radio | device) (in the | in) {placement} on the (list | playlist | playlist) {query}
(search | find | is there) {query} (in the | on the) (list | playlist | playlist)
search_add_play_database.intent
(search | find) {query} (in the music database | in the music collection) and play (song | title | song | place | channel | number) {pos_nr}
(search | find) {query} (in the music database | in the music collection) and play (song | title | song | place | channel | number) {pos_nr} on the radio (in | in the) {placement}
search_all_playlists.dialog
I found the search term {query} in the playlist {playlist} at position {pos}. The title is {name}.
search_all_playlists.intent
(search | find) {query} in (all | any) (list | lists | playlist | playlists)
(is there | do we have) {query} in any (list | playlist)
search_in_database.intent
(search | find) {query} (in the music database | in the music collection)
start_mpd.intent
(Make | turn on) (the radio | the music)
(Make | turn on) (the radio | the music) (in | in the) {placement} on
stop_mpd.intent
Turn off (the radio | the music)
(Make | turn) (the radio | the music) (in | in the) {placement} off
vol_down.intent
make (radio | the radio | music player | the music player | mpd) a little lower
make the (radio | the radio | music player | the music player | mpd) (in | in the) {placement} a little lower
make (radio | the radio | music player | the music player | mpd) (in | in the) {placement} a little lower
vol_set_to.intent
(make | adjust | set | turn) the volume on (the radio | radio | the music player | music player | mpd) on {pos_nr}
(make | adjust | set | turn) the volume on {pos_nr}
(make | adjust | set | turn) the volume on (the radio | radio | the music player | music player | mpd) (in | in the) {placement} to {pos_nr}
vol_up.intent
make (radio | the radio | music player | the music player | mpd) a little louder
make (radio | the radio | music player | the music player | mpd) (in | in the) {placement} a little louder
make (radio | the radio | music player | the music player | mpd) (in | in the) {placement} a bit louder
placement.entity
:0
playlist.entity
:0
pos_nr.entity
#
##
###
query.entity
:0
radio.entity
:0
cancel.dialog
Operation canceled.
**changed_to.dialog
switching to song number {pos_nr}
device_not_running.dialog
The server is not available!
error_in_function_current_playlist.dialog
An error occured in function search in current playlist
feedback_query.dialog
Here is what I understand: {query} Is that correct?
missunderstand_query.dialog
Please restart the search in the music database!
missunderstand_selection.dialog
Didn't understand in which data field to search
mpd_connect.dialog
Connected!
mpd_error.dialog
An error has occurred in module M P D.
mpd_not_running.dialog
M P D is not running on the specified device!
no_result.dialog
Looking for {query} in data field {selection} had no results.
playlist_not_found.dialog
playlist not found
query_found.dialog
place {pos} {name}
line {pos} {name}
query_not_found.dialog
The title {query} you are looking for does not exist.
some_error.dialog
Some error has occurred
speak_current_title.dialog
place {pos} {title}
line {pos} {title}
speak_current_title_artist.dialog
place {pos} {title} from {artist}
line {pos} {title} from {artist}
starting_with_number_one.dialog
I start the new playlist with place 1.
term_not_found.dialog
Search term {query} not found in any playlist.
to_play.dialog
Should I play one of the titles or one station? Answer yes or no.
what_to_search_in_database.dialog
What should I search for? Name the search term
where_to_play.dialog
On which radio should the music be played
which_data_field.dialog
In which category should I search
which_playlist_to_play.dialog
Which playlist should I open? Give a name or keep silent if you don't want to load a new play list
which_position_to_play.dialog
Name a position.
which_title_to_play.dialog
The search result includes {numbers} titles. Which title should I play? Say all, nothing or name a starting number, highest {numbers}
album.voc
album
cd
all.voc
all
artist.voc
artist
singer
band
group
cancel.voc
Stopped searching
genre.voc
genre
style
music style
type
no.voc
no
nope
never
nothing.voc
nothing
none
no one
title.voc
titel
song
yes.voc
yes
yeah
right
A major challenge has been the different appearance of how MP3 files, internet streams and podcasts can be represented in MPD playlists. This skill can currently only work with playlists in m3u format or URL format. Other playlist formats are currently not supported for sure or have not been tested. But the supported formats alone required sometimes quite complex evaluations to make any speakable statements from them. Hopefully this will work in other languages as well.
I tried to give the functions "speaking" self-explanatory names. Additionally there is an explanatory comment line above some functions.
Translated with help from www.DeepL.com/Translator (free version) from german to english (en-US)