树莓派使用node expess web应用调用mpg123播放音乐

相关代码:https://github.com/cloudswave/pi3-script/tree/master/node_web
原理:使用node的child_process模块对子进程进行操作,控制mgp123

spawnObj = child_process.spawn('mpg123', ['-R'], {encoding: 'utf-8'});
spawnObj.stdin.write(`L ${url}\n`); //mpg123 播放
spawnObj.stdin.write('Q\n');//退出播放

主程序:

"use strict"
var express = require('express');
var app = express();
var child_process = require('child_process');
var spawnObj = null;
var current_status = "stop";
app.get('/', function(req, res) {
    res.send('Hello World node11!');
});
app.get('/music/:status/:url', function(req, res) {// url是音乐的外链地址
    res.send('music: ' + req.params.status + ':' + req.params.url);
    let status = req.params.status;
    let url = decodeURIComponent(req.params.url);
    if (!spawnObj) {
        spawnObj = child_process.spawn('mpg123', ['-R'], {
            encoding: 'utf-8'
        });
        spawnObj.stdout.on('data', function(chunk) {
            console.log(chunk.toString());
        });
        spawnObj.stderr.on('data', (data) => {
            console.log(data);
        });
        spawnObj.on('close', function(code) {
            console.log('close code : ' + code);
        });
        spawnObj.on('exit', (code) => {
            console.log('exit code : ' + code);
        });
        spawnObj.stdin.write('V 60\n');
    }
    try {
        
        switch (status) {
            case 'play':
                    spawnObj.stdin.write(`L ${url}\n`);
                break;
            case 'stop':
                if(spawnObj) {
                    spawnObj.stdin.write('Q\n');
                    spawnObj.kill();
                    spawnObj = null;                    
                }

                break;
            case 'pause':
                if(spawnObj) {
                    spawnObj.stdin.write('P\n');
                }
                break;
            case 'resume':
                if(spawnObj)
                    spawnObj.stdin.write('P\n');
            default:
                // code
        }
        current_status = status;
    } catch (e) {
        console.error('error:',e);
    }

});
var server = app.listen(3000, function() {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at http://%s:%s', host, port);
});

>演示<
参考了python的实现:https://github.com/cloudswave/musicbox

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    wgl0419阅读 6,652评论 1 9
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,954评论 2 45
  • 在一次管理培训课上,一位业内颇受尊重的培训师受到了学员的当众指责,认为其不够专业。起因是他觉得老师没有讲解清楚应有...
    知灵阅读 426评论 0 4
  • 第一种:NS_ENUM类型的定义和使用 第二种:NS_OPTIONS枚举类型的定义 如有不足,还请各位多多指教.
    ZYiDa阅读 1,058评论 0 0
  • 周五 之前学习《北大经济学》的课程,回答了一个问题:究竟是选总统时歧视更严重,还是选择伴侣时歧视更严重呢? 我当时...
    文慧遥望沈二阅读 393评论 0 0

友情链接更多精彩内容