1

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

助けてくれてありがとう!

4

2 に答える 2

1

私は同じ問題を抱えていました.この質問(および回答の分析)は、それが可能であるという希望を与えてくれました. ) を cron で実行するには、ファイルへのパスを絶対パスにする必要がありました。ところで、cron、python、および pygame (pygame.mixer.music) を使用して動作させることができました。

私のテスト プログラム (pygame.mixer.Sound は機能しませんでしたが、WAV の代わりに MP3 を使用していたためだと思います)

import pygame
import time
import os
import sys

#soundFile = "alarm.mp3" # BAD
soundFile = "/home/pi/alarm.mp3" # GOOD
channel = None

if len(sys.argv) > 1:
    pygame.mixer.init(44100, -16, 2, 4096)

    if sys.argv[1] == "music":
        print "Testing pygame.mixer"
        pygame.mixer.music.load(soundFile)
        pygame.mixer.music.set_volume(1.0)
        pygame.mixer.music.play()
    elif sys.argv[1] == "sound":
        print "Testing pygame.sound"
        pygame.mixer.init()
        s = pygame.mixer.Sound(soundFile)
        s.set_volume(1.0)
        channel = s.play()
    elif sys.argv[1] == "mpg":
        print "Using mpg321 Player"
        os.system("mpg321 " + soundFile)
    else:
        print "Using OMX Player"
        os.system("omxplayer " + soundFile)

    print "Execution control has returned"

    while pygame.mixer.get_busy() or pygame.mixer.music.get_busy() or \
        (channel is not None and channel.get_busy()):
        continue
    pygame.mixer.quit()
else:
    print "Unknown option. Options are omx, mpg, music, or sound"

cronでは、@reboot python /home/pi/soundtest.py music &起動時にファイルを再生しました。

于 2016-04-09T21:38:46.973 に答える