node.js スクリプトを使用してラズベリー パイでサウンドを再生する必要があります。自分でコマンドラインからスクリプトを開始するときは、すべて問題ありません。起動後に /etc/rc.local スクリプトから同じスクリプトを実行すると、「ps aux」を実行しているときに実行中のプロセスが表示されますが、音が聞こえません。また、40 秒後にノード スクリプトを開始しようとしました。これは、初期化などの時間が短すぎると思ったからですが、この時間内にコマンド ラインからスクリプトを開始し、音を聞くことができました...
root と pi の両方のユーザーを試しました。どちらも cmd から動作します (自動起動後にスクリプトを実行するユーザーが root ユーザーであるため)
プログラムを /usr/bin/node にリンクしました。そうしないと、起動時にプロセスを開始できなかったからです。
raspberryPi に Sereo ジャックを使用させました: amixer cset numid=3 1
私のnode.jsコードは次のとおりです。
var fs = require("fs");
var lame = require("lame");
var Speaker = require("speaker");
var SerialPort = require("serialport").SerialPort;
var playing = false;
var stream = [];
stream[0] = "sound1.mp3";
stream[1] = "sound2.mp3";
stream[2] = "sound3.mp3";
stream[3] = "sound4.mp3";
var getCurrentStream = function(){
var i = Math.round( Math.random() * 3)
return stream[i];
}
var serialPort = new SerialPort("/dev/ttyACM0", {
baudrate: 9600
}, false);
serialPort.open(function(){
console.log("open");
serialPort.on("data", function(data){
console.log("data received"+data);
if(!playing){
try{
var currentStream = fs.createReadStream( getCurrentStream() );
var speaker = new Speaker();
speaker.on('finish', function(){
playing = false;
});
currentStream.pipe(new lame.Decoder()).pipe(speaker);
playing = true;
}
catch(e){
console.log("Error: "+e);
}
}
});
});
私が試した起動のために:cronjobとして、crontab -eiが添付された後:@reboot /opt/node/bin/forever start /var/www/node/residenz/server.js
ファイル内でも同じことを試しました /etc/rc.local : /opt/node/bin/forever start /var/www/node/residenz/server.js
助けてくれてありがとう!