如何在Javascript/Node中从blob写入.wav文件
我正在尝试用fs.writeFile编写一个.wav文件。文件创建成功,但是它只有8-13字节长,所以很明显我没有做正确的事情 如果blob已经是音频/wav,我可以写入磁盘还是需要将其转换为Base 64 我在这里几乎不知所措,我找到了另一条类似的线索,没有答案- 如有任何意见,将不胜感激如何在Javascript/Node中从blob写入.wav文件,javascript,node.js,audio,base64,node-webkit,Javascript,Node.js,Audio,Base64,Node Webkit,我正在尝试用fs.writeFile编写一个.wav文件。文件创建成功,但是它只有8-13字节长,所以很明显我没有做正确的事情 如果blob已经是音频/wav,我可以写入磁盘还是需要将其转换为Base 64 我在这里几乎不知所措,我找到了另一条类似的线索,没有答案- 如有任何意见,将不胜感激 routerApp.controller('audiotest', function($scope) { $scope.saveToDisk = function(){ var nw = requir
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,键入:“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转换为类型化数组,然后转换为缓冲区,以便直接传递到fs.writeFileSync()
:
使用mscdex回答
这就是我在使用NodeWebkit作为浏览器时的工作原理
var fileReader = new FileReader();
fileReader.onload = function () {
fs.writeFileSync('test.wav', Buffer(new Uint8Array(this.result)));
};
fileReader.readAsArrayBuffer(blob);
请注意,缓冲区的“from”方法已消失。最后一行中传递的“blob”是用wav编码的音频数据。对于其他人来说,这是唯一的魔力。别问我……我在让这两种方法中的任何一种为我工作时遇到了问题。我发现这个节点模块成功了,而且实现起来更容易。下面是一些代码:
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);
}
});
});
我确实不明白你在这里做什么,但无论如何我得到了一个未捕获的TypeError
buffer.js:259未捕获的TypeError:第一个参数必须是字符串、缓冲区、ArrayBuffer、数组或类似数组的对象。
。console.log(this.result)
在回调中显示了什么?[object ArrayBuffer]
确定,那就没问题了。您使用的是什么版本的nw.js?版本是0.16.0
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);
}
});
});