如何在Javascript / Node中从Blob中编写.wav文件
我试图用fs.writeFile写一个.wav文件。 该文件已成功创build,但它只有8-13字节长,显然我没有做正确的事情。
如果blob已经是audio / wav,我可以写入磁盘,还是需要将其转换为Base 64?
我在这里非常困惑,我发现另一个类似的线程没有答案 – 在这里
任何input将不胜感激。
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)
返回Blob {size: 294956, type: "audio/wav"}
这不是真的相关,但这是我的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>
您可以将Blob转换为Typed Array,然后将其转换为直接传递给fs.writeFileSync()
的Buffer:
var fileReader = new FileReader(); fileReader.onload = function() { fs.writeFileSync('test.wav', Buffer.from(new Uint8Array(this.result))); }; fileReader.readAsArrayBuffer($scope.recordedInput);
使用mscdex的答案。
当使用NodeWebkit作为浏览器时,这是我的工作。
var fileReader = new FileReader(); fileReader.onload = function () { fs.writeFileSync('test.wav', Buffer(new Uint8Array(this.result))); }; fileReader.readAsArrayBuffer(blob);
注意Buffer的“from”方法已经消失。 在我的最后一行中传递的“blob”是以wav编码的audio数据。
其余的只有它的魔力。 不要问我
我有问题得到这些为我工作。 我发现成功,并且使用此节点模块express-fileupload更容易实现。 这是一些代码:
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); } }); });