• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

VoiceControl module

Scheduled Pinned Locked Moved Utilities
79 Posts 27 Posters 98.4k Views 29 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    shashank @thereisnotry87
    last edited by yawns Feb 9, 2017, 6:51 AM Feb 9, 2017, 2:56 AM

    @thereisnotry87 hi, no need to mention voicecontrol commands in config.js file, just mention only as below , make sure you have installed

    sudo apt-get install python-pyaudio python3-pyaudio sox
    

    and
    copy all pmdl files in MM root folder

    {
    module: 'voicecontrol',
    	    position: 'top_left',
    	config: {
                }
    },
    

    go to /usr/share/alsa/alsa.conf and change 0 to 1 in below parameters

    defaults.ctl.card 1
    defaults.pcm.card 1,
    

    this worked for me.

    1 Reply Last reply Reply Quote 1
    • S Offline
      shramik49
      last edited by Mar 20, 2017, 8:07 AM

      hi,
      i am having difficulty in adding voicecontrol module on my magic mirror.
      i want to use voicecontrol to use camera.
      so can someone help me with the steps to follow?

      1 Reply Last reply Reply Quote 0
      • P Offline
        pepemujica
        last edited by Apr 9, 2017, 5:51 PM

        Hi! is it possible with this module to hide/show different modules or even switch profile with profile switcher?

        Kind regards

        1 Reply Last reply Reply Quote 0
        • D Offline
          disakos
          last edited by Apr 16, 2017, 6:49 AM

          Hello Guys , @alexyak .
          I;m running this module and hot word detection is working ok, i used my own keyword and send notfication to other modules. I can see in console.log .

          MMM-temp-ds18b20 received a module notification: LUSTRO from sender: voicecontrol
          

          In all my modules. but i’m unable to run for example script … I tried to modify node_helper.js

          /* Magic Mirror
           * Module: voicecontrol
           *
           * By Alex Yaknin
           * MIT Licensed.
           */
          
          const NodeHelper = require('node_helper');
          const exec = require('child_process').exec;
          
          module.exports = NodeHelper.create({
              start: function () {
                  this.started = false;
          
              },
          
              socketNotificationReceived: function(notification, payload) {
                          if (notification === "CONNECT") {
                                  this.startRecognition(payload);
                                  return;
                          }
                          if (notification === "LUSTRO"’) {
                                  exec("/opt/vc/bin/tvservice -o", null);
                          //      this.autosleep();
                        }
                  },
          
          

          but it is not working … ;)

          1 Reply Last reply Reply Quote 0
          • R Offline
            romain
            last edited by Apr 18, 2017, 12:33 PM

            Hello everybody, I try to use this voicecontrol module AND mmm-alexa in the same time (mmm-alexa need to be trigger by a notification. That where voicecontrol is interesting at the moment) but because both the module use the mic, it doesn’t work.
            If I put only one module at the time no problem. Both of them in the same time, voice control doesn’t work.
            How can I use the same mic for two different module ?

            1 Reply Last reply Reply Quote 0
            • D Offline
              disakos
              last edited by Apr 18, 2017, 1:55 PM

              @romain , do you use voicecontrol module to run some scripts ? If so please let me know how to do it … ;) my module is detecting my voice … but i’m unable to run something … ;)

              R 1 Reply Last reply Apr 18, 2017, 2:36 PM Reply Quote 0
              • R Offline
                romain @disakos
                last edited by romain Apr 18, 2017, 2:36 PM Apr 18, 2017, 2:36 PM

                @disakos I didn’t use it to run script, I wanted it specificaly for mmm-alexa. However I did check that the other module received the notification It send.
                I did that by writing my own useless module that only print the notification it received.
                You need in your main file a

                notificationReceived: function(notification, payload, sender){
                   //Whatever you want to do
                },
                

                This is different to “socketNotificationReceived” , socket notification receive only deal with your node helper file. But “notificationReceived” catch notification send from a module to another.

                With that in mind, you can add the notificationReceived thing to the module you want to control with the voicecontrol module or add whatever you need to it if it already exist

                1 Reply Last reply Reply Quote 0
                • R Offline
                  romain
                  last edited by Apr 19, 2017, 10:44 AM

                  I did it, It wasn’t easy but it’s work, I can use voicecontrol and others voicecontrol driven module at the same time.
                  I had to change my /etc/asound.conf file again (yes, again. Because changing it already solve some of my issue on the past)

                  before my file looked like this:

                  pcm.!default {
                          type asym
                          playback.pcm {
                                  type plug
                                  slave.pcm "hw:0,0"
                          }
                          capture.pcm {
                                  type plug
                                  slave.pcm "hw:1,0"
                          }
                  }
                  

                  Easy enough when you know what your doing (that wasn’t my case). this file is there to say what is the default device to playback and capture (A lot of application or software just use the default device so if the default configuration isn’t working for you, you need to change it for you.) In my cas ethe microphone is the “hw:1,0” and my speaker is the “hw:0,0”

                  That worked well when my microphone is used by one application at the time. However, not so much when it need to be used by multiple ones.
                  So my new /etc/asound.conf file is looking like this now

                  pcm.myTest {
                      type dsnoop
                      ipc_key 2241234
                      slave {
                          pcm "hw:1,0"
                          channels 1
                      }
                  }
                  
                  pcm.!default {
                          type asym
                          playback.pcm {
                                  type plug
                                  slave.pcm "hw:0,0"
                          }
                          capture.pcm {
                                  type plug
                                  slave.pcm "myTest"
                          }
                  }
                  

                  instead of directly say that my input device is the “hw:1,0” I say it’s “myTest”, which is describe above. myTest’s type is “dsnoop” , that’s whats allow the michrophone to be use by multiple application at the same time. The ipc_key is there with a random value because when I tested with arecord, it asked me to put one. The channels is there because it was on the documentation ( http://alsa.opensrc.org/Dsnoop ) >.> not sure what it does though.
                  And there you go, after that I could use two voice control things at the time

                  1 Reply Last reply Reply Quote 2
                  • R Offline
                    Rattenjunge8080
                    last edited by May 1, 2017, 9:19 AM

                    Hello,

                    I’m new here, and I need a little bit help…
                    I still don’t get the concept of this module for 100%, but I will describe my problem as accurate as possible.

                    So I downloaded the module and installed python-pyaudio. I created a PMDL-File (here: http://filehorst.de/d/bDfbfCBE), tested it and saved it in the MagicMirror-Location (and many other locations…). I recorded it on the Pi btw, microphone is also still working.

                    I don’t know if I miss anything, but when I start the MM, the modules are totally fine, I keep saying my command (“Go to sleep”), but nothing happens. I also checked the dev-mode and set breakpoints…but like I said, I’m not 100% sure what every class is doing in particular. Here is my code, do I miss anything?

                    config.js

                    {
                    			module: "helloworld1",
                    			position: "bottom_right",	// This can be any of the regions.
                    			config: {
                    				// See 'Configuration options' for more information.
                    				text: "Hello world!"
                    			}
                    		},
                    		{
                                module: 'voicecontrol',
                                config: {
                                    models: [
                                        {
                                            keyword: "gotosleep",   // keyword 
                                            file: "GoToSleep.pmdl", // trained model file name
                                            message: "gotosleep"   // notification message that's broadcast in the MagicMirror app
                                        },
                    					{
                                            keyword: "wake up",   // keyword 
                                            file: "Wake_up.pmdl", // trained model file name
                                            message: "wake_up"   // notification message that's broadcast in the MagicMirror app
                                        },
                                    ]
                                }
                            },
                    

                    Voicecontrol.js

                    
                    'use strict';
                    
                    Module.register("voicecontrol", {
                    
                    	// Default module config.
                    
                        defaults: {
                    		models: [
                    					{
                    						keyword: "gotosleep",   // keyword 
                    						description: "Go To Sleep",
                                            file: "GoToSleep.pmdl", // trained model file name
                                            message: "gotosleep"   // notification message that's broadcast in the MagicMirror app
                    					},
                    					{
                    						keyword: "Hide Camera",
                    						description: "Say 'Hide Camera' to hide camera",
                    						file: "hideCamera.pmdl",
                    						message: "HIDE_CAMERA"
                    					},
                    					{
                    						keyword: "Selfie",
                    						description: "Say 'Selfie' when camera is visible",
                    						file: "selfie.pmdl",
                    						message: "SELFIE"
                    					},
                    				]
                    	},
                    
                        start: function() { 
                    
                            this.sendSocketNotification("CONNECT", this.config);
                    
                        },
                    
                        getStyles: function() {
                    		return ['voicecontrol.css'];
                    	},
                    
                        socketNotificationReceived: function(notification, payload){
                            if (notification === "KEYWORD_SPOTTED"){
                                //Broadcast the message
                                this.sendNotification(payload.message, {type: "notification"});
                            }
                    	},
                    
                        getDom: function() {
                            var wrapper = document.createElement("div");
                            var header = document.createElement("header");
                            header.innerHTML = "Voice Commands";
                            wrapper.appendChild(header);
                            var models = this.config.models;
                    
                            models.forEach(function(model) {
                                var command = document.createElement("div");
                                command.innerHTML = model.description;
                                command.className = "small dimmed top";
                                wrapper.appendChild(command);
                            }, this);
                    
                            return wrapper;
                        }
                    
                    });
                    
                    

                    helloworld1.js (I wanted to log the notification to see if it works…)

                    Module.register("helloworld1",{
                    
                    	// Default module config.
                    	defaults: {
                    		text: "World!"
                    	},
                    	
                    	start: function() {
                    		Log.log("Starting module: " + this.name);
                    	},
                    
                    	notificationReceived: function(notification, payload, sender) {
                    				
                    		if (notification === "gotosleep"){
                    			Log.log("Go To Sleep");
                    		}
                    	},
                    
                    	// Override dom generator.
                    	getDom: function() {
                    		var wrapper = document.createElement("div");
                    		wrapper.innerHTML = this.config.text;
                    		return wrapper;
                    	}
                    });
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • R Offline
                      romain
                      last edited by May 2, 2017, 7:22 AM

                      The code look’s fine to me at first glance. (You don’t need to have the { keyword: "gotosleep", // keyword description: "Go To Sleep", file: "GoToSleep.pmdl", // trained model file name message: "gotosleep" // notification message that's broadcast in the MagicMirror app }, in both config file and the voice controle.js at the same time though. But that’s not an issue.)

                      Maybe try to add a position for the voicecontrol module just to be sure the module itself doesn’t crash (If you add a position it should print the description of the words on screen. If nothing appear it probably mean something went wrong.)
                      If nothing wrong and the cd ~/MagicMirror/ ; DISPLAY=:0 npm start dev didnt show an error, maybe the issue is with your mic configuration. If the module dosn’t hear you it might not work.

                      Add a Log.log("Helloworld1 received " + notification); before the if in the helloword1.js . SO you print every single notification you receive and maybe add a Log in the socketNotificationReceive of voicecontrol.js to see if it spot your keywords at all.

                      also, do you use your microphone with this module only or with multiple application ? Because by default, I think, a microphone can only be open by one thing at the time. So try toclose every application that use your microphone and run the mirror. If the that’s work you might to configure your microphone so it can be open in multiple application

                      1 Reply Last reply Reply Quote 0
                      • 1
                      • 2
                      • 3
                      • 4
                      • 5
                      • 6
                      • 7
                      • 8
                      • 7 / 8
                      • First post
                        Last post
                      Enjoying MagicMirror? Please consider a donation!
                      MagicMirror created by Michael Teeuw.
                      Forum managed by Sam, technical setup by Karsten.
                      This forum is using NodeBB as its core | Contributors
                      Contact | Privacy Policy