Es gibt unter https://metacpan.org/pod/Audio::Play::MPlayer
ein etwas älteres und nicht sonderlich ausgereiftes Modul zur Bedienung des MPlayers. Ich habe damit jetzt mal Spaßeshalber eine Kontrolle durch FHEM umgesetzt - damit kann ich Audiofiles und Sprachnachrichten auch auf einem etwas abseits stehenden Raspberry Pi ausgeben.
Die Lautstärkeregulierung funktioniert noch nicht, bisher habe ich nur die Möglichkeit gefunden, mit einem Skriptaufruf den Alsamixer zu setzen und abzufragen...
Codegfragment:
use Audio::Play::MPlayer;
..
#############################################################################
#
# event handler for RpiAudio
#
#############################################################################
my $player;
sub Rpieventhandler($$){
my ($bid,$event) = @_;
return
if($event =~ /playinfo.*/);
Log 1,"[Rpieventhandler] called with $bid and event $event";
my ($name90,$zom,$cmd,$src,$srd,$fil,$vol,$volnew,$trk,$ret);
$vol = ReadingsVal($bid,"volume",undef);
$trk = ReadingsVal($bid,"track","");
if($event =~ /origin (.+)/ ){
$src = $1;
#-- normalize source
if($src =~ /(p|P)laylist/){
$src = "Playlist";
$fil = "Playlist.m3u";
}elsif($src =~ /(w|W)eckmusik/){
$src = "Weckmusik";
$fil = "Weckmusik.m3u";
}elsif($src eq "speech"){
$fil = "speech.mp3";
#--- Unknown, but only in case of origin event
}elsif( $event =~ /origin (.+)/ ){
$src = $1;
my $artist = BOSEartists($src);
if( !$artist ){
speak("RPI.OG","Ich habe keine Quelle $src gefunden");
return;
}
Log 1,"===========> searching for artist $src, found $artist";
$src = "Delayed";
$fil = "Playlist.m3u";
$srd = "";
}
fhem("setreading RpiAudio.DG origin $srd");
#-- play it
$player = Audio::Play::MPlayer->new;
if($src eq "speech"){
##fhem("set $bid volume 25");
mplay_loadfile($player,$fil);
}else{
##fhem("set $bid volume 25");
mplay_loadlist($player,$fil);
}
fhem("set RpiAudio.DG on");
mplay_poller($player);
}elsif( $event eq "off"){
mplay_stop($player);
fhem("set RpiAudio.DG off");
fhem("setreading RpiAudio.DG playinfo stopped");
}elsif( $event eq "nextTrack"){
mplay_forward($player);
}elsif( $event eq "prevTrack"){
mplay_back($player);
}elsif( $event =~ /volume. (\d+)/ ){
$volnew = $1;
#amixer set 'Speaker' 115
}
}
sub mplay_loadlist{
my ($self,$list) = @_;
$self->command( qq{loadlist "/home/music/$list"} );
$self->{state} = 2;
}
sub mplay_loadfile{
my ($self,$file) = @_;
$self->command( qq{loadfile "/home/music/$file"} );
$self->{state} = 2;
}
sub mplay_stop{
my ($self) = @_;
$self->command( 'quit' );
undef $self;
}
sub mplay_forward{
my ($self) = @_;
$self->command( qq{pt_step 1} );
}
sub mplay_back{
my ($self) = @_;
$self->command( qq{pt_step -1} );
}
sub mplay_poller{
my ($self) = @_;
if( defined($self) && (ReadingsVal("RpiAudio.DG","state","") ne "off") ){
$self->poll(0);
if( ($self->state != 0) || ($self->title ne "") ){
my ($trk,$art,$ret194,$ret90);
$trk = $self->title;
$art = $self->artist;
$ret194 = "playing <i>".$trk."</i><br>by <i>".$art."</i>";
fhem("setreading RpiAudio.DG playinfo $ret194");
$self->{state} = 2;
InternalTimer(time()+5, "mplay_poller", $self,0);
}else{
Log 1,"state=0";
mplay_stop($self);
fhem("set RpiAudio.DG off");
fhem("setreading RpiAudio.DG playinfo stopped");
}
}
}
List des entsprechenden Dummy:
Internals:
FUUID 5e16246b-f33f-a726-13a8-adb8097e4177243f
NAME RpiAudio.DG
NR 232
STATE stopped
TYPE dummy
READINGS:
2020-01-12 18:40:31 playinfo stopped
2020-01-12 18:40:31 state off
Attributes:
cmdIcon on:rc_PLAY off:rc_STOP nextTrack:rc_NEXT prevTrack:rc_PREVIOUS
group Sound
room Multimedia
setList volume:slider,0,1,100 origin:SWR3,Jackie,Peter,Playlist,Weckmusik,speech
stateFormat playinfo
userReadings origin:none {}, playinfo:none {}
webCmd volume:origin:on:nextTrack:prevTrack:off
webCmdLabel Volume:Source:x:y:z:
mit dem MPD stat MPlayer kannst dich nicht anfreunden ?
MPD kann auch DLNA(gerade gegoogled). Dann lässt er sich ja auch ohne FHEM z.B. m. WindowsMediaplayer steuern oder in der "einfachvariante" mit dem DLNARenderer-Modul.
@Wzut: Hast Du DLNARenderer mal ausprobiert ?
Grüße Markus
Meine Musik liegt auf der NAS, die hat einen Minimserver. Wenn ich die NAS-Musikbibliothek durch einen MPD verwalten ließe, der auf einem RaspberryPi liegt, wäre mir das zuviel Netzwerktraffic.
Auf den Minimserver greife ich sowohl seitens meiner BOSE-Systeme als auch seitens meiner diversen wandhängenden Tablets zu.
Das Ziel war also, auf dem Raspberry Pi einen einigermaßen schlanken Player zu haben, der einzelne Stücke oder ganze Playlists von der NAS abspielen kann. Und das geht direkt mit dem MPlayer wunderbar.
Mit anderen Worten: Für mein Konzept ist mir der MPD zu voluminös - und da die Fernsteuerung des MPlayer mit den oben gezeigten Codefragmenten bestens funktioniert, ist das momentan der Weg meiner Wahl.
Ich werde mal ein Diagramm dazu machen.
LG
pah
Zitat von: Prof. Dr. Peter Henning am 13 Januar 2020, 11:01:00
Für mein Konzept ist mir der MPD zu voluminös
--snipp --
Ich werde mal ein Diagramm dazu machen.
Wenn du mit voluminös dessen interne DB mit Verwaltung von Musikstücken und Playlisten meinst :
ist mir auch zu aufwendig und nutze sie auch nicht.
ja male mal vllt. findest sich noch eine andere Lösung, denn mit dem Lautstärke Problem haben sie auch schon im Radiostream Thread gekämpft
Ich habe eine modifizierte Version des Moduls 98_Medialist gebaut, mit dem ich wunderbar (und auch per FTUI) meine Playlisten auf dem MinimServer erstellen kann. Inzwischen ist das System so weit, dass ich den Sprachbefehl
"Spiele etwas von Bach im Wohnzimmer"
einsetze, um nach dem Künstler "Bach" zu suchen, eine Playlist zu erstellen, diese auf dem MinimServer abzulegen, diesen zum Rescan zu bewegen und meiner BOSe-Anlage zu sagen, es möge diese abspielen...
LG
pah
Edit: Welches war denn der Radiostream-Thread ?
Ich habe hier übrigens ein ziemlich altes Modul mit vielen Fehlern gefunden, das man ggf. modifizieren könnte, um den Alsamixer direkt zu kontrollieren:
http://www.topeg.de/public/perl/modules/audio_alsa_mixer
Zitat von: Prof. Dr. Peter Henning am 13 Januar 2020, 17:35:54
Edit: Welches war denn der Radiostream-Thread ?
hier , direkt der letzte Beitrag und Thema Volume Regelung -> https://forum.fhem.de/index.php/topic,18531.msg844068.html#msg844068
OK, ich habe dort etwas eingehängt. Das Modul aus dem Link weiter oben musste dringend etwas gesäubert werden. Installiert man das als
/usr/local/share/perl/5.xxx/Audio/Alsa/Mixer.pm
kann man die Beispieldateien prima ausführen. Im Prinzip ist das ein Perl-Wrapper um die Alsamixer-Anwendung - egal, es funktioniert. Werde ich mal in meinen Code zur Ansteuerung von MPlayer einbauen.
LG
pah