| 339 | } |
| 340 | |
| 341 | static createWavHeader(dataLength: number, options: WavConversionOptions): Buffer { |
| 342 | const { numChannels, sampleRate, bitsPerSample } = options; |
| 343 | const byteRate = sampleRate * numChannels * bitsPerSample / 8; |
| 344 | const blockAlign = numChannels * bitsPerSample / 8; |
| 345 | const buffer = Buffer.alloc(44); |
| 346 | |
| 347 | buffer.write('RIFF', 0); |
| 348 | buffer.writeUInt32LE(36 + dataLength, 4); |
| 349 | buffer.write('WAVE', 8); |
| 350 | buffer.write('fmt ', 12); |
| 351 | buffer.writeUInt32LE(16, 16); |
| 352 | buffer.writeUInt16LE(1, 20); |
| 353 | buffer.writeUInt16LE(numChannels, 22); |
| 354 | buffer.writeUInt32LE(sampleRate, 24); |
| 355 | buffer.writeUInt32LE(byteRate, 28); |
| 356 | buffer.writeUInt16LE(blockAlign, 32); |
| 357 | buffer.writeUInt16LE(bitsPerSample, 34); |
| 358 | buffer.write('data', 36); |
| 359 | buffer.writeUInt32LE(dataLength, 40); |
| 360 | |
| 361 | return buffer; |
| 362 | } |
| 363 | |
| 364 | static handleError(error: any, context: string): string { |
| 365 | const timestamp = new Date().toISOString(); |