2016-09-08 24 views
6

Bir .wav dosyası fs.writeFile ile yazmaya çalışıyorum. Dosya başarıyla oluşturuldu, ancak sadece 8-13bayt uzunluğunda, bu yüzden doğru bir şey yapmıyorum.Nasıl Javascript/Düğüm blob dosyasından .wav dosyası yazma

Kabarcık zaten ses/wav ise diske yazabilir miyim veya bunu Base 64'e dönüştürmem gerekir mi? Herhangi bir giriş mutluluk duyacağız Here

-

ben Yanıtı olmayan başka benzer iplik bulduk, burada bir kayıp hemen hemen değilim.

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) döner Blob {size: 294956, type: "audio/wav"}

Burada gerçekten alakalı değil, ama sen fs.writeFileSync() doğrudan geçirilmesi için bir Tampon sonra bir Yazılan Dizisine Blob'u dönüştürmek ve benim 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> 

cevap

6

var:

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

ben kesinlikle burada ne yaptığını anlamıyorum, ama yine de ben almak yakalanmamış TypeError 'buffer.js: 259 Yakalanmayan TypeError: Birinci argüman bir dize, Tampon olmalı ArrayBuffer, Array veya array-like object.'. – angularchobo

+0

'console.log (this.result)' geri aramada ne gösterir? – mscdex

+0

'[object ArrayBuffer]' – angularchobo

2

mscdex cevap.

NodeWebkit'i tarayıcı olarak kullanırken bu benim için çalıştı.

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

Buffer'ın "from" yöntemine dikkat edin. Son satırımda geçen "blob" da wav olarak kodlanmış ses verisi.
Diğerleri için, onun tek sihir. Bana sorma ...

0

Bunlardan herhangi birinin benim için çalışmaya başlamasında sorunlar yaşadım. Bu düğüm modülü express-fileupload ile başarı ve çok daha kolay bir uygulama buldum. İşte bazı kod:

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); 
    } 
    }); 
}); 
İlgili konular