gpt4 book ai didi

node.js - nodejs用Buffer将二进制数据写入WritableStream

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:57 25 4
gpt4 key购买 nike

以下代码尝试将 WAV 文件的 header 写入流使用 Buffer 然后将其写入 WritableStream。

  var fs = require("fs") 

var samplesLength = 1000;
var sampleRate = 44100;

var outStream = fs.createWriteStream("zaz.wav")

var b = new Buffer(1024)
b.write('RIFF', 0);
/* file length */
b.writeUInt32LE(32 + samplesLength * 2, 4);
//b.writeUint32LE(0, 4);

b.write('WAVE', 8);
/* format chunk identifier */
b.write('fmt ', 12);

/* format chunk length */
b.writeUInt32LE(16, 16);

/* sample format (raw) */
b.writeUInt16LE(1, 20);
/* channel count */
b.writeUInt16LE(2, 22);
/* sample rate */
b.writeUInt32LE(sampleRate, 24);
/* byte rate (sample rate * block align) */
b.writeUInt32LE(sampleRate * 4, 28);
/* block align (channel count * bytes per sample) */
b.writeUInt16LE(4, 32);
/* bits per sample */
b.writeUInt16LE(16, 34);
/* data chunk identifier */
b.write('data', 36);
/* data chunk length */

//b.writeUInt32LE(40, samplesLength * 2);
b.writeUInt32LE(40, 0);


outStream.write(b.slice(0,50))
outStream.end()

由于某种原因,文件的前 8 个字节是错误的:

hexdump -C zaz.wav 00000000  28 00 00 00 f0 07 00 00  57 41 56 45 66 6d 74 20  |(.......WAVEfmt |00000010  10 00 00 00 01 00 02 00  44 ac 00 00 10 b1 02 00  |........D.......|00000020  04 00 10 00 64 61 74 61  80 5a 57 ac ef 04 00 00  |....data.ZW.....|00000030  18 57                                             |.W|

The first line should be :

00000000  52 49 46 46 24 00 ff 7f  57 41 56 45 66 6d 74 20  |RIFF$...WAVEfmt |

Update :

this line is at fault :

b.writeUInt32LE(40, 0);

它需要是:

b.writeUInt32LE(0, 40);

最佳答案

前 8 位由 b.writeUInt32LE(40, 0); 写入。

= 在 Little Endian 中偏移量 0 处写入 (int) 40 (= 0x28)。

我不知道你到底想要什么,但这就是问题所在。

关于node.js - nodejs用Buffer将二进制数据写入WritableStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19548755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com