J'essaie d'écrire un fichier .wav avec fs.writeFile. Le fichier a été créé avec succès, mais sa longueur n’est que de 8 à 13 octets. Il est donc évident que je ne fais rien de bien.
Si le blob est déjà audio/wav, puis-je écrire sur le disque ou dois-je le convertir en Base 64?
Je suis un peu perdue ici, j'ai trouvé un autre fil similaire sans réponse - Ici
Toute entrée serait appréciée.
routerApp.controller('audiotest', function($scope) {
$scope.saveToDisk = function(){
var nw = require('nw.gui');
var fs = require('fs');
var path = require('path');
fs.writeFileSync('test.wav', $scope.recordedInput)
};
}
console.log($scope.recordedInput)
renvoie Blob {size: 294956, type: "audio/wav"}
Ce n'est pas vraiment pertinent, mais voici mon code HTML
<div class="row" ng-controller="audiotest">
<div class="row">
<button type="button" ng-click="saveToDisk()"> Write this sucker to disk </button>
</div>
<ng-audio-recorder id='audioInput' audio-model='recordedInput'>
<!-- Start controls, exposed via recorder-->
<div ng-if="recorder.isAvailable">
<button ng-click="recorder.startRecord()" type="button" ng-disabled="recorder.status.isRecording">
Start Record
</button>
<button ng-click="recorder.stopRecord()" type="button" ng-disabled="recorder.status.isRecording === false">
Stop Record
</button>
</ng-audio-recorder>
</div>
Vous pouvez convertir le blob en tableau typé puis en tampon pour le passage direct à fs.writeFileSync()
:
var fileReader = new FileReader();
fileReader.onload = function() {
fs.writeFileSync('test.wav', Buffer.from(new Uint8Array(this.result)));
};
fileReader.readAsArrayBuffer($scope.recordedInput);
Utilisation de mscdex answer.
C'est ce qui a fonctionné pour moi lorsque j'utilise NodeWebkit comme navigateur.
var fileReader = new FileReader();
fileReader.onload = function () {
fs.writeFileSync('test.wav', Buffer(new Uint8Array(this.result)));
};
fileReader.readAsArrayBuffer(blob);
Notez que la méthode "from" de Buffer a disparu. Et "blob" qui est passé dans ma dernière ligne est des données audio encodées en wav.
Pour le reste, sa seule magie. Ne me demande pas ...
J'ai eu du mal à obtenir l'un ou l'autre de ces objectifs pour moi. J'ai trouvé le succès et la mise en œuvre beaucoup plus facile avec ce module de nœud express-fileupload . Voici un code:
var express = require('express');
var fileUpload = require('express-fileupload');
app.use(fileUpload());
app.post('/', function(req, res) {
console.log(req.files.data);
req.files.data.mv('test.wav', function(err) {
if (err) {
console.log(err);
}
});
});