2016-09-08 6 views
6

में ब्लॉब से .wav फ़ाइल कैसे लिखें, मैं fs.writeFile के साथ एक .wav फ़ाइल लिखने की कोशिश कर रहा हूं। फ़ाइल सफलतापूर्वक बनाई गई है, हालांकि यह केवल 8-13bytes लंबी है, इसलिए जाहिर है कि मैं कुछ सही नहीं कर रहा हूं।जावास्क्रिप्ट/नोड

यदि ब्लॉब पहले से ही ऑडियो/wav है तो क्या मैं डिस्क पर लिख सकता हूं या क्या मुझे इसे बेस 64 में परिवर्तित करने की आवश्यकता है?

मैं यहाँ एक नुकसान में काफी हूँ, मैं कोई जवाब नहीं के साथ एक और इसी तरह धागा मिला - 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"}

यह वास्तव में प्रासंगिक नहीं है, लेकिन यहाँ मेरी एचटीएमएल

<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

है आप fs.writeFileSync() को सीधे पारित करने के लिए एक बफर के लिए एक Typed सरणी के लिए ब्लॉब परिवर्तित कर सकते हैं और उसके बाद:

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 Uncaught TypeError: पहले तर्क एक स्ट्रिंग, बफर होना चाहिए, ऐरेबफर, ऐरे, या सरणी जैसी वस्तु। '। – angularchobo

+0

कॉलबैक के अंदर 'console.log (this.result)' क्या दिखाता है? – mscdex

+0

'[ऑब्जेक्ट ऐरेबफर]' – angularchobo

2

उपयोग mscdex उत्तर।

ब्राउज़र के रूप में नोडवेबकिट का उपयोग करते समय यह मेरे लिए काम करता है।

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

बफर के "से" विधि गायब हो गया है ध्यान दें। और "ब्लॉब" जो मेरी आखिरी पंक्ति में पारित किया गया है वह ऑडियो डेटा है जो वाव में एन्कोड किया गया है।
बाकी के लिए, इसका एकमात्र जादू। मुझसे मत पूछो ...

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