Optimizing your system for audio recording

In the old days, I used to do CD quality recordings on my 386 system, featuring a 40 MHz CPU and a whopping 8MB of RAM. This system had only a fraction of the capabilities of your current machine. Still, it did not have any problem at all keeping up with the data transfers, and the recording time would be limited by the size of the harddisk only.

Now in spite of the fact that we have 32-bit operating systems, and many enhancements, systems still appear to be incapable of doing a decent recording of audio. The only performance requirement that your system must be able to meet is the ability to continuously transfer about 175kB of data to the harddisk. Taking into account that new harddisks have been performing far above these requirements with megabytes per seconds, that should not pose a problem. Still, when recording data, you can hear clicks and pieces missing because the system failed to meet the 175kB/s requirement.

VCACHE: The most likely cause

The first thing to tune is the virtual cache of Windows 95 (or 98). If you are running an NT based system, like Windows NT or Windows 2000, this section will not apply to you.

Windows 95 features a caching mechanism, that speeds up harddisk access by keeping frequently accessed data in RAM memory, and by delaying writes to the disk. The implementation in windows 95 has a serious design flaw, that interferes with audio recording.

The problem

Harddisks perform best if you feed them large chunks of data in bursts. They don't like writing tiny pieces of data scattered all over, and will noisily protest against such abuse. So the cache system kicks in and helps you out. At least, it does when you are doing some word processing or something like that. What the cache does is accumulate data and send it out to the harddisk in chunks. It also keeps the most recently written data in memory. The memory that it may use for this purpose is all the available memory that hasn't been claimed yet.

But something goes wrong with this scheme on 95 systems. If you are writing a single, large file, like an audio recording, the system will keep all that data in memory. When all available memory has been used, the cache system will still attempt to use more memory. The memory mangement then looks for parts of memory that haven't been used for a while, and throws these out, moving them to your disk if needed. The memory occupied by the cache has all been most recently written to, so the regions that it discards are most likely you program's code and the background image and such. The disk will become noisy as more and more of your programs and data are being moved out to the harddisk to make room for the cache. Eventually, your system will become slower and slower, because of the lack of memory, and the harddisk will get busier and busier, until eventually, your system is incapable to keep the audio recording going smoothly. This is causing the clicks.

The solution

The solution is very simple. Limit the memory hungry file cache, and instruct it to use no more than a fixed amount of memory. This will prevent the cache from eating all your memory, as it will not attempt to allocate more memory after it used up the limit.

  • Open the file SYSTEM.INI, most likely located in the directory C:\WINDOWS. If you just double-click the file from Explorer, it will open in Notepad for editing.
  • Search for the section in the file that is labeled [vcache].
  • Below this header, enter the limits you wish to impose. The rule-of-thumb is to set the minimum size to about one megabyte (1024kB) and the upper limit to about a quarter of your system's RAM (for example, if you have 32 MB of RAM, you would allocate 8MB (8192kB) to the file cache.
  • The entry in SYSTEM.INI should now look like this:

    [vcache]
    MinFileCache=1024
    MaxFileCache=8192

    Notes

    You must supply a MinFileCache size, otherwise the MaxFileCache will be ignored. After making these changes, save the file and restart the system to make them take effect

    Sometimes there is a "chunksize" setting as well. Suggestion is to leave it at the default of 512 bytes. Here is a site with pages of information on that topic.