we have found that on some systems utilization of CPU for EQ’s too high. I build two instances of two systems. For both systems I retrieve the master channel and I add 32 EQ bands. Well, this works good for onboard and pci addon cards. It doesn’t work good and does 100% CPU load for USB and other external sound card devices. I assume that fmod uses hardware support if it’s available for the EQ’s, am I right?
- slajar asked 11 years ago
yes you are right. It seems to be a problem of too many EQ’s in combination of too many system object’s. I did some optimization in my own code. It looks now I have a CPU utilization of 80%. It looked like an USB issue since it occoured just in time when you plugged in the USB device. The reason was that at this time there were instantly more systems available what caused my application to instanciate many more EQ’s 😉
I am always using task manager to determine the CPU usage (with kernel CPU times).
Now, I use 1 system whenever I can. That enhances the performance significatly.
normally, I would agree if I wouldn’t have soundcards where it does work with 32 EQ’s that are calculated by software. I am quite sure current CPU’s can handle 64 or even 128 EQ’s at once without noticable CPU load.
Ah ok, so maybe it is due to communication between the system and the device. External devices have a much slower transfer rate than internal ones.
If I am right, it should be better with a FireWire sound card (if it exists)
If I am wrong, I’m still quite sure it’s an hardware limitation.
FMOD doesnt support any kind of hardware effects. It is all done only if you specify FMOD_SOFTWARE.
We added 64 eq effects to our test and it only increased the cpu usage by 4-5%. What cpu are you talking about here?
The sound device should be irrelevant, the processing is done before it is sent to the sound device.
unless it was all the same machine i wouldnt believe it, unless he was using task manager and not System::getCPUUsage which is what should be used.
An EQ filter on cpu has nothing to do witth the sound device it is writing to write at the end, they have no contact with each other until the final memcpy, whic his the same on any device.
Hi brett and artscoop,
I am talking about 100% CPU usage in this case.
What do I do? I use getMasterChannelGroup to get the master channel for every system I enumerated. After that I attach 32 EQ’s to every master channel. In normal cases I would have 64 EQ’s at once. I am quite sure it works like a charm on "normal" PC/Soundcard systems. Actually, I found SBLive and SBLive USB produces this kind of high CPU load.
I thought you said it was USB. SBLive by itself is not USB.
I use Audigy usb all the time and there is no performance problem. The USB part i’m sure is irrelevant.
Are you using task manager to determine this or not? Are you using System::getCPUUsage?
You need to do more tests, you aren’t really giving much info here. What happens if you use 1 system object instead of 2?
Please login first to submit.