A cross-synthesis algorithm developed by PeteJohnston
The
CrossFilter crosses an
Input (excitation) with a
Response (a signal that is interpreted as an object's response to being hit). Since hitting an object excites many of its modes of vibration (its resonances), you can use that information to create a filter having the same resonances as that object. Once you have the filter, you can use it to modify the spectrum of any Input signal.
There are two flavors:
- CrossFilter_Long gives you longer response times (at the expense of adding a short delay through the filter)
- CrossFilter_Short gives you zero delay through the filter (at the expense of being restricted to shorter response durations)
The parameters of the new
CrossFilter are:
The
Input is heard through the filter defined by the Response.
Each time the value of
Capture becomes 1, the output of
Response is captured in internal memory for ResponseDuration seconds. The captured signal is then interpreted as if it were the response of some object (e.g. a resonator, a room, a piece of wood or metal) to being struck or hit by an object, a single pulse, or a short duration broadband signal. The resulting filter is then used to filter the
Input.
When this value changes from zero to a positive value, it captures the
Response in memory for the length of time given in
ResponseDuration. Whenever you change the signal that is captured in memory, you are also changing the characteristics of the filter.
If you trigger the
Capture while the
Input is playing, you will hear the effects of the old filter on the
CaptureDuration seconds of input that came in before the trigger occurred; this is mixed in with the effects of the new filter on the input that comes in after the trigger. If you silence the input for
ResponseDuration seconds before triggering the
Capture, then you will hear the effects of the new filter only.
NOTE: The duration between
Capture triggers should be longer than the
ResponseDuration.
The
ResponseDuration specifies the length of time that the
Response should be recorded each time
Capture is triggered. (For example, if
ResponseDuration is set to 0.1 s, then a tenth of a second of the
Response input is recorded each time there is a trigger in the
Capture parameter.) The captured portion of the
Response input is then interpreted as the sonic response of some object to being struck. Note that if your
Response is nonzero, the
CrossFilter will extend the duration of each impulse in the
Input by
ResponseDuration seconds. For example, if your
Input is a live microphone and you clap into the microphone, each clap will last for
ResponseDuration seconds when it passes through the
CrossFilter.
If the
ResponseDuration you request results in an 'out of real time' message, try reducing the
ResponseDuration and/or unchecking
Stereo. Alternatively, you can record the output of this Sound to disk by checking the
NotRealtime box and using
Record to disk in the
Action menu.
To request the longest possible
ResponseDuration given the current sample rate and the number of processors, use the word
maximum
Checking
Stereo will decrease the maximum
ResponseDuration. (To find out what actual maximum duration in seconds is for your configuration, evaluate one of the following expressions using Ctrl+Y):
SignalProcessor maxResponseDuration
SignalProcessor maxResponseDurationStereo
SignalProcessor maxResponseDurationShort
SignalProcessor maxResponseDurationStereoShort
This is an overall output level of Input after it has gone through the filter.
Once the Response has been captured in memory, you can use subparts of that recording as the filter response by changing
Start and/or
End. The beginning of the recorded response is at 0, and the end of the recorded response is at 1. (To compute the actual start and end times in seconds, multiply the value of
Start and
End by the time in the
ResponseDuration field.) For example, if you set the value of
End to a hot value
!End, you can shorten the response time of the computed filter while the Sound is playing. By setting both
Start and
End to hot values, you can move a "window" around within the captured
Response recording and use that small interval of time as the response.
Check the
Stereo box if you have a stereo
Response and would like to maintain the difference between left and right channels. When this box is unchecked, the
Response is treated as a mono mix of its left and right channels. The Input is always treated as a mono mix of its left and right channels. To independently process the channels of a stereo Input, use the
CrossFilter_Long-Stereo example from the Prototypes. NOTE: Checking this box reduces the maximum possible length of the
ResponseDuration.
Check this box if the ResponseDuration you have requested results in an "out of realtime" message. This should allow you to use the Action menu to record the output of this Sound to disk. (However, if you see the "out of SRAM" message, you will have to reduce the
ResponseDuration or uncheck the
Stereo box.)
Thanks to Beta-testers Eckard Vossas, Bruno Liberda, Edmund Eagan, Robert Jarvis, John Paul Jones, Hamilton Sterling, Tobias Enhus, Camille Troillard, Karl Mousseau, and Jesus Gestoso for helping us put this new Sound through its paces, and special thanks to Pete Johnston for the implementation of his algorithm!
--
CarlaScaletti - 04 Jul 2005
Discussion and Questions