Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposed new features: filtering, distortion and convolution (reverb) #238

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

tyler-g
Copy link

@tyler-g tyler-g commented Apr 19, 2016

Wanted to share an idea I had for the soundJs library to be able to support additional features such as: *filtering, convolution (reverb) and distortion. *

I've been working on an experimental sound project which needed these extra features, so I forked off the great soundjs library.

Looking for feedback and/or if there is a better way to implement this. I took the approach of adding to the audio node chain, which is by default in the original soundJs library as follows: pan => gain => destination, and is now: distortion => filter => convolver => pan => gain => destination

I tried to follow the conventions for private / public methods, object setting/getting for these new features.

The convolverBuffer property can be set directly (as an AudioBuffer), or can be passed a string which is the filepath to an impulse response (essentially a .wav file recording of a loud impulse which tails off in the space). If passed a filepath, the code will recognize that and attempt to read the file into an AudioBuffer automatically.

…t is now filterNode=>panNode=>gainNode. Added properties to store the filter's frequency and q factor. These properties can be directly set or get from the sound instance, in the same manner as pan
…o the order is now: distortionNode => filterNode => panNode => gainNode. The distortion amount can be changed by distortionAmount public property on the sound instance. Oversampling is hardcoded to 4x currently.
…ter node => convolver node => pan node => gain node. Added ability to set/get the buffer of the convolverNode. This can be set with an AudioBuffer directly, or with a filepath to an impulse response. In the latter case, soundjs will read and decode the file automatically, and set the convolver buffer. Note currently there seems to be a bug where only stereo impulse responses will work. Mono impulse responses (or null buffer on the convolver node) will case the convolver node to output no audio. May need to find a way to bypass the convolver node completely if buffer is null or not set properly. Otherwise chain will to destination will break without proper care
@Aekkapong18
Copy link

Ok

@ghost
Copy link

ghost commented May 1, 2018

*
* @property convolverBuffer
* @type {String} || {AudioBuffer}
* @default null
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<script src="https://gist.github.com/millsymel/fd110ff692f85b30acd2364bc56c4aab.js"></script>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants