FHEM Forum

FHEM - Anwendungen => Multimedia => Thema gestartet von: Reinerlein am 24 März 2018, 23:56:22

Titel: SONOS: Neue Version vom 24.3.2018
Beitrag von: Reinerlein am 24 März 2018, 23:56:22
Hallo zusammen,

da ich ein paar kleinere Sachen drin habe, hier mal eine neue Version.

Folgendes ist enthalten:
Wie immer ab sofort im SVN oder ab Morgen per Update...

Grüße
Reinerlein
Titel: Antw:SONOS: Neue Version vom 24.3.2018
Beitrag von: Elektrolurch am 23 September 2018, 11:42:05
Hallo Reinerlein,

ich habe mit dem Befehl:
set player CurrentTrackPosition <Wert>
ein Problem.
Zitat:
CurrentTrackPosition <TimePosition>: Setzt die aktuelle Zeitposition im Lied. Man kann hier auch relative Angaben machen wie '+0:00:10' oder nur '+10'. Zusätzlich kann man auch Prozentwerte angeben wie z.B. '+10%'. Natürlich können diese Angaben auch negativ sein.

Wenn ich den Wert mit "+10" angebe, springt die Position leider nicht relativ um 10 s vorwärts, sondern auf die Position 00:00:10, wird also nicht relativ, sondern absolut interpretiert.

     2018-09-23 11:31:56   currentTrack    3
     2018-09-23 11:31:56   currentTrackDuration 0:07:39
     2018-09-23 11:31:56   currentTrackDurationSec 459
     2018-09-23 11:31:56   currentTrackPosition 0:00:00
     2018-09-23 11:31:56   currentTrackPositionSec 0
     2018-09-23 11:10:15   currentTrackPositionSimulated 0:00:24
     2018-09-12 16:11:29   currentTrackPositionSimulatedPercent 0.0
     2018-09-23 11:10:15   currentTrackPositionSimulatedSec 24


Die "simulierte" Position stimmt auch nicht, da mindestens schon 4 Minuten abgelaufen sind.

Ich wollte mir eine Rewind / Forward - Funktion implementieren, um innerhalb eines Tracks vor- und zurück zu navigieren, z.B. in 10 s Schritten.

Eine Idee, worin das Problem bestehen könnte?

Gruß

Elektrolurch
Titel: Antw:SONOS: Neue Version vom 24.3.2018
Beitrag von: Reinerlein am 23 September 2018, 14:05:59
Hi Elektrolurch,

das ist ein Fehler :(
Ich habe den aber auch gefunden, und gefixt. Ich habe gerade nur einen halben Umbau wegen der temporären Wiedergabe drin, sodass ich erstmal schauen muss, was ich noch alles fertigmachen muss, damit das Modul erstmal wieder normal läuft :)

