Home of the Squeezebox™ & Transporter® network music players.
Page 3 of 5 FirstFirst 12345 LastLast
Results 21 to 30 of 41
  1. #21
    Senior Member
    Join Date
    May 2008
    Location
    Canada
    Posts
    3,366

    Question for Michael (or a deep enough expert on LMS core)

    Quote Originally Posted by mherger View Post
    > But with virtual players, this is what you would get. If you change the
    > volume of one slave player, then only its volume changes. Only when you
    > change the volume of the virtual player itself will a proportional
    > change on all volumes happen. So if you don't want that, always use
    > slave volumes. That the conceptual difference between a group and a
    > virtual new player.


    Ok, I see. But I don't see this happen... That would be a massive change
    to LMS. Handling synced players is all over the place. Introducing yet
    another related, but different approach would be a big involvement.

    What I could imagine is the group approach. That would mostly be UI
    changes, plus a way to define and handle saved sync groups.

    I'll have to play with the virtual player idea. Mentally, at least. Can
    you send me a pull request when done? :-)

    --

    Michael
    If I can direct one question to you Michael, before trying the baby step with a set of "fake" squeezelite players (that I know how to do very well know ) but I'd like to know if it's possible to create such virtual player purely in LMS in Perl. I this is a dead end, I don't think I'll try because although the idea of a fake squeezelite instance is good to start, ultimately it means handling real audio content for it which I don't like. So if I can't have a player that is just a container for playlists, volume, commands & control (start, stop pause ...) and in fact a "link" to a real LMS group, then I don't think its worth the effort.
    LMS 7.7, 7.8 and 7.9 - 5xRadio, 3xBoom, 4xDuet, 1xTouch, 1 SB2. Sonos PLAY:3, PLAY:5, Marantz NR1603, JBL OnBeat, XBoxOne, XBMC, Foobar2000, ShairPortW, JRiver 21, 2xChromecast Audio, Chromecast v1 and v2, , Pi B3, B2, Pi B+, 2xPi A+, Odroid-C1, Odroid-C2, Cubie2, Yamaha WX-010, AppleTV 4, Airport Express, GGMM E5

  2. #22
    Babelfish's Best Boy mherger's Avatar
    Join Date
    Apr 2005
    Location
    Switzerland
    Posts
    19,803

    UI change for sync groups

    I'm sorry, totally missed that one...

    > If I can direct one question to you Michael, before trying the baby step
    > with a set of "fake" squeezelite players (that I know how to do very
    > well know ) but I'd like to know if it's possible to create such
    > virtual player purely in LMS in Perl.


    I'm sure it's possible. But unfortunately I can't say for sure how hard
    it would be. I guess you'd have to create a new Slim::Player::xXX class,
    inheriting from Slim::Player::Client. This could potentially be done as
    part of a plugin, outside LMS.

    --

    Michael

  3. #23
    Babelfish's Best Boy mherger's Avatar
    Join Date
    Apr 2005
    Location
    Switzerland
    Posts
    19,803

    UI change for sync groups

    > I'm sure it's possible. But unfortunately I can't say for sure how hard
    > it would be. I guess you'd have to create a new Slim::Player::xXX class,
    > inheriting from Slim::Player::Client. This could potentially be done as
    > part of a plugin, outside LMS.


    I've been thinking over this idea a little more... There are technical
    challenges, and UX challenges. Inheriting from Slim::Player::Player
    might be one way to go. Groups would show up as any other player,
    keeping compatibility with client software. You pick it, start playback,
    and it would set up the syncing if needed.

    Sync group management in existing software (incl. the web UI, if not
    modified) would list the real players as synced to the sync group proxy
    player ("Upstairs"): "Upstairs, Bedroom, Kid's room". The individual
    players keep their own playlist.

    Changing the sync configuration from any of the members would behave the
    same as any synced group of players. They can leave the group any time
    they want. You could end up with one controller controlling the sync
    group, but all member unsynced, resulting in no playback at all. But the
    next time the sync group is "powered on", it would re-connect all other
    players. UX challenge...

    Sync group aware clients could use the new player model string to
    customize the UI to eg. show the sync groups in some other UI element.

    Sync groups need to connect to LMS automatically when LMS is started,
    using some fake MAC address. They come with their own set of prefs.

    My optimistic thinking tells me that this would be the most compatible,
    least technically involved approach, ignoring some of the UX challenges.
    Not perfect, but a huge improvement anyway.

    --

    Michael

  4. #24
    Senior Member
    Join Date
    May 2008
    Location
    Canada
    Posts
    3,366
    Quote Originally Posted by mherger View Post
    > I'm sure it's possible. But unfortunately I can't say for sure how hard
    > it would be. I guess you'd have to create a new Slim::Player::xXX class,
    > inheriting from Slim::Player::Client. This could potentially be done as
    > part of a plugin, outside LMS.


    I've been thinking over this idea a little more... There are technical
    challenges, and UX challenges. Inheriting from Slim::Player::Player
    might be one way to go. Groups would show up as any other player,
    keeping compatibility with client software. You pick it, start playback,
    and it would set up the syncing if needed.

    Sync group management in existing software (incl. the web UI, if not
    modified) would list the real players as synced to the sync group proxy
    player ("Upstairs"): "Upstairs, Bedroom, Kid's room". The individual
    players keep their own playlist.

    Changing the sync configuration from any of the members would behave the
    same as any synced group of players. They can leave the group any time
    they want. You could end up with one controller controlling the sync
    group, but all member unsynced, resulting in no playback at all. But the
    next time the sync group is "powered on", it would re-connect all other
    players. UX challenge...

    Sync group aware clients could use the new player model string to
    customize the UI to eg. show the sync groups in some other UI element.

    Sync groups need to connect to LMS automatically when LMS is started,
    using some fake MAC address. They come with their own set of prefs.

    My optimistic thinking tells me that this would be the most compatible,
    least technically involved approach, ignoring some of the UX challenges.
    Not perfect, but a huge improvement anyway.

    --

    Michael
    Thanks Michael - Sorry I missed your reponse, I've been away due to personal challenges. I will start to look in that direction and report if I make some progress. That's the only thing I'm missing from LMS (okay, I'd like also to find a way to synchronize CC players, but this one is very unlikely to happen).
    LMS 7.7, 7.8 and 7.9 - 5xRadio, 3xBoom, 4xDuet, 1xTouch, 1 SB2. Sonos PLAY:3, PLAY:5, Marantz NR1603, JBL OnBeat, XBoxOne, XBMC, Foobar2000, ShairPortW, JRiver 21, 2xChromecast Audio, Chromecast v1 and v2, , Pi B3, B2, Pi B+, 2xPi A+, Odroid-C1, Odroid-C2, Cubie2, Yamaha WX-010, AppleTV 4, Airport Express, GGMM E5

  5. #25
    Senior Member
    Join Date
    May 2008
    Location
    Canada
    Posts
    3,366
    I've created the data structure for Groups and started thinking about it more, but unfortunately I'm hitting a rock now. Player inherits from Client and Client itself is a StreamingController object (created by its new(), it's not inherited). Problem is that as soon as a StreamingController is created, seems that I'm opening a can of worms as it wants a real socket to communicate to. I feel I don't need to create a StreamingController objects as all the playlist and stuff like that are hold by Client, but I'm failing to get a way to overload properly the new() method of Player (Client) to avoid creating a StreamingController object.
    LMS 7.7, 7.8 and 7.9 - 5xRadio, 3xBoom, 4xDuet, 1xTouch, 1 SB2. Sonos PLAY:3, PLAY:5, Marantz NR1603, JBL OnBeat, XBoxOne, XBMC, Foobar2000, ShairPortW, JRiver 21, 2xChromecast Audio, Chromecast v1 and v2, , Pi B3, B2, Pi B+, 2xPi A+, Odroid-C1, Odroid-C2, Cubie2, Yamaha WX-010, AppleTV 4, Airport Express, GGMM E5

  6. #26
    Babelfish's Best Boy mherger's Avatar
    Join Date
    Apr 2005
    Location
    Switzerland
    Posts
    19,803

    UI change for sync groups

    Oh... it looks as if you run into a similar problem I recently run into
    when playing with the idea of a web based player... crap. I liked the idea.
    --

    Michael

  7. #27
    Senior Member
    Join Date
    May 2008
    Location
    Canada
    Posts
    3,366
    Quote Originally Posted by mherger View Post
    Oh... it looks as if you run into a similar problem I recently run into
    when playing with the idea of a web based player... crap. I liked the idea.
    --

    Michael
    I've not given up yet, but it seems that I'll need to "import" a lot of code. I'm think of direclty copying "client.pm" and starting from there. Do you think that'd be doable? Sorry for the basic question, but, at the end, what object is creating an entry in Player's list?
    LMS 7.7, 7.8 and 7.9 - 5xRadio, 3xBoom, 4xDuet, 1xTouch, 1 SB2. Sonos PLAY:3, PLAY:5, Marantz NR1603, JBL OnBeat, XBoxOne, XBMC, Foobar2000, ShairPortW, JRiver 21, 2xChromecast Audio, Chromecast v1 and v2, , Pi B3, B2, Pi B+, 2xPi A+, Odroid-C1, Odroid-C2, Cubie2, Yamaha WX-010, AppleTV 4, Airport Express, GGMM E5

  8. #28
    Senior Member
    Join Date
    May 2008
    Location
    Canada
    Posts
    3,366
    Quote Originally Posted by mherger View Post
    Oh... it looks as if you run into a similar problem I recently run into
    when playing with the idea of a web based player... crap. I liked the idea.
    --

    Michael
    Another option is to create a squeezelite instance which does nothing, but create a subclass of "squeezebox2" dedicated to that, but that hurts my view of elegance as this instance will be streamed data and everything for nothing - such a waste.
    Last edited by philippe_44; 2017-12-06 at 10:33.
    LMS 7.7, 7.8 and 7.9 - 5xRadio, 3xBoom, 4xDuet, 1xTouch, 1 SB2. Sonos PLAY:3, PLAY:5, Marantz NR1603, JBL OnBeat, XBoxOne, XBMC, Foobar2000, ShairPortW, JRiver 21, 2xChromecast Audio, Chromecast v1 and v2, , Pi B3, B2, Pi B+, 2xPi A+, Odroid-C1, Odroid-C2, Cubie2, Yamaha WX-010, AppleTV 4, Airport Express, GGMM E5

  9. #29
    Babelfish's Best Boy mherger's Avatar
    Join Date
    Apr 2005
    Location
    Switzerland
    Posts
    19,803

    UI change for sync groups

    > I've not given up yet, but it seems that I'll need to "import" a lot of
    > code. I'm think of direclty copying "client.pm" and starting from there.


    Yeah, OO is a nice concept... but sometimes you have to somehow hack
    around it.

    > Do you think that'd be doable? Sorry for the basic question, but, at the
    > end, what object is creating an entry in Player's list?


    TBH: I don't know...

    --

    Michael

  10. #30
    Senior Member
    Join Date
    May 2008
    Location
    Canada
    Posts
    3,366
    Some good progress - via a hack of Client, I'm now able to create a "virtual" player and make it synchronized with real players, so there might be a chance to success. I now need to do synchro at play / undo stop at stop, but this looks good
    LMS 7.7, 7.8 and 7.9 - 5xRadio, 3xBoom, 4xDuet, 1xTouch, 1 SB2. Sonos PLAY:3, PLAY:5, Marantz NR1603, JBL OnBeat, XBoxOne, XBMC, Foobar2000, ShairPortW, JRiver 21, 2xChromecast Audio, Chromecast v1 and v2, , Pi B3, B2, Pi B+, 2xPi A+, Odroid-C1, Odroid-C2, Cubie2, Yamaha WX-010, AppleTV 4, Airport Express, GGMM E5

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •