Repository files navigation

npm version

What Is It?

node-audio is a graph-based audio processing library for Node.Js. It's very similar to the web-audio api. In fact in its current iteration it is little more than a binding for LabSound with some sugar on top!

The eventual goal of this project is to expand upon the possibilites offered by the Web Audio API for Node.js based platforms by making it easier to develop custom AudioNode types to suit your specific needs.

WARNING!!!:

This library is in an extremely experimental state. Large portions of functionally have yet to be implemented and it is currently only buildable for MacOSX. However, since everything is built with cross-platform libraries (namely Boost, LabSound and JUCE), supporting other operating systems shouldn't be too difficult if there's interest. That said...

How can I help?

If you find node-audio helpful or want to help get it to a point where you think it COULD be helpful, there's a couple of ways you can contribute:

Submit a PR:

Missing something you need to make this a viable tool for your use case? Submit a PR!

Create an issue

Need something, but don't have to time to contribute or aren't sure how? Open up an issue, I'd love to talk about it!

What do we have so far?

Graph API

Currently only a small subset of the web-audio-api is available. In lieue of api documentation for the time being you can check out the src/module.cc file to see what bindings are being made available.

PluginNode

The only custom node type available right now is a "PluginNode". This can be used to instantiate an audio plugin and connect it to the graph as you would any other node. It currently supports only VST3 plugins, but the host process is built with JUCE so adding support for other formats like VST and AudioUnit shouldn't be too much work.

What's Next

The next things I plan to tackle are:

Get closer to feature parity with current web-audio-api

I think now that the foundation is laid this is more or less busy work. One of those things that's hard to justify until you need to use a certain piece of the api that's not available. PRs especially welcome here!

Develop some means of support for developing and packaging custom nodes as npm packages.

I would really like to get to the point where developers can create custom node types that are npm installed as a dependency in a project using node-audio. I really want to get the plugin node out into a separate repo as well since it has some pretty heavy dependencies that ideally wouldn't be required by node-audio project itself


Installation

Installation can be done via npm. Warning: this currently takes a LONG time to build!

> npm install --save node-audio

Usage Examples

The example below will play back an audio file, and manipulate the audio via a VST3 plugin a pan node and a gain node:

const{ NodeAudio, StereoPannerNode, GainNode, SoundBuffer, PluginNode }=require('node-audio')constctx=NodeAudio.makeAudioContext()constpanNode=newStereoPannerNode(ctx.sampleRate())panNode.pan().setValue(0)constgainNode=newGainNode(ctx.sampleRate())gainNode.gain().setValue(0.5)constpluginNode=newPluginNode('/Path/to/plugin.vst3',ctx.sampleRate())gainNode.connect(ctx,panNode,0,0)panNode.connect(ctx,pluginNode,0,0)pluginNode.connect(ctx,ctx.destination(),0,0)constbuffer=newSoundBuffer('/Path/to/audiofile.wav',ctx.sampleRate())buffer.playOnNode(ctx,gainNode,0)while(true){}

Development

Clone this repository including submodules.

git clone --recursive git://github.com/ramirezd42/node-audio.git

Install dependencies and build native modules.

npm install

Rebuild native modules after making changes.

npm run build:native

About

Graph-based audio api for Node.js based on LabSound and JUCE

Topics

Resources

Stars

90 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

npm version

What Is It?

node-audio is a graph-based audio processing library for Node.Js. It's very similar to the web-audio api. In fact in its current iteration it is little more than a binding for LabSound with some sugar on top!

The eventual goal of this project is to expand upon the possibilites offered by the Web Audio API for Node.js based platforms by making it easier to develop custom AudioNode types to suit your specific needs.

WARNING!!!:

This library is in an extremely experimental state. Large portions of functionally have yet to be implemented and it is currently only buildable for MacOSX. However, since everything is built with cross-platform libraries (namely Boost, LabSound and JUCE), supporting other operating systems shouldn't be too difficult if there's interest. That said...

How can I help?

If you find node-audio helpful or want to help get it to a point where you think it COULD be helpful, there's a couple of ways you can contribute:

Submit a PR:

Missing something you need to make this a viable tool for your use case? Submit a PR!

Create an issue

Need something, but don't have to time to contribute or aren't sure how? Open up an issue, I'd love to talk about it!

What do we have so far?

Graph API

