利用树莓派 播放mp3,web远程操作

1.在树莓派上面安装 mplayer

sudo apt-get install mplayer

2.在树莓派上面安装 nodejs

到nodejs官网上面下载最新的 nodejs
通过 ftp 放入 树莓派
解压 $ tar -xvf node-v8.11.3-linux-armv7l.tar.xz
并且 移动到 /usr/local/node
sudo mv node-v8.11.3-linux-armv7l /usr/local/node
更新环境变量
sudo echo PATH=$PATH:/usr/local/node/bin >> ~/.bashrc
刷新环境变量
source ~/.bashrc

3.安装express

安装 express 命令
npm install express -g
安装 express-generator,装了才能用命令行 生成 express 项目
npm i -g express-generator


4.生成项目 webmusic

express -e webmusic

在 webmusic 文件夹通过命令 npm install 添加 所需的安装包


5.添加代码

添加views文件及文件music.ejs 内容如下





<%= title %>


    

   

<%= title %>


   
          
               
               
               
             
                  
          
   
编号歌曲操作

    全部循环 
     随机播放 
    单曲循环


    



在routes添加lsfile.js文件代码如下,实现遍历文件夹文件

var fs = require("fs");
var tstpath = require("path");
var mp3list=[];
fs.readdir('/home/pi/Music', (err, files) => {
    if (err)
        throw err;
    files.forEach(file => {
        var filePath = tstpath.normalize('/home/pi/Music/' + file);
    //console.log(filePath);
        fs.stat(filePath, (err, stats) => {
            if (stats.isFile()) {
        //console.log(tstpath.extname(filePath));
        if(tstpath.extname(filePath)=='.mp3')
            {
                console.log(filePath + ' is: ' + 'file '+ mp3list.length);
            mp3list.push(filePath);
        }
            }
            //if (stats.isDirectory()) console.log(filePath + ' is: ' + 'dir');
        });
    });
});
module.exports=mp3list;

在routes添加music.js文件代码如下,实现遍历文件夹文件

var express = require('express');
var spawn=require('child_process').spawn;
var mp3list=require('./lsfile');
var router = express.Router();

var musicindex=0;
var musicloop=0;    //0 loop 1 rnd  2 only one

var player=null;
function playmusic(str){
    player= spawn('mplayer', [str]);           //这个是赋值 还是引用
    player.stdout.on('data', (data) => {
     // console.log(`输出:${data}`);
    });

    player.stderr.on('data', (data) => {
      //console.log(`错误:${data}`);
    });
    player.on('close', (code) => {
      //console.log(`子进程退出码:${code}`);
      if(code==0)
      {
            if(musicloop==0)    
            {
            musicindex=(musicindex+1)%mp3list.length;
        }
        else if(musicloop==1)
        {
            musicindex=parseInt(Math.random()*mp3list.length);
        }        
        playmusic(mp3list[musicindex]);
      }
      else    
      {
        
          }
    });
}


router.get('/',function(req, res, next) {
    res.render("music",{title:"JQMusicPlayer"});
});

router.get('/list',function(req, res, next) {
    //res.render("music",{});
    res.json({datas:mp3list});
});

router.get('/play/:id',function(req, res, next) {
    console.log("file:"+req.params.id);
    if(player!=null)
    {
        player.kill('SIGHUP');
        player=null;                 //这样能释放闭包数据吗? 能清除 它附带生成的
        console.log('kill process');
    }
    musicindex=req.params.id%mp3list.length;
    playmusic(mp3list[musicindex]);
    res.json({"pos":musicindex,"name":mp3list[musicindex]});
});

router.get('/loop/:mode',function(req, res, next) {
    musicloop=req.params.mode;
    res.json({"pos":musicindex,"name":mp3list[musicindex]});
});


module.exports={
    router:router
};

修改项目目录下的app.js文件,绿色的为增加的代码

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var music=require('./routes/music');

.......

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/music', music.router);


6.启动网页并访问

npm start

访问网页 127.0.0.1:3000/music





你可能感兴趣的:(nodejs)