Skip to content

Wiki Deutsche Version

JoergZ2 edited this page Mar 21, 2021 · 11 revisions

Internationale Version

Vorbemerkung

Dieser Skill versucht das Handling von playlisten für den Player MPD komfortabel zu gestalten. Es gibt einen sehr guten MPD-Skill von forslund. Wer keine Playlisten benutzt, sondern nur eine Musiksammlung aus Musik-Dateien benutzen möchte, sollte seinen Skill verwenden. Wer drei oder mehr Fragen mit ja beantworten kann, sollte diesen Skill ausprobieren:
Werden Playlisten in MPD benutzt?
Gibt es in meinem Netzwerk mehr als einen MPD Player?
Gibt es mehr als ein Mycroft System im Haus / in der Wohnung?
Möchtest du mit allen Mycroft Systemen alle MPD Player steuern können?

Für Benutzer, die eigenen Playlisten zusammengestellt haben, insbesondere wenn diese Internet-Radio-Streams beinhalten, könnte mein Skill hilfreich sein. Ein weiterer Unterschied (zu forslund‘s skill) besteht darin, dass dieser Skill darauf ausgelegt ist, mehrere MPD-Server zu managen. Er ist eher nicht gut geeignet, eine MPD Installation auf demselben Gerät zu steuern, auf dem auch Mycroft läuft. Denn wenn MPD auf demselben Gerät läuft, auf dem Mycroft installiert ist, funktioniert die Wakeword Erkennung nicht mehr.

Unter nicht vollständig reproduzierbaren Bedingungen kann es zu Konflikten mit dem mycroft-playback-control.mycroftai Skill kommen. Bitte Berichte dazu unter Issues.

Konfiguration des Skills auf home.mycroft.ai:

MPD-Server 1

Standardradio (IP 1): Trage die IP-Adresse des ersten MPD-Players ein
Port: 6600 MPD Standardport
Placement: Raumbezeichnung des MPD-Players.
Hinweis: Diese Bezeichnung sollte identisch sein mit der Placement-Bezeichnung des Mycroft Devices, das sich im selben Raum befindet wie der MPD Player. Denn nur dann ist es nicht erforderlich die Raumbezeichnung zu nennen. Der Skill benutzt die Placement Angabe aus der Gerätekonfiguration von home.mycroft.ai Falls es weitere MPD-Player gibt, sind die Angaben entsprechend für jede Instanz zu machen.

[Falls es mehrere Mycroft Devices gibt, dann bitte die Konfiguration für jedes Gerät wiederholen. In home.mycroft.ai erscheinen dann im Skill mehrere Tabs.]

Konfiguration des (der) Mycroft Gerätes (Geräte)

Wenn mehrere Mycroft-Geräte benutzt werden – unabhängig davon, ob auch mehrere MPD-Server im lokalen Netz betrieben werden – dann wäre es sehr sinnvoll unter der Adresse home.mycroft.ai bei allen Geräten das Konfigurationsfeld „Placement“ mit einer Raumbezeichnung zu versehen(Devices → Edit → Placement). Wenn im selben Raum (nicht auf demselben Gerät!) eine MPD Instanz läuft, muss der Name von Placement des Mycroft-Gerätes mit der Placement Angabe in der Skill-Konfiguration übereinstimmen. Dies dient dazu zu erkennen, ob der MPD-Server im selben Raum gemeint ist oder ein MPD Server in einem anderen Raum.

Ein Beispiel: Steht in der Küche ein Mycroft (Picroft), dann sollte für dieses Gerät in der Geräte-Konfiguration (Device) das Feld Placement mit dem Begriff ‚Küche‘ versehen sein. In der Skill Definition muss für den MPD Player, der sich in der Küche befindet im Feld Placment ebenfalls der Begriff ‚Küche‘ eingetragen sein. Nur dann funktioniert ein Sprachbefehl ohne Angabe des Raumes. (In Wirklichkeit ersetzt das Skript eine nicht ausgesprochene Raumangabe durch die Raumangabe des Mycroft Devices, weil der Skill davon ausgeht, dass sich Mycroft-Gerät und MPD-Player im selben Raum befinden.) Andererseits kann man selbstverständlich sagen „Spiele Sender drei am Radio in der Küche“, selbst wenn man bereits in der Küche steht.

Konflikte