Currently only a small subset of the web-audio-api is available. In lieue of api documentation for the time being you can check out the src/module.cc file to see what bindings are being made available.

PluginNode

The only custom node type available right now is a "PluginNode". This can be used to instantiate an audio plugin and connect it to the graph as you would any other node. It currently supports only VST3 plugins, but the host process is built with JUCE so adding support for other formats like VST and AudioUnit shouldn't be too much work.

What's Next

The next things I plan to tackle are:

Get closer to feature parity with current web-audio-api

I think now that the foundation is laid this is more or less busy work. One of those things that's hard to justify until you need to use a certain piece of the api that's not available. PRs especially welcome here!

Develop some means of support for developing and packaging custom nodes as npm packages.

I would really like to get to the point where developers can create custom node types that are npm installed as a dependency in a project using node-audio. I really want to get the plugin node out into a separate repo as well since it has some pretty heavy dependencies that ideally wouldn't be required by node-audio project itself


Installation

Installation can be done via npm. Warning: this currently takes a LONG time to build!

> npm install --save node-audio

Usage Examples

The example below will play back an audio file, and manipulate the audio via a VST3 plugin a pan node and a gain node:

const{ NodeAudio, StereoPannerNode, GainNode, SoundBuffer, PluginNode }=require('node-audio')constctx=NodeAudio.makeAudioContext()constpanNode=newStereoPannerNode(ctx.sampleRate())panNode.pan().setValue(0)constgainNode=newGainNode(ctx.sampleRate())gainNode.gain().setValue(0.5)constpluginNode=newPluginNode('/Path/to/plugin.vst3',ctx.sampleRate())gainNode.connect(ctx,panNode,0,0)panNode.connect(ctx,pluginNode,0,0)pluginNode.connect(ctx,ctx.destination(),0,0)constbuffer=newSoundBuffer('/Path/to/audiofile.wav',ctx.sampleRate())buffer.playOnNode(ctx,gainNode,0)while(true){}

Development

Clone this repository including submodules.

git clone --recursive git://github.com/ramirezd42/node-audio.git

Install dependencies and build native modules.

npm install

Rebuild native modules after making changes.

npm run build:native

About

Graph-based audio api for Node.js based on LabSound and JUCE

Topics

Resources

Stars

90 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

npm version

What Is It?

node-audio is a graph-based audio processing library for Node.Js. It's very similar to the web-audio api. In fact in its current iteration it is little more than a binding for LabSound with some sugar on top!

The eventual goal of this project is to expand upon the possibilites offered by the Web Audio API for Node.js based platforms by making it easier to develop custom AudioNode types to suit your specific needs.

WARNING!!!:

This library is in an extremely experimental state. Large portions of functionally have yet to be implemented and it is currently only buildable for MacOSX. However, since everything is built with cross-platform libraries (namely Boost, LabSound and JUCE), supporting other operating systems shouldn't be too difficult if there's interest. That said...

How can I help?

If you find node-audio helpful or want to help get it to a point where you think it COULD be helpful, there's a couple of ways you can contribute:

Submit a PR:

Missing something you need to make this a viable tool for your use case? Submit a PR!

Create an issue

Need something, but don't have to time to contribute or aren't sure how? Open up an issue, I'd love to talk about it!

What do we have so far?

Graph API

Currently only a small subset of the web-audio-api is available. In lieue of api documentation for the time being you can check out the src/module.cc file to see what bindings are being made available.

PluginNode

The only custom node type available right now is a "PluginNode". This can be used to instantiate an audio plugin and connect it to the graph as you would any other node. It currently supports only VST3 plugins, but the host process is built with JUCE so adding support for other formats like VST and AudioUnit shouldn't be too much work.

What's Next

The next things I plan to tackle are:

Get closer to feature parity with current web-audio-api

I think now that the foundation is laid this is more or less busy work. One of those things that's hard to justify until you need to use a certain piece of the api that's not available. PRs especially welcome here!

Develop some means of support for developing and packaging custom nodes as npm packages.

I would really like to get to the point where developers can create custom node types that are npm installed as a dependency in a project using node-audio. I really want to get the plugin node out into a separate repo as well since it has some pretty heavy dependencies that ideally wouldn't be required by node-audio project itself


Installation

Installation can be done via npm. Warning: this currently takes a LONG time to build!

> npm install --save node-audio

Usage Examples

The example below will play back an audio file, and manipulate the audio via a VST3 plugin a pan node and a gain node:

