The :sound_in
synth as described in the previous section provides a very flexible and familiar method for working with input audio. However, as also discussed it has a few issues when working with a single input of audio as a single instrument (such as a voice or guitar). By far the best approach to working with a single continuous stream of audio is to use live_audio
.
live_audio
shares a couple of core design constraints with live_loop
(hence the similar name). Firstly it must have a unique name and secondly only one live_audio
stream with that name may exist at any one time. Let’s take a look:
live_audio :foo
This code will act in a similar fashion to synth :sound_in
with some key differences: it runs forever (until you explicitly stop it) and you can move it to new FX contexts dynamically.
On initial triggering live_audio
works exactly as you might expect it to work with FX. For example, to start a live audio stream with added reverb simply use a :reverb
FX block:
with_fx :reverb do
live_audio :foo
end
However, given that live_audio
runs forever (at least until you stop it) it would be pretty limiting if, like typical synths, the live audio was bound within the :reverb
FX for its entire existence. Luckily this is not the case and it was designed to be easy to move between different FX. Let’s try it. Run the code above to hear live audio coming directly from the first input of your sound card. Note, if you’re using a laptop, this will typically be out of your built-in microphone, so it’s recommended to use headphones to stop feedback.
Now, whilst you’re still hearing the audio live from the sound card with reverb, change the code to the following:
with_fx :echo do
live_audio :foo
end
Now, hit Run, and you’ll immediately hear the audio played through the echo FX and no longer through reverb. If you wanted them both, just edit the code again and hit Run:
with_fx :reverb do
with_fx :echo do
live_audio :foo
end
end
It’s important to point out that you can call live_audio :foo
from any thread or live loop and it will move the live audio synth to that thread’s current FX context. You could therefore easily have multiple live loops calling live_audio :foo
at different times resulting in the FX context being automatically swapped around for some interesting results.
Unlike standard synths, as live_audio
has no envelope, it will continue running forever (even if you delete the code, just like a function is still defined in memory if you delete the code in the editor). To stop it, you need to use the :stop
arg:
live_audio :foo, :stop
It can easily be restarted by calling it without the :stop
arg again:
live_audio :foo
Additionally all running live audio synths are stopped when you hit the global Stop button (as with all other running synths and FX).
With respect to audio channels, by default live_audio
acts similarly to the :sound_in
synth in that it takes a single mono input stream of audio and converts it to a stereo stream using the specified panning. However, just like :sound_in_stereo
it’s also possible to tell live_audio
to read two consecutive audio inputs and treat them as the left and right channels directly. This is achieved via the :stereo
opt. For example, to treat input 2 as the left signal and input 3 as the right signal, you need to configure the input:
opt to 2 and enable stereo mode as follows:
live_audio :foo, stereo: true, input: 2
Note that once you have started a live audio stream in stereo mode, you cannot change it to mono without stopping and starting. Similarly, if you start it in the default mono mode, you can’t switch to stereo without starting and stopping the stream.