Использование другого API для записи на (Amazon) lex-бот (nodejs) - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь получить матричный голос: https://www.matrix.one/products/voice

с помощью скрипта amazon lex bot, использующего Raspberry Pi, как показано здесь:

// lex.js 
var AWS = require('aws-sdk'),
fs = require('fs'),
ts = require('tailstream'),
exec = require('child_process').exec;

var FULFILLED = 'Fulfilled',
RESPONSE_FILE = 'response.mpeg',
REMOVE_REQUEST_FILE = 'rm request.wav',
SOX_COMMAND = 'sox -d -t wavpcm -c 1 -b 16 -r 16000 -e signed-integer -- 
endian little - silence 1 0 1% 5 0.3t 2% > request.wav',
streaming = false,
inputStream,
lexruntime = new AWS.LexRuntime({
 region: 'us-east-1',
 credentials: new AWS.Credentials(
   <KeyId>,
   <SecretKeyId>, null)
});   

var setupStream = function() {
streaming = true;
inputStream = ts.createReadStream('./request.wav');
var params = {
 botAlias: '$LATEST',
 botName: <BotName>,
 userId: 'lexHeadTesting',
 contentType: 'audio/l16; rate=16000; channels=1',
 inputStream: inputStream
};

lexruntime.postContent(params, function(err, data) {
 if (err) {
   console.log(err, err.stack);
   process.exit(1);
 } else {
   fs.writeFile(RESPONSE_FILE, data.audioStream, function(err) {
     if (err) {
       return console.log(err);
       process.exit(1);
     }
   });
   var playback = exec('sudo mpg321 ' + RESPONSE_FILE);
   playback.on('close', function(code) {
     exec('rm ' + RESPONSE_FILE);
     if (data.dialogState !== FULFILLED) {
       streaming = false;
       record();
      }
    });
  }
});
}

var record = function() {
var recording = exec(SOX_COMMAND);
recording.stderr.on('data', function(data) {
 console.log(data);
 if (!streaming) {
   setupStream();
 }
});
recording.on('close', function(code) {
 inputStream.done();
 exec(REMOVE_REQUEST_FILE);
 });
}
record();

, когда я пытаюсьзапись normall со скриптом выдает ошибку:

ALSA lib pcm_file.c:763:(snd_pcm_file_open) file format “raw” is unknown
sox FAIL formats: can't open input  `default': snd_pcm_open error: Invalid 
argument

, поскольку он извлекает необработанный формат из массива

ниже мой файл .asoundrc

pcm.sc {
type hw
card 1
}

pcm.mic_channel0 {
type file
file “/tmp/matrix_micarray_channel_0”
infile “/tmp/matrix_micarray_channel_0”
format “raw”
slave {
pcm sc
}
}

pcm.mic_channel1 {
type file
file “/tmp/matrix_micarray_channel_1”
infile “/tmp/matrix_micarray_channel_1”
format “raw”
slave {
pcm sc
}
}

pcm.mic_channel8 {
type file
file “/tmp/matrix_micarray_channel_8”
infile “/tmp/matrix_micarray_channel_8”
format “raw”
slave {
pcm sc
}
}

pcm.!default {
type asym
playback.pcm {
type hw
card 0
device 0
}

capture.pcm {
type file
file “/tmp/matrix_micarray_channel_0”
infile “/tmp/matrix_micarray_channel_0”
format "raw"
slave {
pcm sc
}
}
}

Такчто мне нужно, так это как использовать https://www.npmjs.com/package/mic, который протестирован и работает, так как он создает точный входной файл, который sox_command делает в скрипте lex, поэтому мне просто нужно поменять местами два

это скрипт, который я использую для создания request.wav с "mic"

var matrix = require("@matrix-io/matrix-lite");
var fs = require('fs');

var mic = matrix.alsa.mic({
rate: '16000',
debug: true,
exitOnSilence: 6,

channels: '1'
});

var micStream = mic.getAudioStream();
var file = fs.WriteStream('request.wav');
micStream.pipe(file);

micStream.on('startComplete', function() {
setTimeout(mic.stop, 5000);
});

mic.start();

Если бы кто-нибудь мог мне помочь с этим, я был бы очень благодарен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...