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

How to write .wav file from blob in Javascript/Node

本文关键字:blob 编写 wav 文件 中从 Node Javascript      更新时间:2023-09-26

我试图用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, 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转换为类型化数组,然后转换为直接传递给fs.writeFileSync()的缓冲区:

var fileReader = new FileReader();
fileReader.onload = function() {
  fs.writeFileSync('test.wav', Buffer.from(new Uint8Array(this.result)));
};
fileReader.readAsArrayBuffer($scope.recordedInput);

我有问题得到这两个为我工作。我发现了成功,并且使用这个节点模块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);
    }
  });
});

使用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编码的音频数据。
剩下的,就只有魔法了。别问我…