在 JSON.stringify 之后发送并转换 Float32Array
Sending and casting a Float32Array after JSON.stringify
与 非常相似 - 我正在尝试从一个客户端向另一个客户端发送 Float32Array
,但我需要在发送消息之前使用 JSON.stringify
。
在发送端我使用:
audioBuffer = e.inputBuffer.getChannelData(0)
var aud = { "sessionId": sessionId, "streamData": audioBuffer, "client": "student", "type": "audio" }
ws.send(JSON.stringify(aud));
我在接收端使用:
var msg = JSON.parse(message.data);
var streamData = msg.streamData;
var kbuff = new Float32Array(streamData);
context.decodeAudioData(kbuff, onBuffer, onDecodeBufferError);
但这导致接收方得到一个 Object
,我似乎无法将其转换为 Float32Array
:
发送端发送数据时:
接收方获取数据时:
知道如何进行这项工作吗?
JSON不明白Float32Array
。如果将 Float32Array
字符串化(例如,JSON.stringify(Float32Array.of(20, 250, 444))
),您会得到如下所示的内容:
{"0":20,"1":250,"2":444}
您有两个选择:
在stringify
之前将数组转换为标准数字数组,然后在JSON.parse
之后将其转换回来,或者
发送 as-is 并在 JSON.parse
.
之后将生成的对象转换回 Float32Array
由于将 Float32Array
转换为数字数组不会有损,并且能很好地保持语义,这就是我要做的:
const original = Float32Array.of(20, 250, 444);
const json = JSON.stringify(Array.from(original));
console.log(json);
const received = new Float32Array(JSON.parse(json));
console.log(received);
如果此数组是更大结构的一部分,您可能需要 replacer function with JSON.stringify
and reviver
function 来表示 JSON.parse
。
与 Float32Array
,但我需要在发送消息之前使用 JSON.stringify
。
在发送端我使用:
audioBuffer = e.inputBuffer.getChannelData(0)
var aud = { "sessionId": sessionId, "streamData": audioBuffer, "client": "student", "type": "audio" }
ws.send(JSON.stringify(aud));
我在接收端使用:
var msg = JSON.parse(message.data);
var streamData = msg.streamData;
var kbuff = new Float32Array(streamData);
context.decodeAudioData(kbuff, onBuffer, onDecodeBufferError);
但这导致接收方得到一个 Object
,我似乎无法将其转换为 Float32Array
:
发送端发送数据时:
接收方获取数据时:
知道如何进行这项工作吗?
JSON不明白Float32Array
。如果将 Float32Array
字符串化(例如,JSON.stringify(Float32Array.of(20, 250, 444))
),您会得到如下所示的内容:
{"0":20,"1":250,"2":444}
您有两个选择:
在
stringify
之前将数组转换为标准数字数组,然后在JSON.parse
之后将其转换回来,或者发送 as-is 并在
之后将生成的对象转换回JSON.parse
.Float32Array
由于将 Float32Array
转换为数字数组不会有损,并且能很好地保持语义,这就是我要做的:
const original = Float32Array.of(20, 250, 444);
const json = JSON.stringify(Array.from(original));
console.log(json);
const received = new Float32Array(JSON.parse(json));
console.log(received);
如果此数组是更大结构的一部分,您可能需要 replacer function with JSON.stringify
and reviver
function 来表示 JSON.parse
。