const{ NodeAudio, StereoPannerNode, GainNode, SoundBuffer, PluginNode }=require('node-audio')constctx=NodeAudio.makeAudioContext()constpanNode=newStereoPannerNode(ctx.sampleRate())panNode.pan().setValue(0)constgainNode=newGainNode(ctx.sampleRate())gainNode.gain().setValue(0.5)constpluginNode=newPluginNode('/Path/to/plugin.vst3',ctx.sampleRate())gainNode.connect(ctx,panNode,0,0)panNode.connect(ctx,pluginNode,0,0)pluginNode.connect(ctx,ctx.destination(),0,0)constbuffer=newSoundBuffer('/Path/to/audiofile.wav',ctx.sampleRate())buffer.playOnNode(ctx,gainNode,0)while(true){}

Development

Clone this repository including submodules.

git clone --recursive git://github.com/ramirezd42/node-audio.git

Install dependencies and build native modules.

npm install

Rebuild native modules after making changes.

npm run build:native

About

Graph-based audio api for Node.js based on LabSound and JUCE

Topics

Resources

Stars

90 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

npm version

What Is It?

node-audio is a graph-based audio processing library for Node.Js. It's very similar to the web-audio api. In fact in its current iteration it is little more than a binding for LabSound with some sugar on top!

The eventual goal of this project is to expand upon the possibilites offered by the Web Audio API for Node.js based platforms by making it easier to develop custom AudioNode types to suit your specific needs.

WARNING!!!:

This library is in an extremely experimental state. Large portions of functionally have yet to be implemented and it is currently only buildable for MacOSX. However, since everything is built with cross-platform libraries (namely Boost, LabSound and JUCE), supporting other operating systems shouldn't be too difficult if there's interest. That said...

How can I help?

If you find node-audio helpful or want to help get it to a point where you think it COULD be helpful, there's a couple of ways you can contribute:

Submit a PR:

Missing something you need to make this a viable tool for your use case? Submit a PR!

Create an issue

Need something, but don't have to time to contribute or aren't sure how? Open up an issue, I'd love to talk about it!

What do we have so far?

Graph API

Currently only a small subset of the web-audio-api is available. In lieue of api documentation for the time being you can check out the src/module.cc file to see what bindings are being made available.

PluginNode

The only custom node type available right now is a "PluginNode". This can be used to instantiate an audio plugin and connect it to the graph as you would any other node. It currently supports only VST3 plugins, but the host process is built with JUCE so adding support for other formats like VST and AudioUnit shouldn't be too much work.

What's Next

The next things I plan to tackle are:

Get closer to feature parity with current web-audio-api

I think now that the foundation is laid this is more or less busy work. One of those things that's hard to justify until you need to use a certain piece of the api that's not available. PRs especially welcome here!

Develop some means of support for developing and packaging custom nodes as npm packages.

I would really like to get to the point where developers can create custom node types that are npm installed as a dependency in a project using node-audio. I really want to get the plugin node out into a separate repo as well since it has some pretty heavy dependencies that ideally wouldn't be required by node-audio project itself


Installation

Installation can be done via npm. Warning: this currently takes a LONG time to build!

> npm install --save node-audio

Usage Examples

The example below will play back an audio file, and manipulate the audio via a VST3 plugin a pan node and a gain node:

const{ NodeAudio, StereoPannerNode, GainNode, SoundBuffer, PluginNode }=require('node-audio')constctx=NodeAudio.makeAudioContext()constpanNode=newStereoPannerNode(ctx.sampleRate())panNode.pan().setValue(0)constgainNode=newGainNode(ctx.sampleRate())gainNode.gain().setValue(0.5)constpluginNode=newPluginNode('/Path/to/plugin.vst3',ctx.sampleRate())gainNode.connect(ctx,panNode,0,0)panNode.connect(ctx,pluginNode,0,0)pluginNode.connect(ctx,ctx.destination(),0,0)constbuffer=newSoundBuffer('/Path/to/audiofile.wav',ctx.sampleRate())buffer.playOnNode(ctx,gainNode,0)while(true){}

Development

Clone this repository including submodules.

git clone --recursive git://github.com/ramirezd42/node-audio.git

Install dependencies and build native modules.

npm install

Rebuild native modules after making changes.

npm run build:native

About

Graph-based audio api for Node.js based on LabSound and JUCE

Topics

Resources

Stars