Einen gelegentlich auftretenden Konflikt gibt es mit dem volume-speaker Skill. Dieser benutzt die gleichen Worte wie dieser Skill für die Regelung der Lautstärke. Allerdings wird im MPD-Skill die Lautstärke des Ausgangssignal des MPD-Servers gesteuert mit Werten von 0 bis 100. Die Lautsärkeregelung im volume-skill spricht den Master-Kanal des ALSA-Mixers an (in Stufen von 1-10). Man kannes sich auch so vorstellen: MPD hat einen eigenen Vorverstärker, der geregelt werden kann und ALSA ist die Endstufe.

Wenn der standard volume-skill aktiv ist, kann das leicht dazu führen, dass eine Bitte um Lautstärkeerhöhung vom System mit der Ansage gekontert wird, dass das Maximum bereits erreicht sei. Trotzdem ist die Soundwiedergabe zu leise. Der Grund dafür kann sowohl an einer zu geringen „Vorverstärkung“ des Eingangskanals von ALSA liegen (z. B. „Headphone“) oder an einem zu geringen Output Level von MPD selbst. Das ganze Thema Audio ist unter Linux leider immer noch kompliziert. Es gäbe auch noch andere Lösungen. Das ist aber eher ein Thema, dass unter Issues verhandelt werden sollte. Wer den standard volume-skill nicht blacklisten möchte, nimmt am besten Kontakt zu mir über Issues auf, um eine andere Lösung zu implementieren.

Informationen zur Sprachsteuerung

Weitere Beispielsätze

Der aktuelle Output
Schalte das Radio an (wenn Mycroft und MPD im selben Raum sind) oder
Schalte das Radio in der Küche an (wenn MPD in einem anderen Raum als Mycroft)
Schalte das Radio [in der Küche] aus

