2017-09-02 1 views
1

Je crée une application qui enregistre ce que dit un utilisateur et l'enregistre dans un fichier. Pour obtenir le son du microphone, j'utilise le package node-microphone. Mon application est actuellement en mesure d'obtenir le son du microphone. Cependant, lorsque j'essaie d'écrire le flux dans un fichier audio et de le lire, j'obtiens l'erreur suivante. Windows Media Player ne peut pas lire le fichierNoeud - Comment écrire un fichier audio

Il se peut que le lecteur ne prenne pas en charge le type de fichier ou ne prenne pas en charge le codec utilisé pour compresser le fichier.

Est-ce que quelqu'un sait comment écrire de l'audio dans un fichier dans un noeud?

var fs = require('fs'); 
const { Writable } = require('stream'); 
var writeStream = fs.createWriteStream('./output.wav'); 

const outStream = new Writable({ 
    write(chunk, encoding, callback) { 
    console.log(chunk); 
    writeStream.write(chunk); 
    callback(); 
    } 
}); 
let Mic = require('node-microphone'); 
let mic = new Mic(); 
let micStream = mic.startRecording(); 
micStream.pipe(outStream); 

mic.on('info', (info) => { 
    console.log('Info: ',info); 
}); 
mic.on('error', (error) => { 
    console.log('error:', error); 
}); 
mic.on('stop', (stop) => { 
    console.log('stop:', stop); 
}); 

setTimeout(() => { 
    console.log('stopped recording'); 
    mic.stopRecording(); 

}, 3000); 

Répondre

1

Les états de documentation node-microphone:

StartRecording()

Démarrer l'enregistrement avec les options sonores donnés dans la classe. Crée un nouveau processus enfant. Il renvoie l'enregistrement PCM Wave Stream en tant que Node Stream.

J'imagine que vos fichiers ne contiennent pas les en-têtes appropriés. L'un des modules suivants peuvent vous aider:


node-wav

La classe Writer accepte des données audio brutes écrites au (données audio uniquement PCM est actuellement pris en charge), et délivre en sortie un fichier WAV avec un en-tête WAVE valide au début spécifiant les informations de formatage du flux audio.


audiobuffer-to-wav

var toWav = require('audiobuffer-to-wav') 
var wav = toWav(buffer) // encode AudioBuffer to WAV