Even when it's noisy I can get a pretty quiet recording.
I recorded the natural sound of the recording room when it was quiet.
I record my guitar using mics very close to the instrument.
mix, then, Profit!
Recording the Space
First I transcribe, for later use, the echoes of the room. I've done it 2 different ways. Both are described here.
The easier and quickest way was to put microphone(s) in a good listener location, then record an impulse sound generated at the location I usually play. The impulse is a short and sharp sound with a lot of frequencies. Pop a balloon, fire a starter's pistol [I have a shotgun, probably too disruptive], or clap some hardwood boards together. The impulse sound needs the same frequencies that playing makes.
Then I edit the sound, trimming off the originating sound, leaving just the room response sounds. Some amplification, then fade out the tail.
My room gets about 2 seconds of response sound from the original impulse.
Recording the Guitar
I put the mics as close as I can without knocking into them. Record the guitar, not the dog barking at the garbage truck.
Mixing the Room Sound with the Guitar Sound
I use Jconvolver (really it's the subset Fconvolver) to give the dry guitar recording the ambiance and reverberation of the room. It's one of Fons Adriaensen's productions and available here:
Linux Audio projects at Kokkini Zita
I use fconvolver (included in jconvolver) because it doesn't use the Jack connection kit.
Here's the command line:
fconvolver defaultStereo.conf input.wav output.wav
defaultStereo.conf has a bunch of settings for other room sounds. I spent a few days building them up. It's endless fun. My config file has settings for a bunch of impulse responses and I uncomment the lines as needed. It's listed below.
Another, Better Way to Record the Space
Using a frequency sweep of my room is a lot more work, but it seems to be more thorough.
I use the Aliki software from Fons Adriaensen, also at the Kokkini Zita link above. It's a complicated, multi-step process and I have to carefully follow the manual - but his documentation is correct. Any errors in getting it to work are usually me misreading it.
There are some links to impulse response files down below.
My Configuration File for Fconvolver.
'#' is a comment
# bold are the active lines for my use with various impulse response files:
# /convolver/new is always required and must be first command in the config.
# inputs/outputs = usually two input and two output channels,
# 'partition size' is the minumum partition size that will be used,
# should be between 1 and 16 times the Jack period size.
# [ I have 1024 as Frames / Period in qjackctl so let's make this 16 x 1024 = 16384
# It will be adjusted (with a warning) otherwise.
# Processing delay will be zero if this is set to the Jack period size.
# partition size is 1024 samples [the same as my JACK period for zero latency]
# [shouldn't this be 500,000 samples or more?]
# has little or no effect on CPU usage, but
# determines the amount of memory used, and will determine the sequence
# of partition sizes that will be used, so it should not be much larger
# than the longest convolution you want to use. Unused inputs or outputs
# do not take significant CPU or memory.
# [I just use a default value far larger than most of my impulses]
# should be between 0 and 1. It should
# be representative of the fraction of possible input/output pairs that
# will actually have a convolution defined between them. It is used as a
# hint to optimize the sequence of partition sizes for short and medium
# length convolutions.
/convolver/new 2 2 16384 500000
# These can be used to provide more informative ports names,
# and to optionally connect the inputs or outputs. Input and
# output numbers start at 1.
# add 2 if you have 2 inputs:
# [ I don't think any of this is needed for using it the simple way I do with fconvolver ]
#/input/name 1 In.L
#/input/name 2 In.R
#/output/name 1 Out.L
#/output/name 2 Out.R
# point it to the directory with the impulse files:
# Read impulse from a sound file. 'Input', 'output' and 'channel' start from 1.
# in/out - if 2 impulse response files, in = 1, another in = 2
# Impulse files are read by libsndfile.
# 'Gain' is the linear gain (i.e. not in dB) applied to the response.
# 'Delay' sets the number of zero samples inserted before any data read.
# 'Offset' can be used to skip frames at the start of the file.
# 1,000 samples = 20 ms (.020 seconds) at 48K
# eg. bassXXL is 107,000 samples long - it decays a lot within 20,000 samples
# 'Length' is the number of frames used, or zero for all.
# in out gain delay offset length chan file (usually stereo wav file same rate as target file)
#/impulse/read 1 1 0.05 0 0 0 1 "MTSUIR_ecoplate_04_rolledOffLows.wav"
#/impulse/read 1 2 0.05 0 0 0 2 "MTSUIR_ecoplate_04_rolledOffLows.wav"
#/impulse/read 1 1 0.02 0 0 0 1 MTSUIR_AtmosDelayPlate.wav
#/impulse/read 1 2 0.02 0 0 0 2 MTSUIR_AtmosDelayPlate.wav
#/impulse/read 1 1 0.05 0 0 0 1 MTSUIR_Combing.wav
#/impulse/read 1 2 0.05 0 0 0 2 MTSUIR_Combing.wav
/impulse/read 1 1 0.2 0 0 0 1 Wharf2FP.wav
/impulse/read 1 2 0.2 0 0 0 2 Wharf2FP.wav
#/impulse/read 1 1 0.2 0 0 0 1 take6git355.wav
#/impulse/read 1 2 0.2 0 0 0 2 take6git355.wav
Video I Recorded
Fons Adriaensen papers
Bricasti Excellent Library