Aktuelle Playliste
Spiele Titel (oder Sender oder Position) eins (im selben Raum) oder
Spiele Titel 1 am Radio in der Werkstatt (wenn MPD in einem anderen Raum
(In den weiteren Beispielen verzichte ich auf den Zusatz „am Radio in …“, weil das für alle Intents gilt.)
Spiele den nächsten Sender
Spiele den vorherigen Sender
Spiele den ersten Sender
Spiele den letzten Sender
Spiele Sender fünf (drei, sieben,…)

Gespeicherte Playlisten
Welche Playlisten gibt es
Öffne Playliste [Name] und spiele Lied (Sender | Titel) eins (drei | fünf | ..)

Informationen und Suchen
Was höre ich gerade
Welche Lieder (Titel | Songs) stehen auf der aktuellen Liste (Suche in aktueller Playliste)
Suche [Suchwort] in irgend einer Liste (Suche in allen Playlisten)

Datenbanksuche Suche [Suchwort] in der Musikdatenbank
Suche [Suchwort] in der Musikdatenbank und spiele Lied (Titel | Song) eins (drei, sieben...)

Details zur Sprachsteuerung

Referenz Sprachbefehle (Auswahl)

Die Ursprungssprache ist deutsch, eine weitere Lokalisierung vom Autor liegt nur für en-us vor. Die Überarbeitung der en-us Dateien und weitere Lokalisierungen sind herzlich willkommen und werden gerne übernommen!

Referenz Dateien im Verzeichnis locale/[Sprachcode]

Intent-Dateien

info_current_list.intent
welche (lieder | titel | songs | sender | kanäle) stehen auf der aktuellen (liste | playlist | playliste)
welche (lieder | titel | songs | sender | kanäle) stehen beim radio (im | in der) {placement} auf der aktuellen (liste | playlist | playliste)

info_current_title.intent
Was (höre | hören) (ich | wir) gerade
Was läuft gerade
Lies den aktuellen Titel vor vom radio (in der | im) {placement}
Was (höre | hören) (ich | wir) gerade (am | vom) radio (in der | im) {placement}
Was wird gespielt (am | im) radio (in der | im) {placement}
was läuft (am | im) radio (in der | im) {placement}
Was (höre | hören) (ich | wir) gerade (am | vom) radio

playlist_replace_and_play.intent
Öffne (playlist | playliste | liste | die playlist | die playliste | die liste) {playlist} und spiele (lied | titel | nummer | position | kanal | sender) {pos_nr}
Öffne (playlist | playliste | liste) {playlist} am (radio | gerät) {placement} und spiele (lied | titel | nummer | position | kanal | sender) {pos_nr}
Öffne (playlist | playliste | liste) {playlist} am (radio | gerät) (im | in der) {placement} und spiele (lied | titel | nummer | position | kanal | sender) {pos_nr}

playlist_stored.intent
Welche Playlisten gibt es am radio (im | in der) {placement}
Zähle die Playlisten auf am radio (im | in der) {placement}
Welche Playlisten gibt es

pos.intent
(wähle | spiele | wechsel zu) (sender | kanal | lied | song | nummer | position | titel | platz) {pos_nr} am (radio | gerät) (im | in der) {placement}
(wähle | spiele | wechsel zu) am (radio | gerät) (im | in der) {placement} (sender | kanal | lied | song | nummer | position | titel | platz) {pos_nr}
(wähle | spiele | wechsel zu) (sender | kanal | lied | song | nummer | position | titel | platz) {pos_nr}

pos_first.intent
(wähle | spiele | wechsel zu) am (radio | gerät) (im | in der) {placement} (den | das) (erste | ersten) (sender | kanal | lied | song | nummer | position | titel)
(wähle | spiele | wechsel zu) am (radio | gerät) {placement} (den | das) (erste | ersten) (sender | kanal | lied | song | nummer | position | titel)
(wähle | spiele | wechsel zu) (den | das) (erste | ersten) (sender | kanal | lied | song | nummer | position | titel)

pos_last.intent
(wähle | spiele | wechsel zum) am (radio | gerät) (im | in der) {placement} (dem | den | der | ) (letzten) (sender | kanal | lied | song | nummer | position | titel)
(wähle | spiele | wechsel zum) (dem | den) (letzten) (sender | kanal | lied | song | nummer | position | titel)

pos_next.intent
(wähle | spiele | wechsel zu) am (radio | gerät) (im | in der) {placement} (den | die | das) (nächsten | nächste) (sender | kanal | lied | song | nummer | position | titel)
(wähle | spiele | wechsel zu) (den | die | das) (nächsten | nächste) (sender | kanal | lied | song | nummer | position | titel)

pos_previous.intent
(wähle | spiele | wechsel zu) am (radio | gerät) (im | in der) {placement} (den | die | das) (vorherigen | vorherige) (sender | kanal | lied | song | nummer | position | titel)
(wähle | spiele | wechsel zu) (den | die | das) (vorherigen | vorherige) (sender | kanal | lied | song | nummer | position | titel)

radios.intent
:0

search.intent
(suche | finde | gibt es) am (radio | gerät) (in der | im) {placement} auf der (liste | playlist | playliste) {query}
(suche | finde | gibt es) {query} (in der | auf der) (liste | playlist | playliste)

search_add_play_database.intent
(suche | finde) {query} (in der musikdatenbank | in der musiksammlung) und spiele (lied | titel | song | platz | sender | kanal | nummer) {pos_nr}
(suche | finde) {query} (in der musikdatenbank | in der musiksammlung) und spiele (lied | titel | song | platz | sender | kanal | nummer) {pos_nr} am radio (im | in der) {placement}

search_all_playlists.intent
(suche | finde) {query} in (allen | irgendeiner) (liste | listen | playliste | playlisten)
(gibt es | haben wir) {query} in irgendeiner (liste | playliste)

search_all_playlists_2.intent
(suche | finde) {query} in (allen | irgendeiner) (liste | listen | playliste | playlisten)
(gibt es | haben wir) {query} in irgendeiner (liste | playliste)

search_in_database.intent
(suche | finde) {query} (in der musikdatenbank | in der musiksammlung)

start_mpd.intent
(Mache | schalte) (das radio | die musik) an
(Mache | schalte) (das radio | die musik) (im | in der) {placement} an

stop_mpd.intent
(Mache | schalte) (das radio | die musik) aus
(Mache | schalte) (das radio | die musik) (im | in der) {placement} aus

vol_down.intent
mache mpd etwas leiser
mache das (radio | gerät) (im | in der) {placement} etwas leiser
mache mpd (im | in der) {placement} etwas leiser

vol_set_to.intent
(mache | stelle | setze | drehe) die lautstärke auf {pos_nr}
(mache | stelle | setze | drehe) die lautstärke am radio (im | in der) {placement} auf {pos_nr}

vol_up.intent
mache mpd etwas lauter
mache mpd (im | in der) {placement} etwas lauter
mehr lautstärke für mpd (im | in der) {placement}

Entity Dateien

placement.entity
:0

playlist.entity
:0

pos_nr.entity
#
##

query.entity
:0

radio.entity
:0

Dialog-Dateien

cancel.dialog
Vorgang abgebrochen.

changed_to.dialog
Ich wechsele zu Lied Nummer {pos_nr}

device_not_running.dialog
Der Server ist nicht erreichbar!

error_in_function_current_playlist.dialog
Ein Fehler in Funktion search in current playlist

feedback_query.dialog
Ich habe folgendes verstanden: {query} Ist das korrekt?

missunderstand_query.dialog
Bitte die Suche in der Musikdatenbank erneut starten!

missunderstand_selection.dialog
Ich habe die Bezeichnung der Rubrik nicht verstanden. Die Suche wird abgebrochen.

mpd_connect.dialog
Verbunden!

mpd_error.dialog
Es ist ein Fehler im Modul mpd aufgetreten.

mpd_not_running.dialog
M P D läuft am angegebene Gerät nicht!

no_result.dialog
Die Suche nach {query} im Feld {selection} der Musikdatenbank hatte kein Ergebnis.

playlist_not_found.dialog
Playliste nicht gefunden

query_found.dialog
Platz {pos} {name}

query_not_found.dialog
Den gesuchten Titel {query} gibt es nicht.

search_all_playlists.dialog
Ich habe den Suchbegriff {query} in der playliste {playlist} an Position {pos} gefunden. Der Titel ist {name}.

search_all_playlists_2.dialog
Ich habe den Suchbegriff {query} in der playliste {playlist} an Position {pos} gefunden. Der Titel ist {name}.

some_error.dialog
Irgendein fehler ist aufgetreten

speak_current_title.dialog
Platz {pos} {title}

speak_current_title_artist.dialog
Platz {pos} {title} von {artist}

starting_with_number_one.dialog
Ich starte die neue Playliste mit Platz 1.

term_not_found.dialog
Ich habe den Suchbegriff {query} in keiner playliste gefunden.

to_play.dialog
Soll ich einen der titel oder einen sender spielen? Antworte mit ja oder nein.

what_to_search_in_database.dialog
Wonach soll ich suchen? Nenne den Suchbegriff.

what_type.dialog
Was genau suchst du? Einen künstler oder künstlerin: sage künstler. einen songtitel? sage: titel. einen albumtitel? sage album. einen Musikgattung wie blues, rock oder klassik? sage gattung.

where_to_play.dialog
An welchem Radio soll die Musik gespielt werden?

which_data_field.dialog
In welcher Rubrik soll ich suchen? Sage Künstler, Titel, Album oder Musikrichtung.

which_playlist_to_play.dialog
Welche play liste soll ich öffnen? Nenne einen Namen oder schweige, wenn keine neue Play Liste geladen werden soll.

which_position_to_play.dialog
Nenne eine Position.

which_title_to_play.dialog
Das Suchergebnis umfasst {numbers} Titel. Welchen Titel soll ich spielen? Sage alle, keinen oder nenne eine Startnummer, höchstens {numbers}

Voc-Dateien

album.voc
album
plattentitel
platte
cd

all.voc
alle
alles

artist.voc
künstler
künstlerin
sänger
sängerin
gruppe
band

cancel.voc
Suche abgebrochen

genre.voc
gattung
musikart
musikrichtung

no.voc
nein

none.voc
none

nothing.voc
keinen
keine
nichts

title.voc
titel
lied
song
songtitel

yes.voc
ja

Über Funktionen

Eine große Herausforderung bestand in der unterschiedlichen Erscheinungsbild, wie MP3-Dateien, Internet-Streams und Podcasts in MPD-Playlisten repräsentiert werden können. Dieser Skill kann derzeit nur mit Playlisten im m3u-Format oder im URL-Format arbeiten. Weitere Playlist-Formate werden zur Zeit nicht sicher unterstützt bzw. sind nicht geprüft worden. Aber schon die unterstützen Formate allein erforderten bisweilen recht komplexe Evaluierungen um daraus sprechbare Aussagen zu machen. Hoffentlich funktioniert das auch in anderen Sprachen.

Ich habe mich bemüht den Funktionen „sprechende“ selbsterklärende Namen zu geben. Zusätzlich gibt es oberhalb einiger Funktionen eine erklärende Kommentarzeile.