Mycroft Community Forum

Multiroom sound with Mark II

Hey there.

Because I sell all my Google Home devices at the moment, I ask myself if I will need more than my 3-pack of Mark II in future to hear my favourite music all over my flat.

Hint word should: wireless multiroom
Google is doing this great and I guess alexa too but for it is important if there will be any chance to do this with Mycroft. Is the sound of the Mark II mono or stereo? Would it be a skill thing to do thing like playing my fav radio sender in 2 room without echo or are there plans to handle this with the system-environment?

I hope the get some informations here. Otherwise I thing I need some good multiroom speaker without google/alexa/bixby/cortana sh**t.

Greetings by suisat

I use snapcast for multiroom audio, as it has timestamps, so the audio is fully synced. I use Mycroft to control Spotify and Spotify i set to use my snapcast as player.

I have been thinking of makin a skill that installs snapcast on the devises, but hassnt yet as my room have real speakers conected with snapcast for music output. Better sound than mark_1 or picroft in a box with google AIY kit :slight_smile:

3 Likes

Hi suisat, we don’t currently have multiroom functionality, but I can certainly see the appeal.

Snapcast seems like a good project, would be interested to hear if anyone has got it working on a Mycroft device?

Any news plans for this. Google speakers can do this, Amazon and others too. Why not mycroft too?

I would love to see a feature like this.

Snapchat is on my to-do list. Should not be far of on my list though.

1 Like

I assume you mean snapcast. I only discovered this wonderful piece of software in the past week. Thanks Sonos & Snips for starting the conversation for us! :upside_down_face:

1 Like

Yeah, I meant snapcast (snapchat is that annoying stuff all my daughters use)

First discovered it about a year ago on youtube;

But recently got pointed back to it via here;
https://www.whirlwind.nl/nieuw/bericht/multi-room-spotify-via-raspberry-pi

A quick search showed me that they even make my life very easy for my MycroftOS project as they created Buildroot packages for it.

I only still figuring out, what would be the best way to implement it. It kind of hooks into the same question I have about the Chromecast implementation.

“How to send output to a sink”

“Hey Mycroft”, “Play blabla from youtube on Chromecast/mpd/snapcast/etc.”

(Chromecast should alrady be there in Mycroft core, but no clue how it works yet)

:rofl: nice one…

snapcast seems to be nice but I really want a lot of speakers for a small price when I think to the topic “multiroom-speaker”. There are some dudes playing with the idea to bring a snapcast-client to an esp32. But at the moment it seems to be a device like a pi-zero, or am I wrong?

I really like the idea of Squeezebox wich is an openSource multiroom server/client by LG. Some people in the slimdevices community bring the client to a tiny, cheap ESP32-WROVER-IPEX and combine them with a I2S stereo decoder. Like this one.
The user philippe_44 create a pcb for this, what looks awesome:

Source in this post.

Perhaps I need to try it on my own after do my soldering job :astonished:

When I remember back to my bad-google times I can remember that they implement this by:
“Hey Mycroft”, “Play blabla from youtube on device loudsprecher”

@j1nx, In my kodi skill I extract the url and pass it to kodi but I don’t think that is what you are looking for.

    # extract the youtube links from the provided search_list
    def get_youtube_links(self, search_list):
        # search_text = str(search_list[0])
        search_text = str(search_list)
        query = urllib.parse.quote(search_text)
        url = "https://www.youtube.com/results?search_query=" + query
        response = urllib.request.urlopen(url)
        html = response.read()
        # Get all video links from page
        temp_links = []
        all_video_links = re.findall(r'href=\"\/watch\?v=(.{11})', html.decode())
        for each_video in all_video_links:
            if each_video not in temp_links:
                temp_links.append(each_video)
        video_links = temp_links
        # Get all playlist links from page
        temp_links = []
        all_playlist_results = re.findall(r'href=\"\/playlist\?list\=(.{34})', html.decode())
        sep = '"'
        for each_playlist in all_playlist_results:
            if each_playlist not in temp_links:
                cleaned_pl = each_playlist.split(sep, 1)[0]  # clean up dirty playlists
                temp_links.append(cleaned_pl)
        playlist_links = temp_links
        yt_links = []
        if video_links:
            yt_links.append(video_links[0])
            LOG.info("Found Single Links: " + str(video_links))
        if playlist_links:
            yt_links.append(playlist_links[0])
            LOG.info("Found Playlist Links: " + str(playlist_links))
        return yt_links

There is also this from a couple years ago…

Also Found this for mpd
https://python-mpd2.readthedocs.io/en/latest/topics/commands.html#the-current-playlist