我有一个 Raspberry Pi 设置了一个 Node.js 应用程序,当它看到来自 Amazon Dash Button 的按钮推送时会做出响应。它原本应该是来自https://github.com/initialstate/silent-doorbell的静音门铃,但我想让它播放本地声音文件。我认为这应该很容易,但是我对编码的缺乏经验让我只能尝试在互联网上找到的新东西。
我可以使用以下命令从终端播放文件,并且播放效果很好:
$ omxplayer example.mp3
但是,无论我如何尝试将它放在 Node.js 应用程序中并在按下 Dash 按钮时触发它都不会工作。
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 升级到最新版本后,使用本网站http://thisdavej.com/upgrading-to-more-recent-versions-of-node-js-on-the上的主要版本升级说明-raspberry-pi/我能够克服这个问题。现在我无法理解如何正确使用 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)
我尝试了一些不同的方法来尝试让玩家在没有运气的情况下生成。引用的 index.js 文件提到使用 player.running 命令,但尝试使用此命令时我仍然收到播放器已关闭错误。