Thread: 30+ channel equalizers?

  1. #1
    Math wizard
    Join Date
    Dec 2006
    Location
    USA
    Posts
    582

    30+ channel equalizers?

    I often seem to find that a ten-channel equalizer isn't enough and that I'd like to have one with more than ten channels, a lot more. Are there any programs that can run in the background with at least 30 channels? If not, how would I make my own?
    High elevation is the best elevation. The higher, the better the view!
    My computer: XP Pro SP3, 3.4 GHz i7-2600K CPU (OC'd to 4 GHz), 4 GB DDR3 RAM, X-Fi Platinum sound, GeForce 460, 1920x1440 resolution, 1250 GB HDD space, Visual C++ 2008 Express

  2. #2
    Registered User
    Join Date
    May 2007
    Posts
    147
    Frankly, beyond 10 bands, I think you're much better off with a parametric equalizer.

    The real problem is that your 10 band doesn't have a slider centered over the frequency you really want to attenuate, so you end up either attenuating too wide a range, or you have to ignore the bump or dip you're trying to fix. A parametric allows you to zero in right on what you want, even 'draw' the curve (with bezier's even) of the form you really want.

    So, what's the software you're aiming for? Is this a DirectSound plugin you want, some addin for VST addin for WaveLab/CuBase, or something else?

    Which OS?

  3. #3
    Math wizard
    Join Date
    Dec 2006
    Location
    USA
    Posts
    582
    Basically, it works like that of my sound card's equalizer - it just runs in the background and I can fine-tune it and the adjustments are otherwise in real time. When listening to instrumentals, the frequencies covered are much broader with more even amplitudes than that of those with lyrics. For example, my particular song (and speed) I've been listening too has the best-sounding area around the 125 to 250 Hz frequency bands and it's the 200 or so that I'd like to make adjustments with. Around the 600 Hz area has a slight negative impact and would rather deamplify it some. Another area of interest is the 800 to 2000 Hz frequency band. With only 125, 250, 500, 1K, 2K, etc. available, it's tricky to fine-tune it and with more channels, I could get more control. Even a 2% difference in the speed of the song (changing the speed affects the time and pitch directly) is quite detectible, especially around the midtones.

    This screenshot shows my EQ settings for both equalizers. My sound card's equalizer is in the bottom right and Winamp's rather oddly spaced equalizer is in the center right just above my sound card's equalizer. Since there's nothing clearly audible beyond 5KHz, and that there's a constant hiss at around 15 KHz, I mute all frequencies beyond 5KHz.

    The software should basically do what these two equalizers do: run in the background, not modify the wave (amplification beyond even 2 dB would cause distortions due to the wave itself maxing out), load the previous settings at start up, be easy to read and adjust (Audacity, which only affects the wave, has black text (due to it being defined) on my theme's default dark gray background making it very hard to read (due to it not being defined)), I think that's the basic idea. It should work with Windows XP Pro SP2 (which is my OS), and, preferrably, should span the entire 20 to 20K frequency band going up to 20 dB for the range.
    High elevation is the best elevation. The higher, the better the view!
    My computer: XP Pro SP3, 3.4 GHz i7-2600K CPU (OC'd to 4 GHz), 4 GB DDR3 RAM, X-Fi Platinum sound, GeForce 460, 1920x1440 resolution, 1250 GB HDD space, Visual C++ 2008 Express

  4. #4
    Registered User
    Join Date
    May 2007
    Posts
    147
    I did a little looking around, is it true the low end of the Audigy equalizer is 125Hz?

    Yikes that's awful.

    It appears that Audigy offers the EAX developers kit, check http://developer.creative.com/landin...bcat=31&top=71 for the download.

    If your card supports DirectSound plugins, you might find an avenue to build something portable to other sound cards, should you change in the future. EAX appears to be only for Creative cards, but I can't say if DirectSound would work with just any future card, either (for all forms of playback).

    I'm curious, you say there's nothing clearly audible beyond 5K? Is that the nature of the material your listening to? Hiss at 15k hints at some older analogue source material, and since you can hear that, I assume you're not talking about your hearing beyond 5k. At 44, I'm still sensitive out to 14.6k or so, with 'sensation' of hearing at 15.1k, but not like when I was 20, when I could hear out to about 16k. Still, those are high frequencies relative to audio, yet the contain subtle trace components that make the difference between airy, crisp and distinctly real sound and obviously recorded sound, to me, so I notice quickly when audio is attenuated at 12k, even 13k.

    You'll find copious algorithms for bandpass filters on the net. The code is simple, so when you get the basic framework of an audio effect going, either EAX, DirectSound or whatever, you'll send the audio stream through a series of bandpass filters, where you've constructed them to accept adjustments to Q and center frequency. If you work in C++, you can make the filter an object, and pair as many together as you like within the limits of your CPU(s). Let me know if you have trouble finding links, I've got a folder of them somewhere around here.

    Most of my work has been for plugins to WaveLab and CuBase as VST plugins, so I'm being a bit generic about the framework since I've not seen the EAX SDK, but basically you should be presented with some setup/init stuff and then the live audio stream comes in, you get a chance to hook in to do what you will with it, and send it out. It comes by in packets (which is usually parameter driven), and the bandpass filter logic works on a small collection of samples inside a simple loop, which you'll construct to apply your filter work.

    It's actually rather simple once you get rolling with it. The user interface will take the greatest amount of time.

    The simplest user interface plan would be a slider representing the center frequency and another representing Q (the width of that filter's effect). You can also elect to create a lowpass and high pass for the two extents, still giving a slider for the target frequency of that effect.

    Tricker, but really nice, is to create a graph interface that allows you to basically draw the attenuation curve(s) you want. Steinberg's Q, a named VST filter if I recall, has this, and it's really nice. Theirs is only 4 bands, as I recall, but you basically get a node that represents the center frequency which you can move around in 2D, up/down representing amplitude and left/right representing frequency. Then, they give you a bezier like control to affect the Q. It's tricky, but a nice touch. Frankly, the slider or knob style interface is effective enough.

  5. #5
    Math wizard
    Join Date
    Dec 2006
    Location
    USA
    Posts
    582
    I had a buggy Audigy and it looked a lot like that of my X-Fi Platinum - the exact same frequency bands. It was the Audigy 2 ZS. It had buggy drivers so I returned it and got the X-Fi Platinum instead.

    Have you seen my screenshot though? The song itself doesn't have anything clearly audible beyond 5KHz. It's not the sample rate (of which is 83,000 Hz, nearly double that of CD's - that's 83% true speed), rather, it's the song itself. I don't know what causes the 16KHz hiss (at true speed), but I can see a jagged look on the waveform when looking at Audacity. I'm very knowledgable on sounds and the terms and how to use/interpret waveforms displayed in programs like Audacity.

    I wouldn't mind using the 2D graph thing - I use it in Audacity for getting a more in-depth look at the particular song's frequencies which is how I know the best frequency bands. Audacity, however, only affects the wave itself, and doesn't affect whatever sound is being played, of which both Winamp and my sound card's equalizer does. I'm almost certainly going to need more than 4 "points" on the graph though and would prefer the frequencies be logarithmic rather than linear. I've even made logarithmic graphs using The GIMP which doesn't have any built-in graphing system so a logarithmic scale is not anything new to me. It's either the graph interface allowing any number of points, or an equalizer with numerous bands (like 30 at a minimum).
    High elevation is the best elevation. The higher, the better the view!
    My computer: XP Pro SP3, 3.4 GHz i7-2600K CPU (OC'd to 4 GHz), 4 GB DDR3 RAM, X-Fi Platinum sound, GeForce 460, 1920x1440 resolution, 1250 GB HDD space, Visual C++ 2008 Express

  6. #6
    Registered User
    Join Date
    May 2007
    Posts
    147
    I did see the image (kindof a cool interface appearance, takes up a lot of room though).

    The 4 points of Q's parametric EQ is just their design notion, you could pair as many filter objects as you like. I'm fairly sure Q's graph is logarithmic.

    If you also have a grasp of C++, this sounds like you could have something running in a few days or so.

    You might even have a shareware product you could sell!

  7. #7
    Math wizard
    Join Date
    Dec 2006
    Location
    USA
    Posts
    582
    I don't know C++, but could do almost anything in C. I just don't know what Windows functions I need to use - that's the only problem and searching the SDK/documentation is a pain since 95% of everything is completely irrelevant when searching for more basic things (such as "resize window" as an example) and 4% only slightly relevant. Coming up with the algorithms is much easier than finding out what Windows functions are needed for this as I seem to have little to moderate difficulty with this. I'd almost certainly do such a graph-based equalizer. I can get near photo-quality visions of something in my head, convert it to numbers, then replicate it very accurately from this. I would need the function for displaying tooltips (that of what you get when you keep the mouse arrow over something then a popup comes with some text in it). Then again, I could just have an image drawn and continuously updated as needed instead, as I sort of do with my first C program, "The Interactive Animation". It's then just figuring out mouse-related things, how to dynamically change the size of an array, take text inputs like those you see on webforms (the 1-line type like the subject field when making a new thread), 3 separate buttons for clicking on, and how to feed the equalization information into the sound card to adjust the output.

    Want me to make a "simulated" screenshot on how I envision the interface to help get me started?

    I run in 1920x1440 resolution which is why my screenshot is very big (I didn't bother cropping it though).
    High elevation is the best elevation. The higher, the better the view!
    My computer: XP Pro SP3, 3.4 GHz i7-2600K CPU (OC'd to 4 GHz), 4 GB DDR3 RAM, X-Fi Platinum sound, GeForce 460, 1920x1440 resolution, 1250 GB HDD space, Visual C++ 2008 Express

  8. #8
    Woof, woof! zacs7's Avatar
    Join Date
    Mar 2007
    Location
    Australia
    Posts
    3,459
    ulillillia, I know your working on some sort of game. Question is, why haven't you opted for something hardware accelerated like OpenGL, or better yet, SDL, since SDL would provide access to the soundcard (through addtional libraries) not to mention texture loading / blitting. But instead your using GDI (with MFC I presume), why?

  9. #9
    Math wizard
    Join Date
    Dec 2006
    Location
    USA
    Posts
    582
    Generally, compatibility. I was originally intending on targeting Windows 95, but since there's no known function that supports Windows 95 and does transparency, I've since went with Windows 98 as the minimum since it was able to use AlphaBlend. Functions like BitBlt, AlphaBlend, and DrawDibDraw are apparently hardware-accelerated, so what's wrong with those? What is "MFC"?

    In my past, I used Gamestudio which required DirectX 9.0c and 3D hardware. For a 2D game, what sense is there in requiring either of these (the 3D hardware part is a certainty). I've been wanting to go with C to get away from these restrictions. I have otherwise no knowledge on how to use DirectX or OpenGL, and I never heard of SDL. I'm more familiar with DirectX than OpenGL (I don't think I have a program that uses Open GL), but I don't know how to program using either of them. I've still got a long ways to go and that "The Interactive Animation" was only a first step. Reproducing my first game (made with the limit-filled, annoyance-packed Gamestudio (in the case of its usefulness toward 2D games)) is my next intent, likely to take a year to remake, and there are many things I need to figure out:

    1. Playing WAV files for sound effects.
    2. Dynamically changing the size of an array.
    3. Accepting mouse inputs.
    4. Be able to swap between windowed and fullscreen modes.
    5. Getting a better timing system so users don't have to tap a specified key a few times to get rid of the jerky motion each time the program is started.
    6. Getting smooth scrolling (using anti-aliasing) to simulate a higher resolution (such as drawing scaled-up versions of the image (like 4x, but without smoothing effects, just "bigger pixels"), then scaling down the result by mixing the colors (as if using the linear scaling method in GIMP)). This isn't required, but it would be a nice enhancement.

    This is about all I really need. They aren't required, but 1 through 5 are the most useful.
    High elevation is the best elevation. The higher, the better the view!
    My computer: XP Pro SP3, 3.4 GHz i7-2600K CPU (OC'd to 4 GHz), 4 GB DDR3 RAM, X-Fi Platinum sound, GeForce 460, 1920x1440 resolution, 1250 GB HDD space, Visual C++ 2008 Express

  10. #10
    Registered User
    Join Date
    May 2007
    Posts
    147
    I had thought you were trying to make a plugin for the overall system to make a better equalizer. It may indeed be better to make one inclusive to your game system instead, but it's a design choice.

    Let me step back and make a few other suggestions though.

    You have a unique opportunity here. The best exercise I engaged in for learning C++ was to make a pacman clone. C++ was only available as CFront at the time (generated C from the C++ source), but the concepts of the language were made concrete as a result of the exercise. There is considerable leverage to be found in several of the points you made (for one, dynamically sized arrays in the form of vectors), as well as reducing the tendency for pointer related bugs.

    The other thing C++ can do for you is leverage in organization. If you can accept the proposal that assembler, or a language like the DOS oriented line numbered BASIC of ancient times, is a single dimension of organization (a list of statements), C is a 2d organization (a set of functions, each with a list of statements). In this progression, C++ would be a 3d organization. In C, one might envision a spreadsheet, where rows are statements and columns are functions.

    In C++, each 'page' would be an object, where the functions and some data are grouped into pages. I'd submit that these pages are more than spreadsheets, though - they're more like circuit boards. Creating a program in C++ is more like creating circuit boards that plug into a motherboard (the application object), creating software that fits together more like a real machine. Once you get accustomed to it, the leverage provided by the organization is really quite powerful. Much more than the description even suggests.

    For example. Dynamic re-allocation of an array in C relies upon the use of realloc from the C library. It works, but it's manually driven. The vector, a C++ object, will expand for you automatically - with features for manual control - freeing you to think about the application design and implementation, rather than spending time on what is a trivial and well practiced coding detail. Such an object can't be arranged in C. The closest you can get to that is a set of functions that act upon arrays, but it can't be made automatic.

    In the long run, I think you'd be well served to consider taking the jump into C++. BTW, MFC is an OOP library from Microsoft that gives some leverage in making GDI based applications.

    The one thing that GDI oriented work can't really help with is anti-aliasing. You'll need something from a library that helps move that into the graphics card - it's just too much for even the recent CPU's to handle at decent framerates.

    Older versions of DirectX (7, for example) have considerable focus on 2D development. According to the documentation, MS decided to fold the 2D development strategy into Direct3D. I'm not really sure how that's done, but apparently one uses the 3D environment to do 2D work. Still, DirectX 7 is there, and DirectX installs still support versions back to about 3, even on Vista.

    Actually, the Win98 through XP alphablend is not hardware accelerated. It's fast, but you can actually match it's speed with your own optmized algorithm, and can exceed it if you thread that algorithm (my own is about 50% faster than the OS version).

    However, a DirectX 2D IS likely to invoke the graphics hardware for alphablending, and probably gives you hardware anti-aliasing when it's available on the card.

    I look forward to your future posts on your project!

  11. #11
    Math wizard
    Join Date
    Dec 2006
    Location
    USA
    Posts
    582
    Considering I already know the formula for alphablending, I've known it for more than 2 years before I even started programming - I've done it in the numerous animations I've made. A very similar formula/algorithm is used for the anti-aliasing system and can only do it to 24-bit images and even scale-downs. If running in, say, 1024x768, the image, for 4x antialiasing, is drawn as 4096x3072, then scaled down to 1024x768. It's the only way I know of doing so for both 2D and 3D.

    Before I can even start programming my 2D game, I'll need to create the character and some basic background scenery. I lack the character, but even then, I've still got a long ways to go. I've nearly finished the terrain map.

    The equalizer isn't intended for any of my games, it's intended for casual listening and it would affect not just games, but every sound that is played.
    High elevation is the best elevation. The higher, the better the view!
    My computer: XP Pro SP3, 3.4 GHz i7-2600K CPU (OC'd to 4 GHz), 4 GB DDR3 RAM, X-Fi Platinum sound, GeForce 460, 1920x1440 resolution, 1250 GB HDD space, Visual C++ 2008 Express

  12. #12
    Lean Mean Coding Machine KONI's Avatar
    Join Date
    Mar 2007
    Location
    Luxembourg, Europe
    Posts
    444
    Doing anti-aliasing in the software instead of the hardware ... good luck getting anything above 5 fps.

  13. #13
    Math wizard
    Join Date
    Dec 2006
    Location
    USA
    Posts
    582
    I figured that. Drawing 800x600 60 times per second gives 30% CPU usage and that's just merely copying numbers without any math. 4096x3072 for 4x anti-aliasing, having over 25 times the pixels would need about 800% CPU usage (or 100% CPU usage with 7 fps). Thing is, how do you get something like this to be processed in hardware (using the appropriate typecasting and stuff as needed)?

    Code:
    ...
    while (ArrayIndex < 1440000) // 800x600 image at 24-bit color
    {
    	MainImageData[ArrayIndex] = (BaseImageData[ArrayIndex]*BaseImageData[ArrayIndex+3] + BaseImageData[ArrayIndex]*(255-BaseImageData[ArrayIndex+3])/255;
    	MainImageData[ArrayIndex+1] = (BaseImageData[ArrayIndex+1]*BaseImageData[ArrayIndex+3] + BaseImageData[ArrayIndex+1]*(255-BaseImageData[ArrayIndex+3])/255;
    	MainImageData[ArrayIndex+2] = (BaseImageData[ArrayIndex+2]*BaseImageData[ArrayIndex+3] + BaseImageData[ArrayIndex+2]*(255-BaseImageData[ArrayIndex+3])/255;
    	ArrayIndex += 4;
    }
    ...
    High elevation is the best elevation. The higher, the better the view!
    My computer: XP Pro SP3, 3.4 GHz i7-2600K CPU (OC'd to 4 GHz), 4 GB DDR3 RAM, X-Fi Platinum sound, GeForce 460, 1920x1440 resolution, 1250 GB HDD space, Visual C++ 2008 Express

  14. #14
    Lean Mean Coding Machine KONI's Avatar
    Join Date
    Mar 2007
    Location
    Luxembourg, Europe
    Posts
    444
    Quote Originally Posted by ulillillia View Post
    I figured that. Drawing 800x600 60 times per second gives 30% CPU usage and that's just merely copying numbers without any math. 4096x3072 for 4x anti-aliasing, having over 25 times the pixels would need about 800% CPU usage (or 100% CPU usage with 7 fps). Thing is, how do you get something like this to be processed in hardware (using the appropriate typecasting and stuff as needed)?
    By using OpenGL and enabling the hardware anti-aliasing option.

  15. #15
    Woof, woof! zacs7's Avatar
    Join Date
    Mar 2007
    Location
    Australia
    Posts
    3,459
    Providing the target card can anti-alias
    But you'd be wise to maybe move your code over to a library designed for what your doing, GDI certainly isn't. If it's 2D, I would recommend SDL (it even provides access to contollers and the sound card).

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Replies: 48
    Last Post: 09-26-2008, 03:45 AM
  2. Boom, Headoshot!!
    By mrafcho001 in forum A Brief History of Cprogramming.com
    Replies: 50
    Last Post: 07-21-2005, 08:28 PM
  3. Wierd Segmentation Faults on Global Variable
    By cbranje in forum C Programming
    Replies: 6
    Last Post: 02-19-2005, 12:25 PM
  4. The long startup.
    By Sentaku senshi in forum A Brief History of Cprogramming.com
    Replies: 24
    Last Post: 08-10-2002, 11:52 PM
  5. debug program
    By new_c in forum C Programming
    Replies: 3
    Last Post: 03-18-2002, 11:50 PM