利用树莓派 播放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 内容如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><%= title %></title>
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js" type="text/javascript" charset="utf-8"></script>
</head>
    
<body>
    <h1><%= title %></h1>
    <table width="100%" border="1" cellpadding="0" cellspacing="0">
           <tr>
                <td>编号</td>
                <td>歌曲</td>
                <td>操作</td>
          </tr>   
          <tbody id="bg">        
          </tbody>
    </table>
    <input type="radio" class="loop" name="test" value=0 checked>全部循环&nbsp;
    <input type="radio" class="loop" name="test" value=1 > 随机播放&nbsp;
    <input type="radio" class="loop" name="test" value=2 >单曲循环<br>

    <script>
        function shujv()
        {
        $.get("/music/list",
        function(data,status){
            var da=data.datas;
            var htmlstr;//="<tr><td>"+da.length+"</td><td>"+"</td><td>"+"</td><td>"+"</td><td></tr>";
            //alert("test:"+da.length);
            for(var i=0;i<da.length;i++)
            {
            var element=da[i];
            var tmp;
                htmlstr+="<tr><td>"+i+"</td><td>"+da[i]+"</td><td><input type='button' class='shanchu' value='play' code='"+i+"'></td></tr>"
            }
            $("#bg").html(htmlstr);
            $(".shanchu").click(function()
            {
                //alert($(this).attr("code"));
                var code=$(this).attr("code");
                $.get("/music/play/"+code,
                function(data,status){
                    //shujv();
                });
            });
        });
        }

        $(function(){
        shujv();
        $(".loop").click(function()
            {
                //alert($(this).attr("value"));
                var code=$(this).attr("value");
                $.get("/music/loop/"+code,
                function(data,status){
                    //shujv();
                });
            });
        });
    </script>
</body>
</html>

在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





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值