我需要使用 node.js 脚本在树莓派上播放声音。当我自己从命令行启动脚本时,一切都很好。当我从 /etc/rc.local 脚本启动后运行相同的脚本时,我在执行“ps aux”时看到了我的运行进程,但我听不到任何声音。我也尝试在 40 秒后启动节点脚本,因为我认为一些初始化东西或其他东西的时间太少了,但在这段时间内我可以从命令行启动脚本并听到声音......
我尝试了两个用户:root 和 pi。它们都从 cmd 工作(因为在自动启动后运行脚本的用户是 root 用户)
我将我的程序链接到 /usr/bin/node 因为如果不是,该进程无法在启动时启动。
我强迫树莓派使用立体声插孔: 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
谢谢你的帮助!