Я пытаюсь записать MP3-вход микрофона моего Raspberry Pi. Я использую модуль npm mic
. Когда я запускаю его на своем Mac, у меня нет проблем, и он записывает мою линию со звуковой карты USB в формате MP3. Когда я беру тот же код и помещаю его в Raspberry Pi, он не работает. Я вижу, что он создает файл с именем output.mp3
, но когда я FTP и пытаюсь воспроизвести его на моем Mac, он не будет воспроизводиться.
Основной бит кода:
var mic = require('mic');
var fs = require('fs');
var micInstance = mic({
rate: '16000',
channels: '1',
debug: true,
exitOnSilence: 6,
fileType: 'mp3'
});
var micInputStream = micInstance.getAudioStream();
var outputFileStream = fs.WriteStream('output.mp3');
micInputStream.pipe(outputFileStream);
micInputStream.on('data', function(data) {
console.log("Recieved Input Stream: " + data.length);
});
micInputStream.on('error', function(err) {
cosole.log("Error in Input Stream: " + err);
});
Должен заметить, что если я сохраню файл в формате .raw, я могу нормально его воспроизвести
aplay -f S16_LE -r 16000 -c 1 output.raw
Я попытался console.log реальной командой, которую использует модуль npm, и вот что я получил:
arecord [ '-c', '1', 'r', '16000', '-f', 'S16_LE', '-D', 'plughw:1,0' ] { stdio: [ 'ignore', 'pipe', 'pipe' ] }
Есть какие-нибудь идеи о том, как успешно заставить его записывать в формате MP3?
В конечном итоге я хотел бы получить его в MP3, чтобы я мог запустить его через декодер npm lame
и выполнить некоторую обработку на нем.
Код ниже работает на моем Mac:
...
var decoder = new Lame.Decoder();
decoder.on('format', function(format){onFormat(format)});
var chunker = Chunker(BUFSIZE);
chunker.pipe(decoder);
var micInstance = mic({
rate: '48000',
channels: '1',
debug: false,
exitOnSilence: 6,
fileType: 'mp3'
});
var micInputStream = micInstance.getAudioStream();
micInputStream.pipe(chunker);
micInstance.start();
...