2016-09-08 1 views
6

fs.writeFile을 사용하여 .wav 파일을 작성하려고합니다. 파일이 성공적으로 생성되었지만 8-13 바이트에 불과하므로 분명히 올바르게 작동하지 않습니다.자바 스크립트/노드에서 blob의 .wav 파일을 작성하는 방법

BLOB가 이미 오디오/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

나는 확실히 당신이 무슨 일을하는지 이해하지 않지만, 어쨌든 내가 얻을 캐치되지 않는 형식 오류'buffer.js : 259 catch되지 않은 형식 오류 : 첫 번째 인수가 문자열 버퍼를해야합니다, ArrayBuffer, Array 또는 array-like object입니다. – 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); 

버퍼의 "보낸 사람"방법이 사라졌습니다. 그리고 마지막 줄에 전달되는 "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); 
    } 
    }); 
}); 
관련 문제