Я пытаюсь получить матричный голос: 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();
Если бы кто-нибудь мог мне помочь с этим, я был бы очень благодарен