Browser and NodeJS Web Assembly audio decoder libraries that are highly optimized for size and performance.

Overview

WASM Audio Decoders

WASM Audio Decoders is a collection of Web Assembly audio decoder libraries that are highly optimized for browser use. Each module supports synchronous decoding on the main thread as well as asynchronous (threaded) decoding through a built in Web Worker implementation.

Web Assembly is a binary instruction format for a stack-based virtual machine that allows for near native code execution speed inside of a web browser. In practice, these decoders are just as fast, and in some cases faster, than the browser implementation.

Checkout the demo here

Decoders

Each decoder is built with inline WASM to reduce bundling complexity with transpilers like Webpack. The inlined WASM is encoded using yEnc for efficient binary encoding and is gzip compressed for reduced file size.

Pre-built minified JS files are available from NPM and in each decoder's dist folder.

mpg123-decoder

Decodes MPEG Layer I/II/III into PCM

  • 83.3 KiB minified bundle size
  • Browser and NodeJS support
  • Built in Web Worker support
  • Based on mpg123
  • Install using NPM

ogg-opus-decoder

Decodes Ogg Opus data into PCM

  • 114.3 KiB minified bundle size
  • Browser and NodeJS support
  • Built in Web Worker support
  • Multichannel decoding (up to 8 channels)
  • Based on libopusfile
  • Install using NPM

opus-decoder

Decodes raw Opus audio frames into PCM

  • 88.7 KiB minified bundle size
  • Browser and NodeJS support
  • Built in Web Worker support
  • Multichannel decoding (up to 255 channels)
  • Based on libopus
  • Install using NPM

Developing

Prerequisites

  1. Install Emscripten by following these instructions.
    • This repository has been tested with Emscripten 2.0.34.

Building

  1. Make sure to source the Emscripten path in the terminal you want build in.
  2. Run git submodule update --init to clone down the git sub-modules.
  3. Run npm i to install the build tool dependencies.
  4. Run make clean and make to build the libraries.
    • You can run make -j8 where 8 is the number of CPU cores on your system to speed up the build.
  5. The builds will be located in each library's dist folder:
    • opus-decoder: src/opus-decoder/dist/
    • ogg-opus-decoder: src/ogg-opus-decoder/dist/
    • mpg123-decoder: src/mpg123-decoder/dist/

Testing

  1. Run npm i to install the build tool and test dependencies.
  2. Run npm run test to run the test suite.

Attributions

  • OggOpusDecoder was originally based on AnthumChris/opus-stream-decoder.
    • This version has been optimized for size and for simple bundling in web applications:
      • Everything is bundled in a single minified Javascript file for ease of use.
      • WASM binary is encoded inline using yEnc binary encoding and compressed using DEFLATE to significantly reduce bundle size.
      • WASM compiler, minifier, and bundler options are tuned for best possible size and performance.
  • tiny-inflate is included from foliojs/tiny-inflate and is used to decompress the WASM binary.

Licensing

The source code that originates in this project is licensed under the MIT license. Please note that any external source code included by repository, such as the decoding libraries included as git submodules and compiled into the dist files, may have different licensing terms.