90 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

npm version

What Is It?

node-audio is a graph-based audio processing library for Node.Js. It's very similar to the web-audio api. In fact in its current iteration it is little more than a binding for LabSound with some sugar on top!

The eventual goal of this project is to expand upon the possibilites offered by the Web Audio API for Node.js based platforms by making it easier to develop custom AudioNode types to suit your specific needs.

WARNING!!!:

This library is in an extremely experimental state. Large portions of functionally have yet to be implemented and it is currently only buildable for MacOSX. However, since everything is built with cross-platform libraries (namely Boost, LabSound and JUCE), supporting other operating systems shouldn't be too difficult if there's interest. That said...

How can I help?

If you find node-audio helpful or want to help get it to a point where you think it COULD be helpful, there's a couple of ways you can contribute:

Submit a PR:

Missing something you need to make this a viable tool for your use case? Submit a PR!

Create an issue

Need something, but don't have to time to contribute or aren't sure how? Open up an issue, I'd love to talk about it!

What do we have so far?

Graph API

Currently only a small subset of the web-audio-api is available. In lieue of api documentation for the time being you can check out the src/module.cc file to see what bindings are being made available.

PluginNode

The only custom node type available right now is a "PluginNode". This can be used to instantiate an audio plugin and connect it to the graph as you would any other node. It currently supports only VST3 plugins, but the host process is built with JUCE so adding support for other formats like VST and AudioUnit shouldn't be too much work.

What's Next

The next things I plan to tackle are:

Get closer to feature parity with current web-audio-api

I think now that the foundation is laid this is more or less busy work. One of those things that's hard to justify until you need to use a certain piece of the api that's not available. PRs especially welcome here!

Develop some means of support for developing and packaging custom nodes as npm packages.

I would really like to get to the point where developers can create custom node types that are npm installed as a dependency in a project using node-audio. I really want to get the plugin node out into a separate repo as well since it has some pretty heavy dependencies that ideally wouldn't be required by node-audio project itself


Installation

Installation can be done via npm. Warning: this currently takes a LONG time to build!

> npm install --save node-audio

Usage Examples

The example below will play back an audio file, and manipulate the audio via a VST3 plugin a pan node and a gain node:

const{ NodeAudio, StereoPannerNode, GainNode, SoundBuffer, PluginNode }=require('node-audio')constctx=NodeAudio.makeAudioContext()constpanNode=newStereoPannerNode(ctx.sampleRate())panNode.pan().setValue(0)constgainNode=newGainNode(ctx.sampleRate())gainNode.gain().setValue(0.5)constpluginNode=newPluginNode('/Path/to/plugin.vst3',ctx.sampleRate())gainNode.connect(ctx,panNode,0,0)panNode.connect(ctx,pluginNode,0,0)pluginNode.connect(ctx,ctx.destination(),0,0)constbuffer=newSoundBuffer('/Path/to/audiofile.wav',ctx.sampleRate())buffer.playOnNode(ctx,gainNode,0)while(true){}

Development

Clone this repository including submodules.

git clone --recursive git://github.com/ramirezd42/node-audio.git

Install dependencies and build native modules.

npm install

Rebuild native modules after making changes.

npm run build:native

About

Graph-based audio api for Node.js based on LabSound and JUCE

Topics

Resources

Stars

90 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

npm version

What Is It?

node-audio is a graph-based audio processing library for Node.Js. It's very similar to the web-audio api. In fact in its current iteration it is little more than a binding for LabSound with some sugar on top!

The eventual goal of this project is to expand upon the possibilites offered by the Web Audio API for Node.js based platforms by making it easier to develop custom AudioNode types to suit your specific needs.

WARNING!!!:

This library is in an extremely experimental state. Large portions of functionally have yet to be implemented and it is currently only buildable for MacOSX. However, since everything is built with cross-platform libraries (namely Boost, LabSound and JUCE), supporting other operating systems shouldn't be too difficult if there's interest. That said...

How can I help?

If you find node-audio helpful or want to help get it to a point where you think it COULD be helpful, there's a couple of ways you can contribute:

Submit a PR:

Missing something you need to make this a viable tool for your use case? Submit a PR!

Create an issue

Need something, but don't have to time to contribute or aren't sure how? Open up an issue, I'd love to talk about it!

What do we have so far?

Graph API

Currently only a small subset of the web-audio-api is available. In lieue of api documentation for the time being you can check out the src/module.cc file to see what bindings are being made available.

