A module for the MagicMirror using a music on demand service.
This module allows you to play music from Deezer with puppeteer. That means you need at least a free account from Deezer. It is meant to be used with a speech recognition module like MMM-AssistantMk2, but it should work with other modules as long as you send the correct notifications as described below. Since this module opens up a chromium instance and navigates through the deezer website to play music in the background, it may take some time or you may get timeouts on low end hardware like a Raspberry Pi.
Confirmed working environment:
Install like that:
cd ~/MagicMirror/modules/
git clone https://github.com/ptrk95/MMM-MusicOnDemand.git
cd MMM-MusicOnDemand
npm install
It installs a puppeteer package with a chromium browser (~100mb-270mb). If you don't want to use the puppeteer browser or if you're running on a Raspberry Pi you may want to delete this extra chromium browser:
cd ~/MagicMirror/modules/MMM-MusicOnDemand/node_modules/puppeteer
rm -r .local-chromium
Copy the following to your config.txt:
{
module: "MMM-MusicOnDemand",
position: "upper_third",
config: {
chromiumPath : "/usr/bin/chromium-browser", // chromiumPath : null, if you want to use puppeteer browser
showCover : true,
showBrowser : false, // change to true if you want to see whats going on in the browser
userDataDir : "/home/pi/.config/chromium" //the directory of your user data from the browser, default is for raspberry pi without changes
}
},
Since Deezer uses reCaptcha you need to use a preinstalled browser! Open up the browser you use for puppeteer (e.g. Pi users: chromium). Log in to Deezer. Close the Browser and make sure the next time you go to the Deezer website, you should already be logged in!
Change the userDataDir in your config file to your needs. For example the path of your user data directory using a Raspberry Pi without any changes should be: "/home/pi/.config/chromium"
The module has for now 7 features:
To use the above features you have to send predefined notifications to this module. This is a table of the notifications:
Notification | payload | Description |
---|---|---|
"AtMusicOnDemand" | payload.message="Play" | Plays music |
"AtMusicOnDemand" | payload.message="Pause" | Pauses music |
"AtMusicOnDemand" | payload.message="Next" | Plays next Title |
"AtMusicOnDemand" | payload.message="Previous" | Plays previous Title |
"AtMusicOnDemand" | payload.message="Close" | Closes Browser |
"AtMusicOnDemand" | payload.message="Flow" | Plays your personal soundtrack made by Deezer |
"AtMusicOnDemand" | payload.message="Loved" | Plays your favourite tracks randomly |
"AtMusicOnDemand" | payload.message="Artist"; payload.Artist="NAME_OF_ARTIST" | Searches for a Artist and plays hits |
"AtMusicOnDemand" | payload.message="Title"; payload.Title="NAME_OF_TITLE" | Searches for a Title and plays it |
For example, this will search for the title "Losing it" if you send this with your module:
this.sendNotification('AtMusicOnDemand', {message: "Title", Title: "Losing it"});
As you can see the information about the name of the title is needed for this action, this is where a speech recognition software comes in handy. I already set up a couple of "transcription hooks" and even two gactions in combination with MMM-AssistantMk2, so that all the features are available.
First you have to add the following commands to your config file:
command: {
"CLOSE_MUSIC": {
notificationExec: {
notification: "AtMusicOnDemand",
payload: {
message: "Close",
}
},
},
"SEARCHTITLE": {
notificationExec: {
notification :() =>{
return "AtMusicOnDemand"
},
payload:(params, key)=> {
return {
message:"Title",
Title: params.Title,
}
}
},
},
"SEARCHARTIST": {
notificationExec: {
notification :() =>{
return "AtMusicOnDemand"
},
payload:(params, key)=> {
return {
message:"Artist",
Artist: params.Artist,
}
}
},
},
"PLAYMUSIC": {
notificationExec: {
notification: "AtMusicOnDemand",
payload: {
message: "Play",
}
},
},
"NEXT_TITLE": {
notificationExec: {
notification: "AtMusicOnDemand",
payload: {
message: "Next",
}
},
},
"PAUSE_MUSIC": {
notificationExec: {
notification: "AtMusicOnDemand",
payload: {
message: "Pause",
}
},
},
"PREV_TITLE": {
notificationExec: {
notification: "AtMusicOnDemand",
payload: {
message: "Previous",
}
},
},
"FLOW": {
notificationExec: {
notification: "AtMusicOnDemand",
payload: {
message: "Flow",
}
},
},
"LOVED": {
notificationExec: {
notification: "AtMusicOnDemand",
payload: {
message: "Loved",
}
},
},
},
Then add this transcription hooks to the config file. Of course you can change the patterns to what ever you wish, for example translate it in your language:
transcriptionHook: {
"PLAYMUSIC":{
pattern: "play music",
command: "PLAYMUSIC",
},
"NEXT_TITLE":{
pattern: "next song",
command: "NEXT_TITLE",
},
"PAUSE_MUSIC":{
pattern: "pause",
command: "PAUSE_MUSIC",
},
"PREV_TITLE":{
pattern: "previous song",
command: "PREV_TITLE",
},
"CLOSE_MUSIC":{
pattern: "stop music",
command: "CLOSE_MUSIC",
},
"FLOW":{
pattern: "play flow",
command: "FLOW",
},
"LOVED":{
pattern: "play my songs",
command: "LOVED",
},
},
For the search features you have to add gactions to the config file and followed the last chapter here!:
action:{
"SEARCHTITLE" : {
command: "SEARCHTITLE"
},
"SEARCHARTIST" : {
command: "SEARCHARTIST"
},
},
Now download gactions (if you haven't done it as described here):
#example for RPI
cd ~/MagicMirror/modules/MMM-AssistantMk2/gaction
wget https://dl.google.com/gactions/updates/bin/linux/arm/gactions
chmod +x gactions
You can use and modify my actions.js as you please. I commented german phrases besides the english ones, so you can copy and paste it if you know german. But remember to place it here: MagicMirror/modules/MMM-AssistantMk2/gaction And also don't forget to do the following:
cd ~/MagicMirror/modules/MMM-AssistantMk2/gaction
./gactions update --action_package actions.json --project YOUR_PROJECT_ID
./gactions test --action_package actions.json --project YOUR_PROJECT_ID
That's most likely a versioning error between puppeteer and your installation of Chromium/Chrome!
Try:
cd ~/MagicMirror/modules/MMM-MusicOnDemand
npm install puppeteer@1.11.0
And make sure your Chromium version is at least Version 65.0.3325.181!
Update with:
sudo apt-get install chromium-browser
Also make sure you set the correct path in the config.txt file.
For Raspberry Pi 3 it is: "/usr/bin/chromium-browser"