MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    1. Home
    2. Maukoell
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.
    M
    Offline
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 1
    • Groups 0

    Maukoell

    @Maukoell

    0
    Reputation
    245
    Profile views
    1
    Posts
    0
    Followers
    0
    Following
    Joined
    Last Online

    Maukoell Unfollow Follow

    Latest posts made by Maukoell

    • Music Player Module

      Hello,
      I am trying to create a module which plays music from a directory. I wanted to use two buttons to control it. One for Pause/Play and one to skip the current song. But unfortunately when I start the MM2 I always get the message that it is not able to find the helper for my module. I’m new to node.js so maybe there are just some basic mistakes.

      My module:

      Module.register("MMM-MusicPlayer",{	
      	defaults: {
      		playButtonPIN: 10,
              	nextButtonPIN: 12,
              	clickDelay: 500,
              	musicPath = "/home/pi/MagicMirror/modules/MMM-MusicPlayer/music",		
      	},	
      	start: function() {
      		this.sendSocketNotification("BUTTON_CONFIG", this.config);
      		Log.info('Starting module: ' + this.name);
      	}
      });
      

      My node_helper:

      "use strict";
      
      const NodeHelper = require("node_helper");
      const gpio = require("onoff");
      var path = require('path');
      var fs = require('fs');
      const { Howl, Howler } = require('howler');
      var sound;
      var musicList = [];
      var index = 0;
      var started;
      var config;
      module.exports = NodeHelper.create({
          start: function () {
              started = false;
          },
          // Subclass socketNotificationReceived received.
          socketNotificationReceived: function (notification, payload) {
              const self = this;
              if (notification === 'BUTTON_CONFIG' && started === false) {
                  config = payload;
                  self.fromDir(config.musicPath, "mp3");
                  self.createSound();
                  var GPIO = require('onoff').Gpio;
                  var button1 = new GPIO(config.playButtonPIN, 'in', 'both', { persistentWatch: true, debounceTimeout: config.clickDelay });
                  button1.watch(function (err, state) {
                      // 1 == pressed, 0 == not pressed
                      if (state === 1) {
      
                          if (sound.playing()) {
                              sound.pause();
                          } else {
                              sound.play();
                          }
                      }
                  });
                  var button2 = new GPIO(config.playButtonPIN, 'in', 'both', { persistentWatch: true, debounceTimeout: config.clickDelay });
                  button2.watch(function (err, state) {
                      // 1 == pressed, 0 == not pressed
                      if (state === 1) {
                          self.playNext();
                      }
                  });
                      started = true;
              }
          },
      
          fromDir: function(startPath, filter) {
              if (!fs.existsSync(startPath)) {
                  Log.info("no dir ", startPath);
                  return;
              }
          
              var files = fs.readdirSync(startPath);
              var i;
              var fullPath;
              var filename;
              var stat;
              for (i = 0; i < files.length; i+=1) {
                  fullPath = path.join(startPath, files[i]);
                  filename = files[i];
                  stat = fs.lstatSync(fullPath);
                  if (stat.isFile()) {
                      if (filename.indexOf(filter) >= 0) {
                          musicList.push(fullPath);
                      }
                  }
              }
          },
      
          playNext: function() {
              if (sound.playing()) {
                  sound.stop();
              }
              index += 1;
              if (index === musicList.length()) {
                  index = 0;
              }
              sound.play(index);
          },
      
          createSound: function() {
              sound = new Howl({
                  src: musicList
              });
          }
      
      }
      );
      

      Maybe someone can help me.
      Thanks in advance

      posted in Development music help node.js button player
      M
      Maukoell