MOVE does a better job of room-simulation with a moving source, although it is more computationally expensive.
Here's more description from older documentation of the disk-based cmix "sroom" and "mroom" instruments:
SROOM will calculate the delay paths from the walls of a rectangular room to two points representing the corners of an "inner" or listening room. The room is set up on a Cartesian coordinate system (x-y plane) with the center of the inner room's front wall positioned at the origin (0,0).
The arguments 'insk', 'outsk', 'dur' and 'amp' represent the time to skip on the input file before beginning processing, the time to skip on the output file before writing the processed output, the duration of the input file to process, and an amplitude multiplier that will be applied to the input signal.
The variable 'Xroom' is the position along the x-axis where the right-hand wall should appear. SROOM will then create the left-hand wall at -xroom, so this value represents 1/2 the room's width (in feet). 'Yroom' is the position along the y-axis where the front wall will be drawn. The rear wall will be positioned at -yroom. 'Yroom' represents 1/2 the rooms height (also in feet).
The variables 'xsrc' and 'ysrc' are the x and y coordinates of the sound source. 'Rvbtime' is the amount of time (in seconds) it takes for the reverb comb filters to decay to .001 of their original value. Values greater than 1.0 - 1.5 tend to sound "metallic"; the frequency response of the reverb combs becomes clearly audible. '%rflct' is the percentage of sound reflected by the walls. A '%rflct' value of 100 will mean that the walls will not absorb any of the incident sound. The only attenuation in the delay paths will be due to the distance travelled from the source to the listener (-6 db for each doubling of distance). 'Xinner' is the width of the inner (or listening) room. The value represents 1/2 the true width of the inner room (in feet). 'Chan' is an optional argument to specify which channel of the currently opened input file to process through the room. The default is channel 0. Note that only one channel at a time may be processed through these rooms.
MROOM is nearly identical to SROOM. The BIG DIFFERENCE is
that MROOM allows a sound to travel through the room along a
defined trajectory. The sound source remains at (xsrc,ysrc)
in SROOM. Consequently, the xsrc and ysrc arguments are
missing from MROOM. The sound source's trajectory is
defined by calls to timeset()
Very fast source velocities may generate some quantization
noise if the position of the sound source is not updated
frequently enough. In addition to the optional channel
argument
timeset is used to define the trajectory that the sound
source travelling through MROOM will follow. Calls to
timeset should precede the call to MROOM for which the curve
is being defined. The arguments are very simple: time is
the time (from the beginning of room processing) that the
source should be at the coordinate (xval,yval). MROOM will
move the source along straight lines connecting the points
defined by the timeset calls.
Example of timeset:
Both MROOM and SROOM can use setline to draw an amplitude
modification curve while mixing. If no call to setline is
made there is no modification done. The syntax for the call
is identical to that used in
MIX.
MROOM is somewhat slow. In MROOM speeds faster than 10-20
ft/sec (depending on the frequency of the source) will prob-
ably have to have higher quantization rates in MROOM to
avoid distortion. MROOM runs with a default quantization
rate of 100, higher rates may slow it down considerably.
F(new) = (c/(c + SV)) * F(old)
where c = speed of sound (1086 ft/sec); F(old) is the original source frequency; SV = source velocity (ft/sec); and
F(new) is the resultant doppler-shifted frequency.
timeset(0, 17, 19)
timeset(17, -10, 15)
timeset(29, -11, -7)
timeset(49, -20, -14)
timeset(57, -19, -37)
timeset(77, 14, -5)
MROOM(14, 0.7, 77, 1, 21, 49, .9, 50, .5)
The calls to timeset before the call to MROOM specify a tra-
jectory for the sound source through the room that looks
approximately like this (each 'X' represents a timeset call):
|+49
|
|
|
|
|
|
_X-----<----|-<------<------<----X <--Start Here
/ |
______________|_____________|_____________________________
-21 __X | X +21
____/ | ______/
__/ | ____/
X |_____/
| ______/
| _______/ |
| ______/ |
|__/ |
X |
|-49
/* MROOM - room simulation with moving source First call timeset at least twice to set trajectory of moving sound source: p0 time p1 x location p2 y location Then call MROOM: p0 output start time p1 input start time p2 input duration p3 amplitude multiplier p4 distance from middle of room to right wall (i.e., 1/2 of width) p5 distance from middle of room to front wall (i.e., 1/2 of depth) p6 reverb time (in seconds) p7 reflectivity (0 - 100; the higher, the more reflective) p8 "inner room" width (try 8) p9 input channel number [optional] p10 control rate for trajectory [optional] */Sample scorefile:
rtsetparams(44100, 2) load("MROOM") rtinput("/tmp/1stmove.snd") writeit = 0 if (writeit) { set_option("clobber_on", "audio_off") rtoutput("MROOM1.snd", "sun", "float") } outskip = 0 inskip = 13 dur = 9 amp = 0.35 xdim = 30 ydim = 80 rvbtime = 1.0 reflect = 90.0 innerwidth = 8.0 inchan = 0 quant = 2000 timeset(0, 0-xdim, 0-ydim) timeset(dur/2, xdim/8, ydim/8) timeset(dur, xdim, ydim) setline(0,0, dur/8,1, dur-.5,1, dur,0) MROOM(outskip, inskip, dur, amp, xdim, ydim, rvbtime, reflect, innerwidth, inchan, quant)