npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@wpdas/wave-header

v1.0.1

Published

Generates, Reads and Rewrites a WAVE-file header.

Downloads

2,063

Readme

wave-header

Using this module you can generate, read and rewrite a WAVE-file header. It's very useful for fix wav file headers as well.

I developed this module with a purpose to fix wav files generated by FFmpeg using stream. It's well-known that every wav files that was generated by FFmpeg in a stream has an issue with its header information, and the final file presents issue with the total time (00:00). This module will definitely fix this issue.

You can use this module for many others purposes, of course.

Examples

Generating a WAVE-file header buffer:

const fs = require('fs');
const waveHeader = require('wave-header');

const fileSize = 141971546;

// Options: (length, {channels: 1, sampleRate: 44100, bitDepth: 16})
const fileHeaderBuffer = waveHeader.generateHeader(fileSize, { bitDepth: 16 });

Reading a WAVE-file header from buffer chunk:

const { promises } = require('fs');
const waveHeader = require('wave-header');

const HEADER_OFFSET = 44;

promises
  // Read only the head chunk from the audio file (better performance and reliability)
  .readFile('my-wav-file.wav', { start: 0, end: HEADER_OFFSET })
  .then(bufferChunk => {
    const header = waveHeader.readHeader(bufferChunk);
    console.log(header);
    /**
     { 
        riffHead: 'RIFF',
        fileSize: 4294967295,
        waveHead: 'WAVE',
        fmtHead: 'fmt ',
        formatLength: 16,
        audioFormat: 1,
        channels: 1,
        sampleRate: 44100,
        byteRate: 88200,
        blockAlign: 2,
        bitDepth: 16,
        data: 'LIST',
        dataLength: 130
    }
    */
  });

Rewriting the header of an issued audio file in real time using stream process. You can use this example when you're using FFmpeg to get wav streamed file and fix the header:

const { promises, createReadStream, createWriteStream } = require('fs');
const waveHeader = require('wave-header');

const audioFileWithHeaderIssueDir = 'my-wav-file-with-header-issue.wav';
let firstChunkRead = false;

function fixAudioHeader(fileSize) {
  const newHeaderBuffer = waveHeader.generateHeader(fileSize, {
    bitDepth: 16
  });

  // Final file with header fixed
  const writeStream = createWriteStream('my-wav-file-with-fixed-header.wav');

  createReadStream(audioFileWithHeaderIssueDir).on('data', buffer => {
    // WARNING: Rewrites the header information in a chunk of buffer. Must be used the first chunk of buffer from a .wav file.
    if (!firstChunkRead) {
      writeStream.write(
        waveHeader.rewriteHeaderInBufferChunk(newHeaderBuffer, buffer)
      );
      firstChunkRead = true;
    } else {
      writeStream.write(buffer);
    }
  });
}

promises.stat(audioFileWithHeaderIssueDir).then(stats => {
  fixAudioHeader(stats.size);
});

Well to know

If you want to use similar process above with AWS.S3, you may want to use stream.PassThrough to write the fixed buffer.