All Projects → khoin → Dattorroreverbnode

khoin / Dattorroreverbnode

Licence: other
Dattorro Reverb in WebAudio AudioWorklet

Programming Languages

javascript
184084 projects - #8 most used programming language

Labels

Projects that are alternatives of or similar to Dattorroreverbnode

Scribbletune
Create music with JavaScript
Stars: ✭ 3,509 (+8458.54%)
Mutual labels:  webaudio
Webaudio Examples
Code examples that accompany the MDN Web Audio documentation
Stars: ✭ 589 (+1336.59%)
Mutual labels:  webaudio
Jssynth
Make music in your browser with this synthesizer and sequencer
Stars: ✭ 25 (-39.02%)
Mutual labels:  webaudio
Jzz
MIDI library for Node.js and web-browsers
Stars: ✭ 325 (+692.68%)
Mutual labels:  webaudio
Recorder
html5 js 浏览器 web端录音
Stars: ✭ 429 (+946.34%)
Mutual labels:  webaudio
Bassoontracker
Webbased old-school Amiga music tracker in plain old javascript - Plays and edits Amiga Mod files and FastTracker XM files
Stars: ✭ 698 (+1602.44%)
Mutual labels:  webaudio
Virtual Audio Graph
🎶 Library for declaratively manipulating the Web Audio API
Stars: ✭ 299 (+629.27%)
Mutual labels:  webaudio
Poly Synth
Polyphonic Web Audio Synth - Demo:
Stars: ✭ 29 (-29.27%)
Mutual labels:  webaudio
Io 808
An attempt at a fully recreated web-based TR-808 drum machine.
Stars: ✭ 576 (+1304.88%)
Mutual labels:  webaudio
Waveform Playlist
Multitrack Web Audio editor and player with canvas waveform preview. Set cues, fades and shift multiple tracks in time. Record audio tracks or provide audio annotations. Export your mix to AudioBuffer or WAV! Project inspired by Audacity.
Stars: ✭ 919 (+2141.46%)
Mutual labels:  webaudio
Taro
A lightweight 3D game engine for the web.
Stars: ✭ 345 (+741.46%)
Mutual labels:  webaudio
Jsnes Web
A browser UI for JSNES, a JavaScript NES emulator
Stars: ✭ 398 (+870.73%)
Mutual labels:  webaudio
Omnitone
Spatial Audio Rendering on the web.
Stars: ✭ 714 (+1641.46%)
Mutual labels:  webaudio
Melonjs
a fresh & lightweight javascript game engine
Stars: ✭ 3,721 (+8975.61%)
Mutual labels:  webaudio
Iplug2
C++ Audio Plug-in Framework for desktop, mobile and web [PRE-RELEASE]
Stars: ✭ 875 (+2034.15%)
Mutual labels:  webaudio
Eternal
👾~ music, eternal ~ 👾
Stars: ✭ 323 (+687.8%)
Mutual labels:  webaudio
Awesome Webaudio
A curated list of awesome WebAudio packages and resources.
Stars: ✭ 685 (+1570.73%)
Mutual labels:  webaudio
Gs Wa Components
The audio code behind the GridSound's DAW
Stars: ✭ 38 (-7.32%)
Mutual labels:  webaudio
Webaudio Wav Stream Player
instantly play remote wav streams using fetch API + WebAudio
Stars: ✭ 28 (-31.71%)
Mutual labels:  webaudio
Daw
GridSound (0.33.0) wants to be an open source online digital audio workstation following the new WebAudio API 🎛🎹🎵✨
Stars: ✭ 804 (+1860.98%)
Mutual labels:  webaudio

Dattorro's Reverb Implemented in WebAudio AudioWorklet, in Javascript

To see the demo, refer to project page above.

Characteristics

  • All parameters are k-rated.
  • Accepts one input with two channels and
  • Returns one output with two channels.

Usage

You can use this in your project like so:

yourAudioContext.addModule('dattorroReverb.js').then(() => {
	let reverb = new AudioWorkletNode(aC, 'DattorroReverb', { outputChannelCount: [2] });

	originNode.connect(reverb);
	reverb.connect(destinationNode);
});

Personal Considerations

Here I address the considerations I made that was not explicitly specified in the Dattorro paper.

Interpolation of Delay Lines

Quote: "Linear interpolation, or better yet, all-pass interpolation can be efficiently employed [to ...] the two indicated delay lines [...]" (1.3.7, p. 665)

Decision: Cubic Interpolation. This is costly, but it is not used a lot.

Note on Excursion

I've decided to implement it so that it is samplerate-independent. This means that the consideration below is voided.

32 Sample Max Excursion

Quote: "at a peak excursion of about 8 samples for a sample rate of about 29.8 kHz." (footnote 14, p. 665) and "EXCURSION = 16 (Maximum peak sample excursion of delay modulation)" (Table 1, p. 663)

Decision: 32 samples for maximum excursion was chosen.

Rationale: At first, the two quotations appear contradictory. However, I believe Dattorro meant 16 samples for the range of excursion and 8 samples for the peak.

Unipolar Excursion

Quote: [no quotation available]

Decision: Delay length including excursion is: length - e_depth + e_depth * excursion(t) instead of length + e_depth * excursion(t)

Rationale: Because of the way the delay lines are implemented, excursions are not oscillating around original delay length, but the delays are contracting by twice the length from center to peak of the original excursion.

Parameterized Decay Diffusion 2

Quote: "decay diffusion 2 = decay + 0.15, floor = 0.25, ceiling = 0.5" (Table 1, p. 663)

Decision: Clipping the parameter were not implemented, nor was it bounded to being decay + 0.15

Rationale: Elsewhere on top of page 664, the phrase "labeled by the knobs "decay diffusion 1" and "decay diffusion 2"" appears to me that they are meant to be controllable knobs and the quotation in Table 1 is merely a suggestion of what the value should be according to the decay. From the user experience standpoint, the two decay diffusions need not be exposed to the users. However, I am sticking to the paper on this issue.

PreDelay length

Quote: Figure 1 of the paper

Decision: Max Predelay length is the sampling rate minus 1 (i.e., ~ 1 second).

Rationale: No rationale here, although 1 second is ridiculously long.

Open Questions

Parameterizing the decayRate as T60.

Currently, the decayRate parameter is a number which the signal in the tank will be (twice) scaled by. What is the T60 of this reverb with respect to the decayRate?

References

  • Jon Dattorro's paper - pdf
  • AudioWorklet spec - link

Other Works

  • Clips from Kikuo's Mikukikuo 5 under CC BY-NC-SA.
  • Guitar from user Placeboing on Freesound under CC 0.

License

For the two files index.html and dattorroReverb.js, refer to LICENSE - Public Domain + No-Liability.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].