Comments
  • mpg123-decoder sometimes returns invalid sampleRate

    mpg123-decoder sometimes returns invalid sampleRate

    I noticed something funny with mpg123-decoder. Out of 226 MP3 files used by my app, a handful (6%) return sampleRate values that are way out of range.

    List of invalid `sampleRate` values I got
    -1282162537
    -1289759728
    -1295419197
    -1308997852
    -1316526638
    -1321404159
    5402816
    5402816
    823350018
    839105538
    841392158
    848656542
    873308273
    894697243
    

    The same files always return the same invalid values if I reload the page. There are no differences between the files besides being recordings of different notes – they were all VBR encoded at the same time and settings with LAME (in Reaper), and all have the same number of samples.

    Here are a couple files that have the invalid values along with a couple that aren't affected: Example MP3s for mpg123-decoder sampleRate issue.zip

    This doesn't affect my app, because I know the sample rate ahead of time so I can hard-code it. But I wanted to at least leave a record of what I found.

    opened by banjerluke 11
  • Error when using OpusAudioDecoder to decode a single file in Electron

    Error when using OpusAudioDecoder to decode a single file in Electron

    Environment: Electron 17.0.1, renderer process, with nodeIntegrationInWorker: true

    I have found an issue trying to decode an Opus file using OggOpusDecoderWebWorker. I am getting the error as follows:

    TypeError: Cannot read properties of null (reading 'decodeFrames')
    

    I only need to decode a single file, so I am sing await (I know it is a bad idea, I have read the best practices guide in the docs).

    import { OggOpusDecoder, OggOpusDecoderWebWorker } from 'ogg-opus-decoder';
    class ... {
    
        public decode = async (path: string): Promise<AudioBuffer> => {
            try {
                const decoder = new OggOpusDecoderWebWorker();
                await decoder.ready;
    
                let response = await fs.readFileSync(path);
    
                const { channelData, samplesDecoded, sampleRate } = await decoder.decodeFile(new Uint8Array(response));
                response = null;
                const buffer = this.context.createBuffer(channelData.length, samplesDecoded, sampleRate);
    
                channelData.map((channel, index) => {
                    buffer.copyToChannel(channel, index);
                });
    
                decoder.free();
    
                return buffer;
            } catch (error) {
                throw new Error(`opus decoder was unable to decode the file at ${path}: ${error}`)
            }
        }
    }
    

    Curiously OggOpusDecoder (without the web worker) works fine.

    I am running into a similar issue with the mpeg decoder web worker (works without the worker), saying that URL scheme must be of type file, but I can open another issue if needed, maybe it's something in Electron's part or I am doing something wrong so I think one issue will suffice for now?

    Thanks for your assistance.

    opened by ogomez92 7
  • opus-decoder

    opus-decoder "Demo" doesn't demo opus-decoder

    Kinda nitpicky, but caused me a little pain. The "Demo" link on the opus-decoder page leads to a demo of ogg-opus-decoder, which is not the same thing. In particular, it doesn't support multichannel decoding, which is the one thing I wanted to test of opus-decoder.

    opened by EricTetz 7
  • mpg123-decoder only loading 15-25% of MP3 files

    mpg123-decoder only loading 15-25% of MP3 files

    All mp3 files that I decode with mpg123-decoder are consistently cut off about 15%-25% into the file. Files of the same length, bitrate, channel count, etc. seem to be decoded to the same point, but that point varies based on all those attributes (just not the contents of the file, it seems).

    MP3 file permutations I've tried:

    • Short files (2s) and long files (over a minute)
    • Stereo, mono
    • CBR, VBR
    • 48kHz, 44.1kHz, 11025 Hz

    Other things I've tried:

    • Both my fork (#6) and the unmodified library
    • Updating mpg123 submodule to 1.29.1

    With DevTools, I verified that the full file is being passed to MPEGDecoder.decode - the byte length of the data argument length matches the file's size in bytes. Then it loops through each frame. Oddly, the first frame is always 0 samples. Then there are a series of 1152-sample decoded frames, then it ends. So it's looping through the entire source file, but only decoding up to ~1/4 of it.

    I've hit a wall with trying to figure out what's going on here. Any ideas?

    opened by banjerluke 6
  • catch promise resolve on decodeFrames

    catch promise resolve on decodeFrames

    Hi,

    When errors are thrown, the .catch() promise doesn't get resolved. Let me know if you need any more details to reproduce or if this is what you'd expect.

    Thanks

    opened by jjackevans 5
  • How to playback decoded audio

    How to playback decoded audio

    Hi,

    I'm having some difficulties with the opus decoder, would you be able to answer a few questions over email?

    You can contact me at [email protected] if this is ok?

    Thanks

    opened by jjackevans 5
  • Demo failing on certain files.

    Demo failing on certain files.

    So I noticed your speedy work on adding multichannel support. It works great with the test file we added here. Awesome work.

    I have a few files closer to my use case that fail in the demo. They were created using this script. The third one is actually a snippet of the aforementioned test file, chopped out by that script. They all play fine with ffplay and Reaper (screenshots are from Reaper), but fail in the demo.

    Broken1 image

    Broken2 image

    Broken3 image

    broken.zip

    opened by EricTetz 5
  • Decoded Audio is longer than real audio.

    Decoded Audio is longer than real audio.

    In my tests, I check the time elapsed between decoded frames and compare it to the length of the real decoded audio. I am getting longer audio buffers than the total elapsed time. (Elapsed time = real-time, i.e. live recording + encoding + network latency + decoding.)

    The reason I checked in the first place is b/c my app has a creeping latency I could not otherwise debug or buffer. The tests seem to prove the audio is actually getting longer (not latency).

    I don't know if the source of this bug is the decoder or the encoder. I will have to do some tests to determine. What do you use to encode ogg?

    opened by NHQ 2
  • Typescript typings

    Typescript typings

    Whipped up some typings for Typescript. 😊

    I've never packaged typings with an NPM package before, but I think I did it right. The types work great when copied into my app as ambient typings, but VS Code doesn't recognize them when using npm link to link to the package. Could be something on my end, though.

    opened by banjerluke 2
  • Web Workers implementation for multi-threaded decoding

    Web Workers implementation for multi-threaded decoding

    This update adds web worker support to ogg-opus-decoder and mpg123-decoder. When loaded as a web worker, one can asynchronously load audio files, like this:

    const worker = new Worker('/path/to/ogg-opus-decoder.min.js');
    
    worker.addEventListener('message', (msg) => {
      const { channelData, samplesDecoded, sampleRate, audioId } = msg.data;
      const audioBuffer = new AudioBuffer({
        numberOfChannels: channelData.length,
        length: samplesDecoded,
        sampleRate,
      });
      // do something with the AudioBuffer
    });
    
    worker.postMessage({
      command: 'decode',
      compressedData: opusFileArrayBuffer,
      audioId: "example_sound" 
    }, [mpegData]);
    

    README files have been updated with info on how to use libraries as Web Workers. ogg-opus-decoder is being used as a Worker in production across many devices with great success. mpg123-decoder is only decoding about 150-200ms of my 2-3 second MP3 clips, and I'm not sure why, but the web worker aspect is working well – it has the same issue when called as an NPM module. Still working on that... but I wanted to post this so that you can merge it in if you like!

    Closes #5.

    opened by banjerluke 2
  • Odd bug maybe related: Could not enqueue bytes for decoding.

    Odd bug maybe related: Could not enqueue bytes for decoding.

    Greetings, I have this module working in a single web page, from an encoder directly to the decoder, nice. But when I have piped the same encoded ogg chunks over a network (i.e. through a node stream) the decoder does nothing with the data (no onDecode events fired), and after several attempts issues up the error Could not enqueue bytes for decoding. You may also have invalid Ogg Opus file. The second part is not true; I have verified the chunks are exactly the same both sides of the network. I really doubt this is an issue with the decoder, but I have to check. Also the error is claimed to be uncaught, despite all attempts, and seems to be uncatchable this side of wasm. I have tried checking for the decoder to be ready, freeing it, etc.

    opened by NHQ 2
  • [ogg-opus-decoder] compile error in Safari 16

    [ogg-opus-decoder] compile error in Safari 16

    Hello and thanks for this awesome lib!

    ogg-opus-decoder works fine in Chrome and Firefox, but not in Safari. It throws a CompileError: WebAssembly.Module doesn't parse at byte 0

    Is there anything I can do to get around this, or is it really a Safari limitation?

    Thanks anyway!

    image

    opened by canove 0
  • Plugin Architecture

    Plugin Architecture

    This library would benefit from a more modular / plugin architecture so that the common code can be reused across decoders.

    • Tree shaking common code used across modules for smaller build size
    • Simpler code structure (less duplicated scaffolding code, easier to maintain)
    • Common interface for new audio decoders to implement

    New library layout might look like:

    • @wasm-audio-decoders/decoder-api -> contains the shared scaffolding code for Web Worker / general decoding API.
    • @wasm-audio-decoders/mpeg
    • @wasm-audio-decoders/opus
    • @wasm-audio-decoders/ogg-opus
    • @wasm-audio-decoders/flac
    • @wasm-audio-decoders/ogg-flac
    • @wasm-audio-decoders/vorbis
    • @wasm-audio-decoders/ogg-vorbis
    enhancement 
    opened by eshaz 0
  • Add build for Web Assembly SIMD

    Add build for Web Assembly SIMD

    Add builds that support Web Assembly SIMD. This should significantly speed up decoding.

    • Must be backwards compatible with browsers that don't support this feature, since it relatively new.
      • Could use feature detection and fall back to the non-SIMD build if not available.
    • Update configure options to allow any SIMD optimized code to be added during pre-processing.
    • The deinterleave function may be able to be optimized to use SIMD to more quickly iterate over the data, potentially by creating a custom function for this build. https://github.com/WebAssembly/simd/blob/master/proposals/simd/SIMD.md
    enhancement 
    opened by eshaz 0
Releases(opus-decoder/0.6.2)
  • opus-decoder/0.6.2(Dec 24, 2022)

    What's Changed

    • fix: add types.d.ts to package.json files array by @aleclarson in https://github.com/eshaz/wasm-audio-decoders/pull/64

    New Contributors

    • @aleclarson made their first contribution in https://github.com/eshaz/wasm-audio-decoders/pull/64

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/opus-decoder/0.6.1...opus-decoder/0.6.2

    Source code(tar.gz)
    Source code(zip)
  • ogg-opus-decoder/1.5.2(Dec 24, 2022)

    What's Changed

    • fix: add types.d.ts to package.json files array by @aleclarson in https://github.com/eshaz/wasm-audio-decoders/pull/64

    New Contributors

    • @aleclarson made their first contribution in https://github.com/eshaz/wasm-audio-decoders/pull/64

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/ogg-opus-decoder/1.5.1...ogg-opus-decoder/1.5.2

    Source code(tar.gz)
    Source code(zip)
  • mpg123-decoder/0.4.2(Dec 24, 2022)

    What's Changed

    • fix: add types.d.ts to package.json files array by @aleclarson in https://github.com/eshaz/wasm-audio-decoders/pull/64

    New Contributors

    • @aleclarson made their first contribution in https://github.com/eshaz/wasm-audio-decoders/pull/64

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/mpg123-decoder/0.4.1...mpg123-decoder/0.4.2

    Source code(tar.gz)
    Source code(zip)
  • flac/0.1.2(Dec 24, 2022)

    What's Changed

    • fix: add types.d.ts to package.json files array by @aleclarson in https://github.com/eshaz/wasm-audio-decoders/pull/64

    New Contributors

    • @aleclarson made their first contribution in https://github.com/eshaz/wasm-audio-decoders/pull/64

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/flac/0.1.1...flac/0.1.2

    Source code(tar.gz)
    Source code(zip)
  • opus-decoder/0.6.1(Dec 18, 2022)

  • ogg-opus-decoder/1.5.1(Dec 18, 2022)

  • mpg123-decoder/0.4.1(Dec 18, 2022)

  • flac/0.1.1(Dec 18, 2022)

  • opus-decoder/0.6.0(Dec 16, 2022)

    What's Changed

    • Error Reporting by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/62

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/opus-decoder/0.5.4...opus-decoder/0.6.0

    Features

    • Return any decoding errors and location in data relative to input and output
    • Resolves #60

    Fixes

    • Decode through any decoding errors
    Source code(tar.gz)
    Source code(zip)
  • ogg-opus-decoder/1.5.0(Dec 16, 2022)

    What's Changed

    • Error Reporting by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/62

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/ogg-opus-decoder/1.4.5...ogg-opus-decoder/1.5.0

    Features

    • Return any decoding errors and location in data relative to input and output
    • Resolves #60

    Fixes

    • Decode through any decoding errors
    Source code(tar.gz)
    Source code(zip)
  • mpg123-decoder/0.4.0(Dec 16, 2022)

    What's Changed

    • Error Reporting by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/62

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/mpg123-decoder/0.3.18...mpg123-decoder/0.4.0

    Features

    • Return any decoding errors and location in data relative to input and output
    • Resolves #60

    Fixes

    • Decode through any decoding errors
    Source code(tar.gz)
    Source code(zip)
  • flac/0.1.0(Dec 16, 2022)

    What's Changed

    • Error Reporting by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/62

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/flac/0.0.3...flac/0.1.0

    Features

    • Return any decoding errors and location in data relative to input and output
    • Resolves #60

    Fixes

    • Decode through any decoding errors
    Source code(tar.gz)
    Source code(zip)
  • opus-decoder/0.5.4(Dec 11, 2022)

    What's Changed

    • Fix Web Worker Dependency by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/61

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/opus-decoder/0.5.3...opus-decoder/0.5.4

    Source code(tar.gz)
    Source code(zip)
  • ogg-opus-decoder/1.4.5(Dec 11, 2022)

    What's Changed

    • Fix Web Worker Dependency by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/61

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/ogg-opus-decoder/1.4.4...ogg-opus-decoder/1.4.5

    Source code(tar.gz)
    Source code(zip)
  • mpg123-decoder/0.3.18(Dec 11, 2022)

    What's Changed

    • Fix Web Worker Dependency by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/61

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/mpg123-decoder/0.3.17...mpg123-decoder/0.3.18

    Source code(tar.gz)
    Source code(zip)
  • flac/0.0.3(Dec 12, 2022)

    What's Changed

    • Fix Web Worker Dependency by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/61

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/flac/0.0.2...flac/0.0.3

    Source code(tar.gz)
    Source code(zip)
  • flac/0.0.2(Oct 12, 2022)

    What's Changed

    • FLAC fixes / better error reporting by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/59

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/flac/0.0.1...flac/0.0.2

    Features

    • Better log output when a decode error happens

    Fixes

    • Fix Web Worker implementation
    Source code(tar.gz)
    Source code(zip)
  • opus-decoder/0.5.3(Oct 10, 2022)

    What's Changed

    • FLAC Decoder by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/58

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/opus-decoder/0.5.2...opus-decoder/0.5.3

    Source code(tar.gz)
    Source code(zip)
  • ogg-opus-decoder/1.4.4(Oct 10, 2022)

    What's Changed

    • FLAC Decoder by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/58

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/ogg-opus-decoder/1.4.3...ogg-opus-decoder/1.4.4

    Source code(tar.gz)
    Source code(zip)
  • mpg123-decoder/0.3.17(Oct 10, 2022)

    What's Changed

    • Fix OpusDecoder.decodeFrame by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/55
    • FLAC Decoder by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/58

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/mpg123-decoder/0.3.16...mpg123-decoder/0.3.17

    Source code(tar.gz)
    Source code(zip)
  • flac/0.0.1(Oct 10, 2022)

    What's Changed

    • FLAC Decoder by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/58

    Features

    • Add FLACDecoder main thread flac decoder
    • Add FLACDecoderWebWorker web worker flac decoder
    Source code(tar.gz)
    Source code(zip)
  • opus-decoder/0.5.2(Aug 18, 2022)

    What's Changed

    • Fix OpusDecoder.decodeFrame by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/55

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/opus-decoder/0.5.1...opus-decoder/0.5.2

    Source code(tar.gz)
    Source code(zip)
  • ogg-opus-decoder/1.4.3(Aug 18, 2022)

    What's Changed

    • Fix OpusDecoder.decodeFrame by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/55

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/ogg-opus-decoder/1.4.2...ogg-opus-decoder/1.4.3

    Source code(tar.gz)
    Source code(zip)
  • opus-decoder/0.5.1(Jul 24, 2022)

    What's Changed

    • Various Fixes by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/52

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/opus-decoder/0.5.0...opus-decoder/0.5.1

    Fixes

    • Web Worker implementation was not applying any new options, since they were being serialized and saved to the source code cache
    Source code(tar.gz)
    Source code(zip)
  • opus-decoder/0.5.0(Jul 24, 2022)

    What's Changed

    • Ogg Opus 255 channel decoding by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/50

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/opus-decoder/0.4.7...opus-decoder/0.5.0

    Features

    • Add verbiage describing opus-decoder container vs. frames. See #49
    • Add forceStereo option to downmix multichannel audio.
    Source code(tar.gz)
    Source code(zip)
  • ogg-opus-decoder/1.4.2(Jul 24, 2022)

    What's Changed

    • Various Fixes by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/52

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/ogg-opus-decoder/1.4.0...ogg-opus-decoder/1.4.2

    Fixes

    • Web Worker implementation was not applying any new options, since they were being serialized and saved to the source code cache
    • Initialize the decoder when frames are only returned on flush(). Resolves #51
    Source code(tar.gz)
    Source code(zip)
  • ogg-opus-decoder/1.4.0(Jul 24, 2022)

    What's Changed

    • Ogg Opus 255 channel decoding by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/50

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/ogg-opus-decoder/1.3.10...ogg-opus-decoder/1.4.0

    Features

    • Support up to 255 multichannel decoding. See #49
    • Add decodeFile and flush methods.
    • Remove opusfile and ogg libraries.
    Source code(tar.gz)
    Source code(zip)
  • mpg123-decoder/0.3.16(Jul 24, 2022)

    What's Changed

    • Various Fixes by @eshaz in https://github.com/eshaz/wasm-audio-decoders/pull/52

    Full Changelog: https://github.com/eshaz/wasm-audio-decoders/compare/mpg123-decoder/0.3.15...mpg123-decoder/0.3.16

    Fixes

    • Web Worker implementation was not applying any new options, since they were being serialized and saved to the source code cache
    Source code(tar.gz)
    Source code(zip)
  • opus-decoder/0.4.7(Jul 12, 2022)

  • ogg-opus-decoder/1.3.10(Jul 12, 2022)

Owner
Ethan Halsall
Maintainer of open source JavaScript Browser / NodeJS audio libraries.
Ethan Halsall
Vimb - the vim like browser is a webkit based web browser that behaves like the vimperator plugin for the firefox and usage paradigms from the great editor vim.

Vimb - the vim like browser is a webkit based web browser that behaves like the vimperator plugin for the firefox and usage paradigms from the great editor vim. The goal of vimb is to build a completely keyboard-driven, efficient and pleasurable browsing-experience.

Daniel Carl 1.2k Dec 30, 2022
Visual Studio extension for assembly syntax highlighting and code completion in assembly files and the disassembly window

Asm-Dude Assembly syntax highlighting and code assistance for assembly source files and the disassembly window for Visual Studio 2015, 2017 and 2019.

Henk-Jan Lebbink 4k Jan 6, 2023
Create a Jupyter Kernel for 8085 Microprocessor assembly language that can interpret assembly-level programs right from the Jupyter notebook.

Create a Jupyter Kernel for 8085 Microprocessor assembly language that can interpret assembly-level programs right from the Jupyter notebook.

Sarita Singh 4 Oct 5, 2022
Access to the native OS clipboard from NodeJS

Read / Write from the native OS clipboard in Node.js Features Simple API usage and Error Handling Fast / Direct OS Calls using C Full Unicode Support

Caden Parker 5 Oct 13, 2022
A simple C++ library with multi language interfaces (Java, NodeJS, Python...)

cpp-to-x A simple C++ library with multi language interfaces (Java, NodeJS, Python...) Why This is just a learning experiment to see how you can write

James Roberts 1 Nov 25, 2021
Projeto pessoal: Obter a temperatura ambiente e através de um termistor ligado a um arduino e disponibilizar esses dados em tempo real via API NodeJS. No front-end os dados são acessados por uma interface em React JS.

INTEGRAÇÃO DA API COM OS DADOS DO ARDUINO FORNECIDOS PELO TERMISTOR Código Desenvolvido por Lucas Muffato. MATERIAIS 1 Placa de Arduino; 1 Cabo de con

Lucas Muffato 35 Aug 16, 2022
A Minimal Web Browser with Built-in Adblocker in Less Than 100 Lines of Code

A Minimal QtWebEngine Web Browser with Adblocker How Does It Work This is a minimal network filter implementation using QWebEngineUrlRequestIntercepto

Penk Chen 19 Jul 23, 2022
an easy-to-use cross platform web browser controller for C++

WebBrowser++ 这是一个基于C++17的唯头文件跨平台浏览器控制库。 您只需要将本目录下的Include文件夹拷贝至您的项目中即可使用。如果使用CMake编译,则可直接include_directories(Include),也可以模仿本项目的CMakeLists.txt进行编写。 建立该

null 8 Nov 17, 2021
An old-style web browser stub, comes from Internet Explorer was genocided on Windows.

Outernet Explorer An old-style web browser stub, comes from Internet Explorer was genocided on Windows. Download from: https://github.com/kekyo/Outern

Kouji Matsui 11 Oct 14, 2022
QtWebKit-based web browser on Linux framebuffer.

FBrowser QtWebKit-based web browser on Linux framebuffer. Security Notes This browser is not intended for visiting untrusted websites. By default, OSB

null 24 Jan 1, 2023
POCO C++ Libraries are powerful cross-platform C++ libraries for building network

The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems.

POCO C++ Libraries 6.7k Jan 1, 2023
Shared to msvcrt.dll or ucrtbase.dll and optimize the C/C++ application file size.

VC-LTL - An elegant way to compile lighter binaries. 简体中文 I would like to turn into a stone bridge, go through 500 years of wind, 500 years of Sun, ra

Chuyu Team 266 Jan 1, 2023
My new zigbee project. Wireless temperature and humidity mini sensor with electronic ink display 2.13 inches, low power consumption, compact size, enclosure with magnets.

My new zigbee project. Wireless temperature and humidity mini sensor with electronic ink display 2.13 inches, low power consumption, compact size, enclosure with magnets. The device use SHTC3 sensors, chip CC2530, battery CR2477.

Andrew Lamchenko 20 Nov 20, 2022
OSA a is minisatellite/ space probe the size of a can designed to participate in the ESA CanSat 2021 competition 🛰️ 📡 .

Project OSA OSA a is minisatellite/ space probe the size of a can designed to participate in the ESA CanSat 2021 competition ??️ ?? . Our project is c

OSATeam 11 Sep 30, 2022
esp32s2 implement a usb port display with 320*240 size with ~13pfs

esp32s2_usb_display overview it's a USB mini display for Linux platform, such as raspberry Pi, Centos X86 server. it refer many opensource projects: r

null 10 Oct 13, 2022
Tiny - low-level library for minimizing the size of your types

foonathan/tiny Note: This project is currently WIP, no guarantees are made until an 0.1 release. This project is a C++11 library for putting every las

Jonathan Müller 101 Oct 29, 2022
Flutter-Clock-and-Reminder-App - a highly functional clock and reminder app developed on flutter framework.

clock_app A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if thi

Umar Baloch 6 Aug 4, 2022
Highly efficent, caching, copy-on-write lua vector math library

lua-vec Table constructions in Lua are expensive, creating and destroying thousands of "vector" tables frame to frame in an engine can cause serious p

Dale Weiler 4 Jul 23, 2022