PluginNode

The only custom node type available right now is a "PluginNode". This can be used to instantiate an audio plugin and connect it to the graph as you would any other node. It currently supports only VST3 plugins, but the host process is built with JUCE so adding support for other formats like VST and AudioUnit shouldn't be too much work.

What's Next

The next things I plan to tackle are:

Get closer to feature parity with current web-audio-api

I think now that the foundation is laid this is more or less busy work. One of those things that's hard to justify until you need to use a certain piece of the api that's not available. PRs especially welcome here!

Develop some means of support for developing and packaging custom nodes as npm packages.

I would really like to get to the point where developers can create custom node types that are npm installed as a dependency in a project using node-audio. I really want to get the plugin node out into a separate repo as well since it has some pretty heavy dependencies that ideally wouldn't be required by node-audio project itself


Installation

Installation can be done via npm. Warning: this currently takes a LONG time to build!

> npm install --save node-audio

Usage Examples

The example below will play back an audio file, and manipulate the audio via a VST3 plugin a pan node and a gain node:

const{ NodeAudio, StereoPannerNode, GainNode, SoundBuffer, PluginNode }=require('node-audio')constctx=NodeAudio.makeAudioContext()constpanNode=newStereoPannerNode(ctx.sampleRate())panNode.pan().setValue(0)constgainNode=newGainNode(ctx.sampleRate())gainNode.gain().setValue(0.5)constpluginNode=newPluginNode('/Path/to/plugin.vst3',ctx.sampleRate())gainNode.connect(ctx,panNode,0,0)panNode.connect(ctx,pluginNode,0,0)pluginNode.connect(ctx,ctx.destination(),0,0)constbuffer=newSoundBuffer('/Path/to/audiofile.wav',ctx.sampleRate())buffer.playOnNode(ctx,gainNode,0)while(true){}

Development

Clone this repository including submodules.

git clone --recursive git://github.com/ramirezd42/node-audio.git

Install dependencies and build native modules.

npm install

Rebuild native modules after making changes.

npm run build:native

About

Graph-based audio api for Node.js based on LabSound and JUCE

Topics

Resources

Stars

90 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

npm version

What Is It?

node-audio is a graph-based audio processing library for Node.Js. It's very similar to the web-audio api. In fact in its current iteration it is little more than a binding for LabSound with some sugar on top!

The eventual goal of this project is to expand upon the possibilites offered by the Web Audio API for Node.js based platforms by making it easier to develop custom AudioNode types to suit your specific needs.

WARNING!!!:

This library is in an extremely experimental state. Large portions of functionally have yet to be implemented and it is currently only buildable for MacOSX. However, since everything is built with cross-platform libraries (namely Boost, LabSound and JUCE), supporting other operating systems shouldn't be too difficult if there's interest. That said...

How can I help?

If you find node-audio helpful or want to help get it to a point where you think it COULD be helpful, there's a couple of ways you can contribute:

Submit a PR:

Missing something you need to make this a viable tool for your use case? Submit a PR!

Create an issue

Need something, but don't have to time to contribute or aren't sure how? Open up an issue, I'd love to talk about it!

What do we have so far?

Graph API

Currently only a small subset of the web-audio-api is available. In lieue of api documentation for the time being you can check out the src/module.cc file to see what bindings are being made available.

PluginNode

The only custom node type available right now is a "PluginNode". This can be used to instantiate an audio plugin and connect it to the graph as you would any other node. It currently supports only VST3 plugins, but the host process is built with JUCE so adding support for other formats like VST and AudioUnit shouldn't be too much work.

What's Next

The next things I plan to tackle are:

Get closer to feature parity with current web-audio-api

I think now that the foundation is laid this is more or less busy work. One of those things that's hard to justify until you need to use a certain piece of the api that's not available. PRs especially welcome here!

Develop some means of support for developing and packaging custom nodes as npm packages.

I would really like to get to the point where developers can create custom node types that are npm installed as a dependency in a project using node-audio. I really want to get the plugin node out into a separate repo as well since it has some pretty heavy dependencies that ideally wouldn't be required by node-audio project itself


Installation

Installation can be done via npm. Warning: this currently takes a LONG time to build!

> npm install --save node-audio

Usage Examples

The example below will play back an audio file, and manipulate the audio via a VST3 plugin a pan node and a gain node:

