Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
audiounitjs
Advanced tools
audiounit.js is an Xcode project scaffold for creating audio software (effects, analyzers and synthesizers) for OS X and iOS. The audio processing code is written in C++, and the UI code is written in HTML, CSS and Javascript. Writing the audio processing and UI code will produce an iOS app, a Mac app, and a Mac Audio Unit plug-in that will work in professional audio software like Digital Performer, Logic, or Live.
Two reasons:
Unfortunately, audiounit.js does not make the actual signal processing code any easier. You still have to write an Audio Unit in C++, which is not an easy task for a beginner programmer.
Because Xcode templates are difficult to write and seem to change with every version, audiounit.js is distributed as a node.js script. To install, first install node from the official website. Then, install audiounit.js with
sudo npm install -g audiounitjs
if you're still confused, there's a quick screencast on the install process.
First, create a configuration json file as described below. Then, run audiounitjs myfile.json
, which will create a project scaffold for you. Then it's a simple matter of programming - edit the audio.cpp
file to write the audio source, and edit the ui
folder to create your beautiful UI.
The Xcode project generated by the script has 3 targets:
Creating a project will provide a minimal example of a volume-changing playthrough effect. This simply connects the input to the output, adjusted by a user-settable gain.
Two other examples are included in the examples
directory, each exemplifying an important feature.
You can look at the "config_example.json" file to get you started.
To write the UI for your program, use the standard web languages: HTML, CSS, and Javascript. When the program loads, it will automatically navigate to index.html
in your UI folder.
To communicate with the C++ audio processing code, use the AudioUnit
javascript object in the global scope. For each Audio Unit property and parameter, this object contains a subobject. For example, if you created a property called Volume
in your C++ code, There will be an object called AudioUnit.Volume
in your javascript scope. Parameters refer to settings that can be changed from the javascript code (or plug-in hosts like Digital Performer), while Properties are data that can only be read from the javascript. Both parameters and properties have the following methods:
Get()
- returns the current value of the property or parameterand the following fields:
OnChange
- set this to be a function that will be called whenever the parameter or property changes.Parameters have the following additional methods:
Set(value)
- sets the current value.BeginGesture()
- notifies the plug-in host that the user has started to change the parameterEndGesture()
- notifies the plug-in host that the user has ended the current gestureand the following additional fields:
OnBeginGesture
- set this to a function that will be called whenever the plug-in host starts a gesture.OnEndGesture
- set this to a function that will be called whenever the plug-in host ends a gesture.so, if you have a parameter called Volume
, var v = AudioUnit.Volume.Get();
would return it's current value, while AudioUnit.Volume.Set(.2);
would set the value to .2
.
Additionally, the AudioUnit object has three methods of its own for sending MIDI to your Audio Unit:
AudioUnit.NoteOn(note, velocity)
- call this to trigger a note-on eventAudioUnit.NoteOff(note, velocity)
- call this to trigger a note-off eventAudioUnit.SendMIDI(b1, b2, b3)
- call this to send a three-byte MIDI message.CoreAudio doesn't provide a way for plug-in UIs to listen to MIDI directly, so there's no way to receive MIDI from the javascript code.
To write your C++ audio processing code, simply create an Audio Unit as described by the apple document entitled "Audio Unit Programming Guide". You can look at the provided examples for some more concrete hints.
In addition to the standard Audio Unit API, audiounit.js provides a simple method for allowing complex properties to be available to the Javascript code. Simply fill-in the code for Audio::GetPropertyDescriptionList
with a vector of all properties you want to be available to Javascript. See the fivescope
example for more information.
In the non-plugin targets for iOS and Mac, all MIDI received by the system will be sent to your Audio Unit. MIDI is handled as in the Audio Unit standard - see the monosine
example for more information.
FAQs
Scaffold an XCode project for an audio unit with a javascript UI
The npm package audiounitjs receives a total of 3 weekly downloads. As such, audiounitjs popularity was classified as not popular.
We found that audiounitjs demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.