从NodeJS服务器播放带有python脚本的音频

时间:2017-09-10 21:14:11

标签: python node.js audio pygame raspberry-pi3

我正在尝试使用python播放音频文件。虽然我只需要重现音频文件,但我会在树莓上使用GPIO。

当我收到相关链接的HTTP GET时,它应该执行python脚本并重现音频。但是,从API它只是再现一个短的声音。我的文件有10秒,但播放的噪音不到1秒。

这是我的控制器

// Controller

/* importar o módulo child_process */
var cp = require('child_process');

/* importar o módulo node-omxplayer */
var omx = require('node-omxplayer');

/* importar o módulo python-shell */
var ps = require('python-shell');

// Caminhos para os scripts pythons
var options = {
    scriptPath: '/home/pi/Documents/apiRest/api/files/'
};

/* O módulo node-omxplayer usar o child_process para execução da query de reprodução do omxplayer */

module.exports.parar = function(application, req, res)
{
    res.send('Comando de parada do video foi executado');

    cp.exec('killall omxplayer.bin', function(err, stdout, stderr){
        if(err)
        {
            return;
        }
    });
} 

module.exports.repr = function(application, req, res)
{
    var query = req.query.video;

    if(query == '1')
    {
        res.send('Script de reprodução do video 1 sendo executado.');
        vd1 = omx('/home/pi/Downloads/video1.mp4', 'hdmi');
    }
    else if(query == '2')
    {
        res.send('Script de reprodução do video 2 sendo executado.');
        vd2 = omx('/home/pi/Downloads/video2.mp4', 'hdmi');
    }
}

module.exports.trovao = function(application, req, res)
{
    var out = '';

    ps.run('trovao.py', options, function (err) {
        if (err)
        { 
            out = err;
            throw err;
        }
        else
        {
            out = 'Ok';
        }

        console.log('finished');    
        res.send("Status: " + out);
    });
}

我也尝试使用child_process来执行脚本,但是我有相同的结果。总是很小的噪音。 当我直接执行脚本时,使用python trovao.py IT WORKS !!

这是我的python脚本:

import pygame.mixer
from pygame.mixer import Sound
from time import sleep

pygame.mixer.init()

try: 
    thunder = pygame.mixer.Sound("thunder3.wav")
    print ("Arquivo carregado!")
except pygame.error:
    print ("Nao foi possivel carregar o arquivo!")

#Executa o som somente uma vez
aux = thunder.play()
while aux.get_busy():
    continue
    #pygame.time.delay(100)
#sleep(2)
#thunder.stop()
print("Reproduzido");

实际上,我需要播放音频文件并与某些GPIO交互同步。 我做错了什么?

0 个答案:

没有答案