const{ NodeAudio, StereoPannerNode, GainNode, SoundBuffer, PluginNode }=require('node-audio')constctx=NodeAudio.makeAudioContext()constpanNode=newStereoPannerNode(ctx.sampleRate())panNode.pan().setValue(0)constgainNode=newGainNode(ctx.sampleRate())gainNode.gain().setValue(0.5)constpluginNode=newPluginNode('/Path/to/plugin.vst3',ctx.sampleRate())gainNode.connect(ctx,panNode,0,0)panNode.connect(ctx,pluginNode,0,0)pluginNode.connect(ctx,ctx.destination(),0,0)constbuffer=newSoundBuffer('/Path/to/audiofile.wav',ctx.sampleRate())buffer.playOnNode(ctx,gainNode,0)while(true){}

Development

Clone this repository including submodules.

git clone --recursive git://github.com/ramirezd42/node-audio.git

Install dependencies and build native modules.

npm install

Rebuild native modules after making changes.

npm run build:native

About

Graph-based audio api for Node.js based on LabSound and JUCE

Topics

Resources

Stars

90 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

npm version

What Is It?

node-audio is a graph-based audio processing library for Node.Js. It's very similar to the web-audio api. In fact in its current iteration it is little more than a binding for LabSound with some sugar on top!

The eventual goal of this project is to expand upon the possibilites offered by the Web Audio API for Node.js based platforms by making it easier to develop custom AudioNode types to suit your specific needs.

WARNING!!!:

This library is in an extremely experimental state. Large portions of functionally have yet to be implemented and it is currently only buildable for MacOSX. However, since everything is built with cross-platform libraries (namely Boost, LabSound and JUCE), supporting other operating systems shouldn't be too difficult if there's interest. That said...

How can I help?

If you find node-audio helpful or want to help get it to a point where you think it COULD be helpful, there's a couple of ways you can contribute:

Submit a PR:

Missing something you need to make this a viable tool for your use case? Submit a PR!

Create an issue

Need something, but don't have to time to contribute or aren't sure how? Open up an issue, I'd love to talk about it!

What do we have so far?

Graph API

Currently only a small subset of the web-audio-api is available. In lieue of api documentation for the time being you can check out the src/module.cc file to see what bindings are being made available.

PluginNode

The only custom node type available right now is a "PluginNode". This can be used to instantiate an audio plugin and connect it to the graph as you would any other node. It currently supports only VST3 plugins, but the host process is built with JUCE so adding support for other formats like VST and AudioUnit shouldn't be too much work.

What's Next

The next things I plan to tackle are:

Get closer to feature parity with current web-audio-api

I think now that the foundation is laid this is more or less busy work. One of those things that's hard to justify until you need to use a certain piece of the api that's not available. PRs especially welcome here!

Develop some means of support for developing and packaging custom nodes as npm packages.

I would really like to get to the point where developers can create custom node types that are npm installed as a dependency in a project using node-audio. I really want to get the plugin node out into a separate repo as well since it has some pretty heavy dependencies that ideally wouldn't be required by node-audio project itself


Installation

Installation can be done via npm. Warning: this currently takes a LONG time to build!

> npm install --save node-audio

Usage Examples

The example below will play back an audio file, and manipulate the audio via a VST3 plugin a pan node and a gain node:

const{ NodeAudio, StereoPannerNode, GainNode, SoundBuffer, PluginNode }=require('node-audio')constctx=NodeAudio.makeAudioContext()constpanNode=newStereoPannerNode(ctx.sampleRate())panNode.pan().setValue(0)constgainNode=newGainNode(ctx.sampleRate())gainNode.gain().setValue(0.5)constpluginNode=newPluginNode('/Path/to/plugin.vst3',ctx.sampleRate())gainNode.connect(ctx,panNode,0,0)panNode.connect(ctx,pluginNode,0,0)pluginNode.connect(ctx,ctx.destination(),0,0)constbuffer=newSoundBuffer('/Path/to/audiofile.wav',ctx.sampleRate())buffer.playOnNode(ctx,gainNode,0)while(true){}

Development

Clone this repository including submodules.

git clone --recursive git://github.com/ramirezd42/node-audio.git

Install dependencies and build native modules.

npm install

Rebuild native modules after making changes.

npm run build:native

About

Graph-based audio api for Node.js based on LabSound and JUCE

Topics

Resources

Stars

90 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages