Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Node.js在RPi上播放本地文件_Javascript_Node.js_Raspberry Pi_Omxplayer - Fatal编程技术网

Javascript 使用Node.js在RPi上播放本地文件

Javascript 使用Node.js在RPi上播放本地文件,javascript,node.js,raspberry-pi,omxplayer,Javascript,Node.js,Raspberry Pi,Omxplayer,我用Node.js应用程序设置了一个Raspberry Pi,当它看到Amazon Dash按钮按下时会做出响应。它本来应该是一个无声的门铃,但我想让它播放一个本地声音文件。我认为这应该很容易,但我对编码的缺乏经验让我只能尝试在互联网上找到的新东西 我可以通过以下方式从终端播放文件,并且播放效果很好: $ omxplayer example.mp3 但是,无论我如何尝试将其放入Node.js应用程序中,并在按下破折号按钮时触发,它都不会工作 var dash_button = require(

我用Node.js应用程序设置了一个Raspberry Pi,当它看到Amazon Dash按钮按下时会做出响应。它本来应该是一个无声的门铃,但我想让它播放一个本地声音文件。我认为这应该很容易,但我对编码的缺乏经验让我只能尝试在互联网上找到的新东西

我可以通过以下方式从终端播放文件,并且播放效果很好:

$ omxplayer example.mp3
但是,无论我如何尝试将其放入Node.js应用程序中,并在按下破折号按钮时触发,它都不会工作

var dash_button = require('node-dash-button'),
    dash = dash_button('XX:XX:XX:XX:XX:XX'), //REPLACE WITH YOUR ADDRESS
    exec = require('child_process').exec;
    Omx = require('node-omxplayer');
    player = Omx('~/node_modules/node-dash-button/example.mp3');

let spawn = require('child_process').spawn;

dash.on('detected', function() {
    console.log('Button pushed!');
    player.play();
});
使用我的最新版本(如上所述)运行时,我得到以下信息:

/home/pi/node_modules/node-dash-button/doorbell.js:7
let spawn = require('child_process').spawn;
    ^^^^^
SyntaxError: Unexpected identifier
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3
按照@Quentin的建议,使用本网站上的主要版本升级说明将Node.js升级到最新版本后,我能够克服这个问题。现在我无法理解如何正确使用omxplayer。在Node.js升级后运行与上述相同的代码时,我现在在按下Amazon Dash按钮后出现此错误,该按钮导致应用程序崩溃:

pi@raspberrypi:~/node_modules/node-dash-button $ sudo node doorbell.js 
Button pushed!
/home/pi/node_modules/node-omxplayer/index.js:103
                        throw new Error('Player is closed.');
                        ^

Error: Player is closed.
    at writeStdin (/home/pi/node_modules/node-omxplayer/index.js:103:10)
    at EventEmitter.Omx.omxplayer.play (/home/pi/node_modules/node-omxplayer/index.js:133:27)
    at Readable.<anonymous> (/home/pi/node_modules/node-dash-button/doorbell.js:13:12)
    at emitOne (events.js:96:13)
    at Readable.emit (events.js:188:7)
    at PcapSession.<anonymous> (/home/pi/node_modules/node-dash-button/index.js:87:28)
    at emitOne (events.js:96:13)
    at PcapSession.emit (events.js:188:7)
    at PcapSession.on_packet_ready (/home/pi/node_modules/node-dash-button/node_modules/pcap/pcap.js:99:10)
    at packet_ready (/home/pi/node_modules/node-dash-button/node_modules/pcap/pcap.js:44:14)
pi@raspberrypi:~/node\u模块/node仪表板按钮$sudo node doorbell.js
按按钮!
/home/pi/node_modules/node omxplayer/index.js:103
抛出新错误('玩家关闭');
^
错误:播放机已关闭。
在writeStdin(/home/pi/node_modules/node omxplayer/index.js:103:10)
在EventEmitter.Omx.omxplayer.play(/home/pi/node_modules/node omxplayer/index.js:133:27)
至少可以阅读。(/home/pi/node_modules/node dash button/doorbell.js:13:12)
在emitOne(events.js:96:13)
at Readable.emit(events.js:188:7)
在下午。(/home/pi/node_modules/node dash button/index.js:87:28)
在emitOne(events.js:96:13)
在PcapSession.emit(events.js:188:7)
在PcapSession.on_packet_就绪(/home/pi/node_modules/node dash button/node_modules/pcap/pcap.js:99:10)
数据包准备就绪(/home/pi/node\u modules/node dash button/node\u modules/pcap/pcap.js:44:14)

我尝试了一些不同的方法,试图让玩家在没有运气的情况下繁殖。引用的index.js文件提到要使用player.running命令,但在尝试使用此命令时,我仍然得到player is closed错误。

您使用的是比4.x系列旧的Node版本

因此,它将
let
视为一个标识符,而不是关键字,因此它不希望紧跟其后的是另一个标识符(
spawn

将节点的安装升级到当前版本



或者,使用不同的变量声明,例如
var

是的,这就是问题所在,谢谢。我原以为我是最新版本的树莓皮。经过一点研究,我意识到我必须强迫它。因此,在主要版本升级的情况下使用该网站,我能够升级到最新版本。之后,我不得不重建,我目前的问题得到解决。现在谈谈omxplayer抛出“错误:播放器关闭”的原因