如何在树莓派上播放声音-启动后无需登录

用户名

我需要使用node.js脚本在树莓派上播放声音。当我自己从命令行启动脚本时,一切都很好。当我从/etc/rc.local脚本启动后运行相同的脚本时,我在执行“ ps aux”时看到了正在运行的进程,但是我听不到任何声音。我还尝试在40秒后启动节点脚本,因为我认为用于某些初始化工作的时间太少了,但是在这段时间内,我可以从命令行启动脚本并听到声音...

我尝试了两个用户:root和pi。它们都在cmd上工作(因为在自​​动启动后运行脚本的用户是root用户)

我将我的程序链接到/ usr / bin / node,因为如果没有,则该进程无法在启动时启动。

我强迫raspberryPi使用sereo插孔:混音器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 /永远启动/var/www/node/residenz/server.js

谢谢你的帮助!

用户名

以防万一,其他人也有相同的问题,我想分享我的最终解决方案。我只是用python做功能。对于启动,我将启动python脚本的行放入文件/etc/rc.local中。

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# server.py
import RPi.GPIO as GPIO
import subprocess
import time
import serial
from random import randint
port = serial.Serial("/dev/ttyACM0", baudrate=9600, timeout=0)
PATH=[4]
PATH.append("/var/www/node/Boom1.mp3")
PATH.append("/var/www/node/Boom2.mp3")
PATH.append("/var/www/node/Boom3.mp3")
PATH.append("/var/www/node/Boom4.mp3")

def main():
  count = 0
  while True:
    value=0
    line = port.readlines()

    if( len(line)!= 0 and count < 4 ):
      try:
        job=subprocess.Popen(["mpg321", returnPath()], stdin=subprocess.PIPE)
        time.sleep( float(line[0])/10 )
      except:
        print("cant play soundfile")
    def returnPath():
      x = randint(1,4)
      return PATH[x]

if __name__ == '__main__':
  main()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在QT中启动之前播放声音?

来自分类Dev

如何在收到推送通知后立即播放声音?

来自分类Dev

如何在XFCE4上启动时播放声音?

来自分类Dev

如何在启动时播放声音片段(.ogg文件)?

来自分类Dev

命令执行完毕后如何播放声音?

来自分类Dev

准备执行脚本后,如何播放声音?

来自分类Dev

引导后如何保持OS X服务器启动而无需用户登录?

来自分类Dev

如何在不登录ssh的情况下通过ssh在本地服务器上播放声音?

来自分类Dev

AppleScript完成后播放声音

来自分类Dev

点击后播放声音,HTML / jQuery

来自分类Dev

在不同的时间间隔后播放声音

来自分类Dev

离子滑盖盒切换滑盖时如何播放声音?无需点击

来自分类Dev

在Mac终端上完成命令后,如何播放声音警报?

来自分类Dev

播放声音后如何插入2秒间隔?

来自分类Dev

如何在Java中播放声音?

来自分类Dev

如何在angularjs中播放声音

来自分类Dev

如何在C ++中播放声音?

来自分类Dev

如何在Julia中播放声音

来自分类Dev

如何在android中播放声音

来自分类Dev

如何在C ++中播放声音

来自分类Dev

VBS无需对话即可播放声音

来自分类Dev

登录后如何找出启动DLL的进程

来自分类Dev

每次登录后如何使程序自动启动?

来自分类Dev

登录后如何使Linux从Spring Boot启动?

来自分类Dev

登录后如何自动启动脚本

来自分类Dev

如何播放声音?

来自分类Dev

更改音源后MediaElement播放声音2次

来自分类Dev

在Swift SKAction中收集硬币后播放声音

来自分类Dev

完成npm安装后播放声音或通知