2016-09-08 10 views
6

fs.writeFileで.wavファイルを書き込もうとしています。ファイルは正常に作成されますが、8-13バイトしかないので、明らかに何か正しいことをしていません。Javascript/Nodeでblobの.wavファイルを書き込む方法

ブロブがすでにオーディオ/ WAVであれば、ディスクに書き込むことはできますか、それともBase64に変換する必要がありますか?

私はここで途方に暮れてかなりのよ、私は無応答と同様の別のスレッドを発見した - Here

任意の入力が認識されるであろう。

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"}

それは本当に関連していないのですが、ここであなたがfs.writeFileSync()に直接渡すためのバッファに続い型付き配列にブロブを変換することができ、私の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> 

答えて

6

です。

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

私は間違いなくあなたはここで何をしているのか分かりませんが、とにかく私が手にキャッチされない例外TypeError 'buffer.js:259キャッチされない例外TypeError:最初の引数は文字列、バッファでなければなりません、 ArrayBuffer、Array、または配列のようなオブジェクトです。 – angularchobo

+0

'console.log(this.result)'はコールバック内に何を表示しますか? – mscdex

+0

'[object ArrayBuffer]' – angularchobo

2

mscdex答え。

NodeWebkitをブラウザとして使用すると、これが私の仕事です。

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

バッファの「from」メソッドが消えていることに注意してください。最後の行に渡された "blob"は、wavでエンコードされたオーディオデータです。
残りは、唯一の魔法です。私に尋ねないでください...

0

私はこれらのいずれかを私のために働くことに問題がありました。成功し、このノードモジュール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); 
    } 
    }); 
}); 
関連する問題