2017-01-15 2 views
3

У меня есть малина Pi, настроенная с помощью приложения Node.js, которое отвечает, когда видит кнопку нажатием кнопки Amazon Dash. Первоначально предполагалось, что это тихий дверной звонок от https://github.com/initialstate/silent-doorbell, но я хотел бы просто воспроизвести его локальный звуковой файл. Который, я думаю, должен быть достаточно легким, но моя неопытность в кодировании оставляет мне просто попытку новых вещей, которые я нахожу во всем Интернете.Воспроизведение локального файла на RPi с помощью Node.js

Я не могу воспроизвести файл из терминала следующим и играет просто отлично:

$ 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 

После обновления Node.js до последней версии, как было предложено @Quentin с помощью Major Version Upgrade направления на этом сайте http://thisdavej.com/upgrading-to-more-recent-versions-of-node-js-on-the-raspberry-pi/ Мне удалось пройти мимо этого. Теперь я не могу узнать, как правильно использовать omxplayer. При выполнении тот же код, как описано выше, после того, как Node.js обновления теперь я получаю эту ошибку после нажатия на кнопку Amazon черточки, которая затем происходит сбой приложения:

[email protected]:~/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, но я все равно получаю ошибку игрока при попытке использовать это.

ответ

0

Вы используете версию узла старше, чем 4.x.

Следовательно, он видит let как идентификатор, а не ключевое слово, поэтому он не ожидает, что за ним сразу последует другой идентификатор (spawn).

Обновите свою установку узла до текущей версии.


В качестве альтернативы, использовать другую переменную декларацию, такую, как var.

+0

Да, это была проблема, спасибо. Я думал, что я на последней версии, доступной для Малины Пи. После небольшого исследования я понял, что должен был заставить его. Поэтому, используя этот сайт http://thisdavej.com/upgrading-to-more-recent-versions-of-node-js-on-the-raspberry-pi/ под майором обновления версии, я смог подняться до новейшего версия. После этого мне пришлось перестроить, и моя текущая проблема решена. Теперь о том, почему omxplayer бросает «Ошибка: игрок закрыт». – Erik

Смежные вопросы