2014-02-28 46 views
0

我正在使用Meteor.js和recorderJs庫,並嘗試將立體聲音頻緩衝區存儲到MongoDB。Meteor.methods()將Float32Array轉換爲對象

在客戶端,console.log(buffers)給人的形式

[Float32Array, Float32Array] 

的數組,但該方法將其與Meteor.call('newSound', buffers)傳遞給Meteor.methods後

Meteor.methods({ 
    newSound: function(buffers) { 
     console.log(buffers); 
    } 
} 

我得到一個數組是這樣的:

[Object, Object] 

爲什麼Meteor將數組轉換爲對象TS?檢索時,我需要的數據陣列緩存工作,並可以將其與

var buffers = new Array(
    _.toArray(buffers[0]), 
    _.toArray(buffers[1]) 
); 

重新轉換,但我很擔心性能。在將它們存儲到數據庫之前,我應該將緩衝區轉換爲斑點,然後在檢索它們時重新進行轉換?

回答

1

只有與EJSON兼容的類型會自動從JSON對象轉換爲其實際的JavaScript類型。閱讀關於EJSON這裏:

http://docs.meteor.com/#ejson

我不相信Float32Array已經取得EJSON由流星隊兼容。有關EJSON的更多信息以及如何使一個類型兼容,觀看這些視頻:

還有EJSON.newBinary()這可能對你有幫助。

+0

謝謝,我不知道從哪裏開始。文檔說EJSON支持「JavaScript Uint8Array」或「EJSON.newBinary」的結果。 – apostl3pol

+0

我在MDN上發現了一篇有用的文章,它解釋了JavaScript中的類型化數組:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays。我不明白的是這些數組實際上是相同二進制數據的不同視圖。 – apostl3pol