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.

    MMM-voice

    Scheduled Pinned Locked Moved Utilities
    voice control
    329 Posts 55 Posters 999.0k Views 50 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.
    • D Offline
      dmwilsonkc
      last edited by dmwilsonkc

      So I must say the MMM-voice module (also with Mykle’s Hello-Lucy enhancements) works perfectly on my mirror… when I don’t have my Mycroft AI running at start as well. It’s an Error: resource busy/unavailable referring to the Microphone. When I stop Mycroft/restart mirror it works perfectly, but then Mycroft gets the same error. Any suggestions?

      I am thinking about building a MagicMirror skill for Mycroft, but Mycroft is Python not Java, and not a module. Would it be possible to send the same commands as Hello-Lucy (i.e. ‘HIDE_CLOCK’ for example) only use Websocket-client for Mycroft and send commands to the MagicMirror via socket.io?

      If so, what would handle the socketmessage? Would it be communicated to the right module/s. Would I also need to create a fork of the MMM-voice module with code to handle the socketmessages from Mycroft?

      Any guidance would be much appreciated!

      Sorry, I should have also said my mirror is running on a RPi 3b running Debian Jessie on a 16gb sd.

      strawberry 3.141S 1 Reply Last reply Reply Quote 1
      • D Offline
        dmwilsonkc
        last edited by

        This post is deleted!
        1 Reply Last reply Reply Quote 0
        • strawberry 3.141S Offline
          strawberry 3.141 Project Sponsor Module Developer @dmwilsonkc
          last edited by

          @dmwilsonkc Error: resource busy/unavailable referring to the Microphone your microphone cannot be used by multiple processes at a time.

          In your case I rather suggest to write an own module for mycroft instead of a fork, as you’re using a complete different stt engine.

          If you’re interested in doing it via websockets you could have a look into mmm-mobile where i did something similar

          Please create a github issue if you need help, so I can keep track

          1 Reply Last reply Reply Quote 0
          • D Offline
            dmwilsonkc
            last edited by dmwilsonkc

            @strawberry-3.141 So I guess I kind of understood what is happening with the MMM-Mobile module of yours. I am very new to all of this and have only been dabbling in writing simple code up to now. It is much easier to build off of existing code that I know already works. If I could figure out a way to continuing to use your MMM-voice module and Mycroft at the same time, I would probably just do that, but as you pointed out both processes can’t use the microphone at the same time. Since Mycroft skills seem pretty straight forward to create, I thought eh… Why not attempt it.

            I can create a Mycoft skill that will send ‘HIDE_CLOCK’ for example to socket.io. What happens when the Websocket-client for Mycroft connects to socket.io and sends ‘HIDE_CLOCK’? How would MagicMirror handle that?
            Keep in mind, I have already added Mykle’s modifications from Hello-Lucy.

            That’s part of what I can’t wrap my head around.

            Thank you for responding and helping me!

            strawberry 3.141S 1 Reply Last reply Reply Quote 0
            • strawberry 3.141S Offline
              strawberry 3.141 Project Sponsor Module Developer @dmwilsonkc
              last edited by

              @dmwilsonkc the module has a socket like https://github.com/MichMich/MagicMirror/blob/master/js/socketclient.js#L11, basically its a channel with the module name, if you then send messages, the module doesn#t differentiate if its from mycroft or node_helper, as it isnt aware of multiple entities.

              Please create a github issue if you need help, so I can keep track

              1 Reply Last reply Reply Quote 0
              • D Offline
                dmwilsonkc
                last edited by

                @strawberry-3.141 Oh! Wow! That was awesome! You opened my eyes. I really am starting to understand better thanks to your incite. That makes perfect sense to treat Mycroft more like a remote-control than a voice-control because it handles the STT and can send socket messages to the MagicMirror. The MMM-Mycroft module would need to be very similar in function to your MMM-mobile module.

                For example it could have a number of ways to control the MagicMirror:

                        socket.on('SHOW_MODULES', () => {
                            console.log(`${this.name}: Showing modules!`);
                            this.sendSocketNotification('SHOW_MODULES');
                        });
                
                        socket.on('HIDE_MODULES', () => {
                            console.log(`${this.name}: Hiding modules!`);
                            this.sendSocketNotification('HIDE_MODULES');
                        });
                

                Just as an example to handle the messages sent to the socket.

                If I’m reading your code right, you’re using a qr image to handle security. I hadn’t really thought about the need for security with something like this, but I guess that really should be a consideration. In your opinion, would requiring some kind of user password/key set in the config for both MMM-Mycroft module and the Mycroft MM skill be sufficient?

                strawberry 3.141S 1 Reply Last reply Reply Quote 0
                • strawberry 3.141S Offline
                  strawberry 3.141 Project Sponsor Module Developer @dmwilsonkc
                  last edited by

                  @dmwilsonkc I did MMM-Mobile for my bachelor thesis to connect to the MagicMirror via mobile and be able to control and change config of it, the qr code was meant for pairing the devices, so not everyone is able to hook into my socket channel and send commands. But you have to be aware of the differences between socket notifications and normal notifications. socket notifications describe only the communication between your module and his node_helper (or in my case the mobile app, because I extended the socket server), but this gives you no communication with other modules like the clock. Therefore you need normal notifications which describe the communication between modules and the core MM. Be aware of that those notifications can only be sent via the module not the node_helper.

                  My workflow was like this. Node_helper extends socket server. Mobile send command to node_helper, then the node_helper sends it to the module and the module broadcasts it to all other modules.

                  https://github.com/MichMich/MagicMirror/blob/master/modules/README.md#thissendnotificationnotification-payload
                  https://github.com/MichMich/MagicMirror/blob/master/modules/README.md#thissendsocketnotificationnotification-payload

                  Please create a github issue if you need help, so I can keep track

                  1 Reply Last reply Reply Quote 0
                  • D Offline
                    dmwilsonkc
                    last edited by dmwilsonkc

                    @strawberry-3.141 Thanks for the clarification. The code that I copied came from the node_helper as you are probably aware.
                    One more question for you concerning extending the socket with node_helper: The code you have for the MMM-mobile module is written like:

                    appSocket() {
                    const namespace =
                    ${this.name}/app;

                        this.io.of(namespace).use((socket, next) => {
                            const hash = crypto.createHash('sha256').update(socket.handshake.query.token).digest('base64');
                            if (this.mobile.user && this.mobile.user === hash) {
                                console.log(`${this.name}: Access granted!`);
                                next();
                            } else {
                                console.log(`${this.name}: Authentication failed!`);
                                next(new Error('Authentication failed!'));
                            }
                        });
                    
                        this.io.of(namespace).on('connection', (socket) => {
                            console.log(`${this.name}: App connected!`); 
                    

                    Mycroft in my case is on the same RPi so I realize the code will be different and you have created this code in a way to “pair” with the mobile device. Again, I am very new to writing code like this, but can you point in the right direction as far as how to extend the socket with the MMM-mycroft module’s node_helper.js? I do not understand how to extend the socket. Why is the code appSocket() {
                    const namespace =
                    ${this.name}/app;

                    Would the same code work for MMM-mycroft module?

                    So my understanding, thanks to your help, to have a flow like this:

                    Node_helper extends socket server. Mycroft-core send command to node_helper, then the node_helper sends it to the MMM-mycroft module via this.send socketnotification and the MMM-mycroft module broadcasts it to all other modules via this.sendnotification.

                    I am just not sure how to code the Node_helper.js to extend the socket in my case.

                    You have been extremely helpful so far and I truly appreciate all of your help.

                    Also, since this is all done on the RPi, would the ipwhitelist even come into play here? My guess is no.

                    strawberry 3.141S 1 Reply Last reply Reply Quote 0
                    • strawberry 3.141S Offline
                      strawberry 3.141 Project Sponsor Module Developer @dmwilsonkc
                      last edited by

                      @dmwilsonkc if you run your mycroft core from the node helper as i do with pocketsphinx in voice then there is no need at all to mess with the socket server

                      Please create a github issue if you need help, so I can keep track

                      D 1 Reply Last reply Reply Quote 0
                      • D Offline
                        dmwilsonkc @strawberry 3.141
                        last edited by

                        @strawberry-3.141 I didn’t realize that was a possibility. I currently start Mycroft when the pi boots up in a virtualenv as was recommended by the mycroft folks. Both the MM and Mycroft run exactly as they should. The only exception is the microphone issue- not being able to access the microphone from two processes at the same time. I have no idea how I would start Mycroft from the node_helper.js.

                        At this point I am very confused on the best way to go. To me, it seems like the socket communication between two concurrently running processes would be easier. But you are the expert.

                        Any advice you suggest would be welcomed. Thanks again.

                        1 Reply Last reply Reply Quote 0
                        • I Offline
                          ime90
                          last edited by

                          Hi everyone. I’m having trouble with my voice module.

                          It doesn’t seem to register any of my commands. The microphone icon is blinking but whenever I say “hide modules” or any other command it doesn’t register it.

                          In the terminal it says “Starting pocketsphinx.” Don’t know it that is of any concerns? If anybody has any tips they are more than welcome.

                          strawberry 3.141S 1 Reply Last reply Reply Quote 0
                          • strawberry 3.141S Offline
                            strawberry 3.141 Project Sponsor Module Developer @ime90
                            last edited by

                            @ime90 can you check the .lm and .dic files in your module folder and see if they are empty or include your commands

                            Please create a github issue if you need help, so I can keep track

                            I 1 Reply Last reply Reply Quote 0
                            • I Offline
                              ime90 @strawberry 3.141
                              last edited by

                              @strawberry-3.141 hi strawberry, thanks for the response.

                              I’ve managed to make it work, but the problem is that the operations were uuuuultra slow.

                              I’ve timed the response time in 10 different occurrences.

                              After saying “MAGIC MIRROR” it takes an average of 7 seconds for the microphone icon to start blinking.

                              After saying “HIDE” it takes an average of 15 second (hope this isn’t normal) to hide the modules.

                              Is this due to my RPI3? Any and all tips and experiences are welcome.

                              1 Reply Last reply Reply Quote 0
                              • D Offline
                                dmwilsonkc
                                last edited by

                                @ime90 I am running MMM-voice on a RPi3b and while it is not as fast as my Mycroft-core in responding to its wake word, it is much faster than the times you have stated. I turned the debug = true so that I could see what it is doing. I would say the times you have stated are at least double what it takes MMM-voice on my Pi. I changed my wake word to Hey Jarvis. I don’t know if that made any difference in how fast it recognizes the wake word. I also added the Hello-Lucy modifications to the MMM-voice module. It is not “fast” in responding to commands, but it only takes a few seconds (5 to 6sec.) to Hide/Show modules if I remember right.

                                1 Reply Last reply Reply Quote 0
                                • J Offline
                                  joe84maiden
                                  last edited by

                                  I wrote this in a different thread not too long ago actually, but I noticed a vast increase in detection/response rate when moving from a cheap USB mic to a decent webcam microphone. I would say the response now is on the order of 1-2 secs, with effectively no errors in voice interpretation. I’m sure this is helped immensely because the clarity of the audio into the rpi is much clearer - the cheap USB mic had terribly noisy audio in.

                                  1 Reply Last reply Reply Quote 1
                                  • S Offline
                                    sdetweil
                                    last edited by

                                    i am running MMM-voice on an ODroid Xu4, which is very fast.

                                    I also use another voice enabled smart mirror on this same device.

                                    with a Logitech webcam as the mic.

                                    MMM-voice gets the hotword correct every time, but almost none of the following words.

                                    the same hardware setup works correctly with arecord as the wav source, but uses google speech detection for everything after the hotword.

                                    it appears the system is using the default language model (lm) and dictation (dic) files.

                                    anyone have a suggestion on debugging this?

                                    Sam

                                    How to add modules

                                    learning how to use browser developers window for css changes

                                    strawberry 3.141S 1 Reply Last reply Reply Quote 0
                                    • strawberry 3.141S Offline
                                      strawberry 3.141 Project Sponsor Module Developer @sdetweil
                                      last edited by

                                      @sdetweil set debug: true in the config and you will see what the mirror recognizes

                                      Please create a github issue if you need help, so I can keep track

                                      1 Reply Last reply Reply Quote 0
                                      • S Offline
                                        sdetweil
                                        last edited by

                                        i have that, but the text ‘recognized’ is not what i said.

                                        if I speak slowly, i can get ‘magic mirror’
                                        then wake up is ‘wake go’ or ‘wake all’,

                                        hide calendar is ‘hide who’
                                        open help is ‘open go’

                                        the smart-mirror project also uses ‘go to sleep’ and ‘wakeup’

                                        ‘hide newsfeed’ is ‘hide to show the’, ‘hide is the’

                                        none of the commands, when recognized, do anything…

                                        hide modules

                                        go to sleep (not on PI so the tvservice doesn’t exist), but no error is logged

                                        Sam

                                        How to add modules

                                        learning how to use browser developers window for css changes

                                        strawberry 3.141S 1 Reply Last reply Reply Quote 0
                                        • strawberry 3.141S Offline
                                          strawberry 3.141 Project Sponsor Module Developer @sdetweil
                                          last edited by

                                          @sdetweil I can tell you the same as I just told another user

                                          as the author of MMM-voice I can tell you, that my module doesn’t support a command called hide clock at all. You are probably using hello-lucy, at least that’s a mod I’m aware of which enhances the commands. You can see the command list here https://github.com/fewieden/MMM-voice#usage

                                          i also had problems due to my accent. you can also look into the dic file how the system expects you to pronounce it

                                          Please create a github issue if you need help, so I can keep track

                                          1 Reply Last reply Reply Quote 1
                                          • S Offline
                                            sdetweil
                                            last edited by

                                            ok, got it… voice detection is sensitive…

                                            Sam

                                            How to add modules

                                            learning how to use browser developers window for css changes

                                            1 Reply Last reply Reply Quote 0

                                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                            With your input, this post could be even better 💗

                                            Register Login
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 16
                                            • 17
                                            • 1 / 17
                                            • 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