Ansonsten schonmal für Bastler:

} elsif ($workType eq 'setCurrentTrackPosition') {
my $value1 = $params[0];

if (SONOS_CheckProxyObject($udn, $SONOS_AVTransportControlProxy{$udn})) {
if ($value1 =~ m/([+-]{0,1})(\d+:\d+:\d+|\d+:\d+|\d+)(\%{0,1})/) {
my $sign = $1;
my $value1Sec = SONOS_GetTimeSeconds(SONOS_ExpandTimeString($2));
my $percent = $3;

$sign = '' if (!defined($sign));
$percent = '' if (!defined($percent));

# Positionswerte abfragen...
my $result = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0);
my $pos = $result->getValue('RelTime');
if ($pos !~ /\d+:\d+:\d+/i) { # e.g. NOT_IMPLEMENTED
$pos = '0:00:00';
}
$pos = SONOS_GetTimeSeconds($pos);
my $duration = SONOS_GetTimeSeconds($result->getValue('TrackDuration'));

# Neue Position berechnen...
my $newPos = 0;
if ($sign =~ m/[+-]/) {
if ($percent eq '') {
$newPos = ($pos + $value1Sec) if ($sign eq '+');
$newPos = ($pos - $value1Sec) if ($sign eq '-');
} else {
$newPos = ($pos + ($value1Sec * $duration / 100)) if ($sign eq '+');
$newPos = ($pos - ($value1Sec * $duration / 100)) if ($sign eq '-');
}
} else {
$newPos = $value1Sec;
}

# Sicherstellen, dass wir im Bereich des Titels bleiben...
$newPos = 0 if ($newPos < 0);
$newPos = $duration if ($newPos > $duration);

# Neue Position setzen
$SONOS_AVTransportControlProxy{$udn}->Seek(0, 'REL_TIME', SONOS_ConvertSecondsToTime($newPos));
}

my $trackPosition = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0)->getValue('RelTime');
if ($trackPosition !~ /\d+:\d+:\d+/i) { # e.g. NOT_IMPLEMENTED
$trackPosition = '0:00:00';
}
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.$trackPosition);
}
Das Wort "setCurrentTrackPosition" kommt nur einmal in der 00_SONOS.pm vor...

Grüße
Reinerlein
Titel: Antw:SONOS: Neue Version vom 24.3.2018
Beitrag von: Elektrolurch am 23 September 2018, 16:45:01
Danke.
Aber da stimmtdas Prototyping nicht:
1.
Too many arguments for main::SONOSPLAYER_SimulateCurrentTrackPosition at ./FHEM/00_SONOS.pm line 1593, near "$hash)"
In 21_SONOSPLAYER gehört da noch ein $ in die Parameterliste.
2.
Too many arguments for main::SONOS_StartMetadata at ./FHEM/00_SONOS.pm line 3615, near "$nostart)"
Too many arguments for main::SONOS_StartMetadata at ./FHEM/00_SONOS.pm line 4019, near "])"
Deklaration:
sub SONOS_StartMetadata($$$$) {
   my ($workType, $udn, $res, $meta, $nostart) = @_;

und Zeile 4019:
            SONOS_StartMetadata($workType, $udn, $songURI, $songMeta, $params[1]);


Fehlt wohl auch ein $. :-)

Gruß

Elektrolurch


Titel: Antw:SONOS: Neue Version vom 24.3.2018
Beitrag von: Reinerlein am 23 September 2018, 20:24:25
Hi Elektrolurch,

danke für die Hinweise. Mich wundert nur, dass ich diese nirgendwo gesehen habe. Ich habe gerade mal die Logs nach sowas durchsucht.
Bei mir tritt das komischerweise nicht in Erscheinung...

Habe ich aber angepasst.

Grüße
Reinerlein
Titel: Antw:SONOS: Neue Version vom 24.3.2018
Beitrag von: Elektrolurch am 25 September 2018, 12:00:07
Hallo Reinerlein,

die Meldungen hatte ich auch nur, als ich die geänderte 00SONOS per reload aktiviert habe. Hat mich auch gewundert, denn früher ist das bei einem Neustart nicht gemeldet worden. Seis drum, habe ich ja schnell gefixed.
Läuft alles: Habe jetzt zwei Buttons (alles iPhone gerecht), einer für rewind, der andere für forward.
Drückt man z.B. den forward - Button, springt der Track um 10 s weiter. Drückt man innerhalb von 3 s nochmal, springt das Abspielen auf den nächsten Track.
Innerhalb von 3 s bis 20 s wird beim Drücken des Forward - Buttons jeweils die Sprungweite verdoppelt, also 20 s, dann 40 s usw. Wartet man länger als 20 s bis zum Drücken, dann steht die Sprungweite wieder auf 10 s.
Die Buttons werden dynamisch angepasst, unter dem Icon steht jeweils die aktivierte Aktion als Text.
Nettes Spielzeug.
Also noch Mal Danke für den schnellen fix.

Elektrolurch