node-fdkaac
    TypeScript icon, indicating that this package has built-in type declarations

    1.4.1 • Public • Published

    node-fdkaac

    node-fdkaac logo

    Fraunhofer FDK AAC is a high-quality open-source AAC encoder. For all AAC and M4A encoding needs, a Node.js wrapper of the full fdkaac command line frontend (by nu774) based on libfdk-aac encoder.

    The encoder reads linear PCM audio in either WAV, raw PCM or CAF format and encodes it into an M4A or an AAC file.

    Requirements

    • Linux or MacOS (Windows is NOT support by this package)
    • libfdk-aac, fdkaac and ffmpeg installed (instructions see below)
    • node 12.20.* or newer

    Installation

    You can install it with npm:

    $ npm install --save node-fdkaac

    If you have not installed libfdk-aac, fdkaac and ffmpeg yet, you find a bash script to compile the source code as install.sh in this package.

    install.sh requirements:

    • automake
    • libtool
    • git

    Run on Debian

    $ sudo apt-get install automake libtool git ffmpeg
    $ chmod +x install.sh
    $ sudo ./install.sh

    Run on MacOS with brew

    $ brew install automake libtool git ffmpeg
    $ chmod +x install.sh
    $ sudo ./install.sh

    Example

    Encode from file to file

    const Fdkaac = require("node-fdkaac").Fdkaac;
    
    const encoder = new Fdkaac({
        output: "./audio-files/demo.m4a",
        bitrate: 192,
    }).setFile("./audio-files/demo.wav");
    
    encoder
        .encode()
        .then(() => {
            // Encoding finished
        })
        .catch((error) => {
            // Something went wrong
        });

    Encode from file to buffer

    const Fdkaac = require("node-fdkaac").Fdkaac;
    
    const encoder = new Fdkaac({
        output: "buffer",
        bitrate: 192,
    }).setFile("./audio-files/demo.wav");
    
    encoder
        .encode()
        .then(() => {
            // Encoding finished
            const buffer = encoder.getBuffer();
        })
        .catch((error) => {
            // Something went wrong
        });

    Encode from buffer to file

    [...]
    
    const Fdkaac = require("node-fdkaac").Fdkaac;
    
    const encoder = new Fdkaac({
        "output": "./audio-files/demo.m4a",
        "bitrate": 192
    }).setBuffer(audioFileBuffer);
    
    encoder.encode()
        .then(() => {
            // Encoding finished
        })
        .catch((error) => {
            // Something went wrong
        });

    Encode from buffer to buffer

    [...]
    
    const Fdkaac = require("node-fdkaac").Fdkaac;
    
    const encoder = new Fdkaac({
        "output": "buffer",
        "bitrate": 192
    }).setBuffer(audioFileBuffer);
    
    encoder.encode()
        .then(() => {
            // Encoding finished
            const buffer = encoder.getBuffer();
        })
        .catch((error) => {
            // Something went wrong
        });

    Get status of encoder as object

    const Fdkaac = require("node-fdkaac").Fdkaac;
    
    const encoder = new Fdkaac({
        output: "buffer",
        bitrate: 192,
    }).setFile("./audio-files/demo.wav");
    
    encoder
        .encode()
        .then(() => {
            // Encoding finished
        })
        .catch((error) => {
            // Something went wrong
        });
    
    const status = encoder.getStatus();

    Get status of encoder as EventEmitter

    const Fdkaac = require("node-fdkaac").Fdkaac;
    
    const encoder = new Fdkaac({
        output: "buffer",
        bitrate: 192,
    }).setFile("./audio-files/demo.wav");
    
    const emitter = encoder.getEmitter();
    
    emitter.on("progress", ([progress, eta]) => {
        // On progress of encoding; in percent and estimated time of arrival as 00:00
    });
    
    emitter.on("finish", () => {
        // On finish
    });
    
    emitter.on("error", (error) => {
        // On error
    });
    
    encoder
        .encode()
        .then(() => {
            // Encoding finished
        })
        .catch((error) => {
            // Something went wrong
        });

    Decode from file to file

    const Fdkaac = require("node-fdkaac").Fdkaac;
    
    const decoder = new Fdkaac({
        output: "./audio-files/demo.wav",
    }).setFile("./audio-files/demo.m4a");
    
    decoder
        .decode()
        .then(() => {
            // Decoding finished
        })
        .catch((error) => {
            // Something went wrong
        });

    Decode from file to buffer

    const Fdkaac = require("node-fdkaac").Fdkaac;
    
    const decoder = new Lame({
        output: "buffer",
    }).setFile("./audio-files/demo.m4a");
    
    decoder
        .decode()
        .then(() => {
            // Decoding finished
            const buffer = decoder.getBuffer();
        })
        .catch((error) => {
            // Something went wrong
        });

    Decode from buffer to file

    [...]
    
    const Fdkaac = require("node-fdkaac").Fdkaac;
    
    const decoder = new Lame({
        "output": "./audio-files/demo.wav"
    }).setBuffer(m4aInputBuffer);
    
    decoder.decode()
        .then(() => {
            // Decoding finished
        })
        .catch((error) => {
            // Something went wrong
        });

    Decode from buffer to buffer

    [...]
    
    const Fdkaac = require("node-fdkaac").Fdkaac;
    
    const decoder = new Lame({
        "output": "buffer"
    }).setBuffer(mp4aInputBuffer);
    
    decoder.decode()
        .then(() => {
            // Decoding finished
            const buffer = decoder.getBuffer();
        })
        .catch((error) => {
            // Something went wrong
        });

    All options

    Option Description Values Default
    output Output filename Path
    profile Target profile (MPEG4 audio object type, AOT) 2 (MPEG-4 AAC LC), 5 (MPEG-4 HE-AAC; SBR), 23 (MPEG-4 AAC LD), 29 (MPEG-4 HE-AAC v2; SBR+PS), 39 (MPEG-4 AAC ELD) 2
    bitrate Target bitrate (for CBR) Number undefined
    bitrate-mode Bitrate configuration mode. Available VBR quality value depends on other parameters such as profile, sample rate, or number of channels. 0 (CBR), 1-5 (VBR; higher value => higher bitrate) 0
    bandwidth Frequency bandwidth (lowpass cut-off frequency) in Hz. Available on AAC LC only. Number undefined
    afterburner Configure afterburner mode. When enabled, quality is increased at the expense of additional computational workload. 0 (Off), 1 (On) 1
    lowdelay-sbr Configure SBR activity on AAC ELD. -1 (Use ELD SBR auto configuration, 0 (Disable SBR on ELD), 1 (Enable SBR on ELD) 0
    sbr-ratio Controls activation of downsampled SBR. 0 (Use lib default), 1 (Use downsampled SBR; default for ELD+SBR), 2 (Use dual-rate SBR; default for HE-AAC) 0
    transport-format Transport format. Tagging and gapless playback is only available on M4A. 0 (M4A), 1 (ADIF), 2 (ADTS), 6 (LATM MCP=1), 7 (LATM MCP=0), 10 (LOAS/LATM; LATM within LOAS) 0
    adts-crc-check Add CRC protection on ADTS header. Boolean false
    header-period StreamMuxConfig/PCE repetition period in the transport layer. Number undefined
    gapless-mode Method to declare amount of encoder delay (and padding) in M4A container. These values are mandatory for proper gapless playback on player side. 0 (iTunSMPB), 1 (ISO standard; edts and sgpd), 2 (Both) 0
    include-sbr-delay When specified, count SBR decoder delay in encoder delay. Boolean false
    ignorelength Ignore length field of data chunk in input WAV file. Boolean false
    moov-before-mdat Place moov box before mdat box in M4A container. This option might be important for some hardware players, that are known to refuse moov box placed after mdat box. Boolean false
    raw Regard input as raw PCM. Boolean false
    raw-channels Specify number of channels of raw input Number 2
    raw-rate Specify sample rate of raw input. Number 44100
    raw-format Specify sample format of raw input (details see nu774/fdkaac). String S16L
    meta Meta data for M4A container. Object undefined

    Meta options

    Option Description Values Default
    title Set title tag. String undefined
    artist Set artist tag. String undefined
    album Set album tag. String undefined
    genre Set genre tag. String undefined
    date Set date tag. String undefined
    composer Set composer tag. String undefined
    grouping Set grouping tag. String undefined
    comment Set comment tag. String undefined
    album-artist Set album artist tag. String undefined
    track Set track tag, with or without number of total tracks. Number[/Total] undefined
    disk Set disk tag, with or without number of total discs. Number[/Total] undefined
    tempo Set tempo (BPM) tag. Number undefined
    tag Set iTunes predefined tag with explicit fourcc key and value. See iTunesMetadata for known predefined keys. <fcc>:<value> undefined
    long-tag Set arbitrary tag as iTunes custom metadata. Stored in com.apple.iTunes field. <fcc>:<value> undefined

    Option description text from fdkaac by nu774. Based on fdkaac commit 4682fe4 from Jan 16, 2017.

    Install

    npm i node-fdkaac

    DownloadsWeekly Downloads

    21

    Version

    1.4.1

    License

    ISC

    Unpacked Size

    67.5 kB

    Total Files

    14

    Last publish

    Collaborators

    • jankarres
    • devowlio