Calculating Resonance for Delay
@s.elliot.perez "comb filter" refers to 2 simple delays: 1 where you delay the incoming signal, multiply it, and add it to itself (no feedback) and 1 where you take the output, delay it, multiply it and then add it to the input to create the new output (this is the classic "echo" effect and what we generally think of when we think of the "delay" effect with feedback)
the fundamental frequency is equal to the inverse of the delay length (e.g. if your delay length is 1 ms your frequency will be 1000 hz). I don't think the bandpass filters should affect it too much.
in this situation, the delays are feeding back into each other so it's more complex than a simple comb filter. However, the frequencies should still depend on the delay times like that.
Interesting side note: all digital filters can be deconstructed into these 2 simple building blocks, except that they use 1 sample instead of milliseconds or seconds. The feed forward one is called a "zero" and the feedback one is a "pole". This is because the space between the peaks of the comb filter is the inverse of the delay time. So, if you set the delay time to 1 sample you get a "peak" width of the entire spectrum up to the sample rate.
I think you did it right, but you might need to lower your block size within a subpatch to get lower delay times than 64 samples (~1.45 ms @44.1k) also.. and/or do the stuff in the helpfiles G04.control.blocksize.pd and G05.execution.order.pd where you can
Multiple track audio to MIDI signal
Hi!
Well first of all I should say that I'm very new to Pure Data, and this is the first time I'm using it on a real project. It's still a bit confusing for me, and there is a kind of complicated setup for what I'm trying to do,
Short question (my take on the issue):
Is there a way to assign a Pd patch to separate tracks in a DAW,? Like making the patch into a plugin.
Or is there an audio device that I can use with my DAW that supports multiple output channels, so I can assign each track to the desired patches within Pd.
Long explanation:
For this project I'm building a live music+visuals set with a band. I use a DAW to receive the sound of a full band via mic and line inputs on an USB interface. I also use a built-in sampler and synthesizer to play on certain songs and interact with the band, while sometimes also playing plain audio files that are too on separate tracks.
For the visuals I use Resolume Arena. As I kind of also play in the band (with the synth and the sampler), I need to be able to operate the visuals in a very simple yet interesting way, so audio-responsive effects are a nice option. I want to be able to assign as many parameters as I can to be responsive to the individual audio tracks that come from the band and my instrument. So my idea is to use the MIDI mapping feature on Resolume, which gives me many options.
On Pd I found a patch that takes audio signals and interprets them via [fiddler~] giving out MIDI. Now I only need to assign individual instances of the patch to individual tracks, and then restrict each of their MIDI output signals to a different note range so I can map them to Resolume.
In a perhaps less confusing way, this is what I need:
Starting point: live audio feed and audio files on DAW tracks
Ending result: A distinct MIDI signal for each track.
I hope this is understandable. If you can come up with any other way of achieving the main goal of this proyect (make audio responsive visuals on Resolume via MIDI mapping) and would like to share it, I would really appreciate your ideas.
Thanks in advance for your help!
Play buffer from beginning with delread~
@Seán The audio is travelling through the delay line in real time.
You would need a delwrite delay longer than what you are recording to be sure to capture the whole first recording.
You need to feed the output of delread back into delwrite, so that it can be played again.
You would need a timer so as to set delread to the right length for the second read (so that it starts at the beginning).
You would need to use [switch~] to stop all audio in your patch as you end recording and so that you can start the delay line again when you press play......... otherwise the audio will drop down the delay line before you do so........... unless you program it to start again immediately.
You will need to do the fade after delread and not fade what you feedback into delwrite, or you will double down on the fade the second time around.
BUT.
Because the delay line read point for delread has to be longer than the recording, delread will in fact still be feeding back audio to delwrite after you have finished recording.
So you will have to let it finish.
But you can still read the correct output with a second delread.
Do that, and put it into a second delay line of the absolute correct length (now that you know it) and that will become your delay loop, with feedback as above.
All of that can be automated of course.
David.
has anyone done any work on emulating (nautical) breaking waves?
Waves observed in liquid, in a string, in a drum head etc (material waves) are functions of time and space while audio are only time-dependant. As a result you can derive audio signals from a material wave for by fixing a position and observing a property of the material wave at this dertermined position over time. For example, let's imagine a little fishing float maintained that would "freely" slide on a vertical rod maintained in a fixed position in water (in order to get rid of the space variables). The float would go up and down over time as the waves come and go, and the vertical position signal obtained would be a an audio signal (provided it's mean over time is zero), also all the derivatives of this signal accompanied by frequency multiplication and amplitude modifications, but also pressure or desity measurements or whatever you want. This is a way of thinking the link between material waves (the ones you draw, with the horizontal axis representing space, with a freezed time) and strictly time-dependent signals (very near to audio signal, just a matter of being "centered" on the x axis).
This proximity allows for "sonification" of intrinsically non-audio phenomena, like "hearing a black hole squeaking" etc.
Sorry, now that I'm reading back what I've written I feel like all this is probably obvious to you, or simply useless.
Nau
Stomp-board my current project
This is a project I started just before Xmas. It was a really just an exercise to see how my nknob.pd abstraction would work in the real world, then morphed into a styling execise.
Stomp-board is a collection of guitar effects vaguely resembling stomp boxes. They can be arranged
and wired in any order and can be repeated as often as required. Each effect is given a unique name
when placing and this name is used to automatically save preset parameters against.
Effects are placed as objects in the normal Pd manner with one argument (eg [digi-delay Delay-1]) and connected with audio wires that should be in line with the round markers (there are fake inlets and outlet to the right as spacers)
As a graphics exercise its a failure because the nknob.pd is very heavy in the template area.
Its almost impossible to delete the effects objects as they grow in number (they will eventually delete though) and it is therefore essential to use the Quit button to end a session. There is a barely started help file.
stomp-board.pd is the demo (see pic), stomp-base.pd is the minimum start point.
I have collected the whole thing including the required externals in a folder Pd-effects-stand-alone
I think out of the box its windows only and in fact I have a folder for Pd 0.48 portable (empty) and a batch file stomp.bat that points to it (you will need to download Millers pd-vanilla portable version to use that)
Points of interest
In stomp-board.pd The looper can automatically record one cycle of drums from four-drums then stop the drums and play the loop and if the guitar is ready then record that on the next cycle
there is a wireless way to send messages to most controls via the unique name + control name
nknob has a range of 0-100
Any questions, please ask.
I have bash on my 1970's Ibanez strat-copy using this program just about every day
Cheers Balwyn
The following effects and control objects are available
active-switch.pd,
audio-catch.pd
audio-in.pd
audio-out.pd
audio-receive.pd
audio-send.pd
audio-throw.pd
audiobar.pd
chorus.pd
compressor.pd
controlbar.pd
data-send.pd
delay-only.pd
digi-delay.pd
distortion.pd
drum.pd
four-drums.pd
fuzzbox.pd
graphic-eq.pd
grater-v2.pd
lfo.pd
looper.pd
nknob.pd
noisegate.pd
panning.pd
para-eq.pd
phaser.pd
pitchshift.pd
pot.pd
presetter.pd
rec-player.pd
reverb.pd
rnd.pd
scope.pd
stomp-base.pd
stomp-board.pd
stomp.bat
tremolo.pd
tuner.pd
vcf-phaser.pd
volramp.pd
wavescope.pd
ArguScore
Here is an updated version
arguscore-update.zip
and a few Purr Data compatibility replacement objects: purr-data-compatible-replacements.zip
A creation argument only object driven system for instant music making;
Objects so far;
Required;
globaltimer - outputs a 10ms bang to drive all objects;
globalsync - resets all objects to zero or start;
audio~ - dac~ catcher~ for all throws~, output level, mute;
Sound Objects
By default sound objects start playing at the bpm of the first argument
basspump - args - bpm note distortion duration
wood - args - bpm note duration
tremsaw - args - bpm note vibrato distortion duration
tremsine - args - bpm note vibrato noise duration
noisy - args - bpm note vcfq duration
kauplus - args - bpm note string-resonation duration
Effect Objects
sqr - args - 16 required(0 or 1) bpm (starts playing by default)
overides sound objects autoplay
2 optional args for cursor offset and pitch if font different
has 16 outlets to send 0 or 1
echo-delay-bpm - args - bpm feedback(0 to 100) level(0 to 100)
echo-delay-ms - args - millisecs feedback(0 to 100) level(0 to 100)
pan-level - args - pan (-100 to 100) level (0 to 100)
autopan - args - width (0 to 100) frequency (* 0.01) level (0 to 100)
fade - args - millisecs to fade-in pecentage of level to drop to (0 to 100) millisecs to fade-out
filter - args - highpass (midi note to frequency) lowpass (midi note to frequency)
(0 to 135 equates to approx 8Hz to 19912Hz)
start-delay-secs - args - seconds (delays the autostart of the connected object)
start-delay-bpm - args - bpm (delays the autostart of the connected object)
stop-delay-secs - args - seconds (outputs a one at the end of the delay which can connect to a globalsync)
stop-delay-bpm - args - bpm (delays the autostart of the connected object)
isolator - sits between two sqr's and sends a signal to start/stop the receiving sqr
seqnotes - four pairs of note & velocity that receive sqr ones to fire a connected sound object
Notes
Can crash Pd when making lots of edits to arguments, particularly while playing, so save often
There is a [declare -path objects] hiding behind the audio~ object
Fixed missing note and velo message for tremsaw
Two more arguscore patches can be open at the same time providing only one patch contains the globaltimer and audio~ objects (see arguscore-2.pd and arguscore-2-b.pd)
new objects
kauplus, autopan, fade, filter, stop-delay-secs, stop-delay-bpm;
Audio Ideas (AI) Collection (placeholder, currently only links)-effects, controllers, mmp, etc.
Audio Ideas (AI) Collection (placeholder) currently only links
per @LiamG 's kind suggestion I have begun the process of consolidating my abs and patches, etc. into a single location/zip file or for possible upload to github.
Just to get the ball/me rolling and scope the work I got the links for my shares into a single location to later be consolidated into the single AI Collection.
For now at least, please, bare with me (and the links below) as ideas I am more passionate about currently are demanding my attention. (Which funnily enough will probably also be included in the set, where ever they are shared.)
Thanks, for your patience and all you do for the Pure Data Family.
Sincerely,
Scott
abstract~
pushdelay-envelope-env-driven-delay-line-with-both-delay-time-and-feedback-dependent
numpad-abstraction-for-entry-of-large-numbers-via-click-instead-of-sliders-includes-basic-calculator
abs_delay_fbw-feedbackwards-lifo-last-in-first-out-delay
abs_sequences_by_formula-sequences-by-formula-abstraction-ex-collatz
abs_effects_router-60-effects-in-one-abstraction-router-from-diy2-stamp-album-my-abs
visualcontrolsurface-vsl-values-set-by-their-location-on-the-screen-req-ggee-shell
abs_4-8-14_way_toggle-pair-2-toggles-resulting-in-4-8-or-14-states
audioflow-delay-to-forward-backward-looper-using-speed-control
5-band-equalizer-with-bezier-controller-eq5_mey_w_bezier_sv-pd-updated-to-8-band-below
forward-backward-looper-orig-abs-from-residuum-whale-av
abs_rgb2hex-rgb-0-255-colors-to-hexadecimal-values
pseudo-12-string-effect-6-string-guitar-to-sound-like-a-12-string
jack_midi2pd_2sys_connector_sv-jack-midi_out-to-pd-sys_playback-switcher
abs_4to16pads_bin_conv_sv-convert-4-midi-pads-from-a-binary-value-to-a-decimal-for-rerouting
abs_automatedslider_sv-automated-control-changer-pd-and-mobmuplat-editor-versions
idea-for-effects-stack-ing-technique-control-mother
micin-_abs-abstraction-convert-signal-to-notein-ex-using-a-midi-synth-as-a-guitar-pedal
curve_abs-tri-way-curve-switch-to-change-control-values-in-either-linearly-convex-or-concave-manner
a-preset-control-abstraction-for-saving-parameters-presets-to-text-files
4-tap-delay-with-pitch-shifter-per-delay-line-adaptation-of-diy2-patches
patch~
extra
the-15-owl-faust-patches-compiled-as-32bit-linux-externals-attached
libpd
mmponboardeditortemplate-mmp-for-creation-of-mobmuplat-files-directly-on-the-handheld-android-only
3d-synth-webpd-tree-js-webgl_camera_cinematic-html-example
Off topic
pushdelay~ - envelope [env~] driven delay line with both delay time and feedback dependent
As I mentioned in a previous post: "idea: "riding the wave"delay length triggered by env~ size (link http://forum.pdpatchrepo.info/topic/10557/idea-riding-the-wave-delay-length-triggered-by-env-size)", I had been wondering about controlling a delay line via the env~.
pushdelay~_sv-help.pd
pushdelay~_sv.pd
My idea had been to mimic the "power" of a wave (akin to what I have been suspecting we will do once we figure out how to harness the power of gravity waves): the larger the amplitude > the further the auditory "ripple" and the longer it lasts.
The abstraction below, pushdelay~, is my incarnation of that idea.
Ciao!
Much merriment thru you and yours.
Scott
-help (from the -help comments):
In this pushdelay~ abstraction the length of time on the delay line, as well as feedback, are driven by the amount of the env~, the larger the env~ the longer the delay time and more feedback there is.;
In "inter" (interval) mode, the abstraction takes the current delay time and sets a metro to that time;
opens a spigot and captures the maximum value for the env~ during that period then sets the next delay and metro times to that value.;
In "cont" mode, it sets the delay and feedback times continuously based on the envelope value.;
The relationship between the delay(x) and feedback(y) values can be set using the curve ctrl, either linear, convex (sinusoidal) or concave (also sinusoidal but inverted).;
Turning the abs either off|on starts the inital metro.;
If in "off" mode, the delay ctrl may be moved independently. However the feedback will still change the same way, mentioned above.
-enjoy;
svanya
p.s. the original delay~ abs is from the DIY2 collection.
What's your favorite noisegate?
@svanya Use the MultibandNoiseFilter. The left inlet is audio, the right sets how much noise to remove. The outlet is the filtered audio,
Attach a slider to the right inlet with a range from 0 to 2. That ought to be a wide enough range that you can adjust it to clean things up without also destroying the voice signal.
How it works is pretty simple, but difficult for me to put into words. If you are interested in how it works, take a look inside NoiseFilter and NoiseDetector.
NoiseFilter pretty much just attenuates the audio based on the noise level that it finds. How it finds the noise level is the trick.
It uses the subpatch dBr to find the level of the signal, then passes that through a highpass filter and a low pass filter. Those two determine what is seen as "static" noise. Anything that changes slower than the high pass is static noise. Anything that changes slower than the lowpass is signal. Anything that changes faster than the lowpass is noise.
Changing the value of the highpass determines how fast things get filtered out - if it "eats" your long notes, then you need to make the cutoff of the high pass lower.
Once it has the filtered level, it takes the absolute value of the variations in the level and compares them to the selected noise reduction level. Anything below the desired level closes the gate. Since this causes a pulsing signal, theres's a lowpass to smooth it out.
Now, you have a signal proportional to how much noise is in your signal. The more the noise, the lower this proportional signal is.
Multiply that with your original audio, and it attenuates the audio according to how much noise there is.
The rest is splitting it into bands so that you don't attenuate everything at once, but just the frequencies where there's noise.
Noise filter for microphone (Live Audio)
Well, the forum crash seems to have eaten my last post.
I have made a noise filter to clean up audio signals live.
Other noise removal filters need to have a noise sample selected and try to remove that noise from the complete track - they only work offline.
This patch works online. It removes any stationary noise from the signal and doesn't need any user adjustment except that it does need to be told how much to reduce the noise.
"Stationary noise" is a signal whose frequency content and amplitude stay (more or less) constant for over 1 second. Fan hum is a good example, as well as the more or less "white" noise from the wind from the fan. Car motor sounds from a car travelling at constant speed is also a good example.
It will also kill feedback squeal cold, even at the lowest settings.
The patch is built in layers, and the lower layers can be used independently or combined and used to build different filters.
The attached zip file includes all the components from the lowest level up to a complete demonstation that takes in audio from a microphone and puts out filtered audio on line out. It also includes a set of help files that describe the function and use of the various modules.
Included modules:
NoiseLevelDetector.pd - estimates the amplitude of the stationary noise
NoiseFilter.pd - attenuates the signal based on the amplitude from
NoiseLevelDetector.pd Since it is more effective at high frequencies, it is best to feed it limited bandwidth signals and use multiple filters to cover the desired audio range.
BandLimitedNoiseFilter.pd - a Noisefilter that only works on the specified frequency range.
MultibandNoiseFilter.pd - a complete filter that covers the range from 40Hz upto 22000 hz to filter the complete audio spectrum.
Test.pd - demo program that demonstrates the use of MultibandNoiseFilter.pd
It works best for speaking voices. Singing tends to be more stationary. It could be adapted to singing voices by changing a single value in one of the lower level blocks.
The original idea was to create filter for removing car noises from microphone audio for two-way radios. When used to cover just the range from 300Hz to 3000Hz, it does a very good job.
The biggest disadvantage is that it will start making "musical noise" if there is a lot of noise and the attenuation is set high. It also adds a slight echoing quality to the filtered audio.
The project is hosted on GitHub: PureData NoiseFilter project.