The method described in the last two subsections works well when it comes to creating a single sound coming from a single place. However, we are interested in doing more than that; we want to create a simulation of a moving sound, and this is more complicated. We can run our code for each angle in some pre-determined trajectory and splice the sound snippets together to create the illusion that a sound is moving, but there are noticeable differences in sound when we move from using one impulse response to another that are not related to amplitude and time delay. It is nearly impossible to collect data under unchanging conditions, and as a result, the impulse responses we recorded were influenced by changes in ambient sound, objects/surfaces between the impulse and microphones, the impulse itself, and so on. For example, if the data is collected at 20 degrees intervals, starting at 0, and we want to simulate a sound moving from 9 to 11 degrees, we will use the impulse responses at 0 and 20 degrees, respectively, to create our simulation, and the difference in reverberation or average amplitude (or any number of factors) between those two impulse responses may be substantial.
This discontinuity between sounds convolved with different impulse responses makes it difficult to create a smooth moving-sound simulation. This is where windowing comes in. Windowing is a technique that reduces the amplitude of discontinuities at the boundaries of signals by multiplying a signal by a finite-length window with an amplitude that varies smoothly and gradually toward zero at the edges ("Understanding FFTs and Windowing"). There are many different types of windows with varying shapes. The window we chose to use is called the Hamming window. The Hamming window has a shape that resembles part of a sinusoidal wave or a bell curve, as depicted in Figure 7 ("Understanding FFTs and Windowing"). The Hamming window in Figure 7 has an amplitude of 15 and a length that matches the length of the signal with which it was multiplied. Figure 8 shows a signal before and after it was multiplied by the Hamming window shown in 8. The product of the signal and Hamming window has a vague resemblance to the bell curve shape of the Hamming window, but still retains most of its shape. The ends of the signal are muted in amplitude compared to the center of the signal, which is amplified.
The Hamming window in this way, however, serves only to exaggerate the transition between impulse responses, because the edges of the signal are quiet while the middle of the signal is loud. Simulating a constant tone moving in a circle using this method would sound like a series of moving beeps. The next step to creating a smoother moving sound is to overlay the results of multiplying snippets of the signal by a Hamming window. We can do this by taking the first N samples of a signal, multiplying that signal snippet by a Hamming window of N length, adding the product to a matrix, and doing the same to the next (N - N/2) to (N + N/2) samples of the signal, but adding the new product to the matrix starting at the beginning of the second half of the previous signal snippet. In other words, we take twice as many snippets of the signal and overlay them so that the first half of each new snippet overlaps the second half of the last snippet. The hope is that this blends the differences between two convolved snippets of the signal and will therefore smoothen the transition from one impulse response to another.
We implemented Hamming windows in this manner, but unfortunately, did not see -- or rather, hear -- significant improvement. Overlaying the convolved and windowed snippets of code creates a slight echo, which does smoothen the transition between impulse responses to some extent, but also distorts the input signal more so it is less recognizable.