Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript/Node中从blob写入.wav文件_Javascript_Node.js_Audio_Base64_Node Webkit - Fatal编程技术网

如何在Javascript/Node中从blob写入.wav文件

如何在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

我正在尝试用fs.writeFile编写一个.wav文件。文件创建成功,但是它只有8-13字节长,所以很明显我没有做正确的事情

如果blob已经是音频/wav,我可以写入磁盘还是需要将其转换为Base 64

我在这里几乎不知所措,我找到了另一条类似的线索,没有答案-

如有任何意见,将不胜感激

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);
    }
  });
});