I made a curry using onions, garlic, tomato passata, coconut milk, coriander (leaf and ground), cumin, cardamom, star anise, ginger and chilli powder. I tasted it and it felt like it was missing something, I don't really know the words to describe it but I would compare it to a rock song with no bass if that makes sense. I added more of the same ingredients but it still had the same problem. After a while I kind of panicked and added basically everything in my cupboard hoping that something would work, I added paprika, peri peri salt, mixed herbs (thyme and oregano I think), cinnamon and clove, the curry still tasted kind of flat and one-note even after all of that. It tasted more like a fancy gravy than a curry. What was it missing?
Old spices? If you are not making curry often maybe your spices are aged. They lose their pop. Your mix looks good. Try again with new. Buy whole spices when you can - they keep better.
Toast spices? A trick to bring out flavor. Pan toast. Have some mustard seeds in there and black pepper. When the mustard seeds start hopping around spices are done. I toast spices whole then let them cool then grind them up before adding.
Toasted nuts? I think toasted nuts can serve as the bass (to use your analogy) in a curry. Maybe more of a mole? Almonds are good. The last curry I made I used shelled sunflower seeds, toasted in the pan after the spices.
A little sour? Maybe less orthodox for an Indian style curry. A hit of vinegar or lemon juice once you are done cooking can bring out flavors.
Overcooked? Then the high flavor notes cook away. I killed many a curry in the slow cooker before I figured this out.
You don't like cardamom? It can be a weird flavor. I suspect there is genetic variaton in how it tastes. It can sort of take over. Go easy on the cardamom.
The answer is definitely a lack of salt.
Particularly if you're new to cooking or new to cooking dishes like curries and stews, you might not be accustomed to the amount of salt you need to add to your food to bring out the flavor of the dish.
Salt your curry as you're sauteing your onions and/or cooking your protein, and then taste regularly during the simmering process; add salt as needed.
In addition to Willk's answer, which may have discovered the age of some of your spice rack contents - cumin & other short-life ground spices can sometimes be flat even when new, from supermarkets. Whole seed, fresh ground on demand, can be shelf-stable for longer.
Also, I'd be inclined to use fresh or frozen ginger - pulped works well from frozen. Ground ginger has the wrong flavour profile.
Contra to expectation, garlic powder is often used in restaurant-style curry bases. Alternatively, frozen, pulped can be used, but sometimes I will add a bit of powdered near the end too. [Watch it doesn't go lumpy - premix with a little water if adding late to a sauce]
Also, hunt down some fenugreek powder for an instant 'Ooh, it's just like a curry' aroma. You can add this late in the cook.
I always consider a curry sauce to be a two-stage cook [same with a good chilli].
You get your 'bass' from the long cook, your 'treble' from what you add near the end.
Ground coriander goes in early, as part of your bhuna/bhogar [wet or dry frying] at the start. If you use tomato puree [by UK definition, the stuff in a squeezy tube] then use a wet-fry bhuna and add the puree late in this stage. It takes some bitterness out of it. Using a bhuna rather than bhogar makes it harder to burn stuff too - much easier if you're not practised at this.
Garam masala [basically a blend of aromatics] goes in late. If you can find them, such as ajwan seeds can add a piquancy late, or sprinkled over when serving.
Fresh coriander goes in right as you serve, or just sprinkled on top. Its flavour starts to dissipate as soon as it's heated. To keep it tasting bright & fresh… it has to be bright & fresh.
Some other things can go in both early and late.
Onions can be in your base sauce, then some newly-fried added ten minutes before serving. Processed tomatoes early, & fresh tomatoes late. The same for fresh chillies, some to cook down into invisibility, some late as a 'brightener'.
One additional thought… most people seriously underestimate the amount of oil/fat that goes in a curry. Your sauce base is essentially onion puree & ghee. There's really very little water added. Use ghee if at all possible rather than a cooking oil of any sort. It has a distinct flavour. Even vegetable ghee has that flavour somehow added to it.
Basic bhuna method.
Take all your ground spices & blend to a paste with a little water in a cup - aim for 'tomato ketchup' consistency.
Heat your ghee. If you have any whole spices, mustard seeds etc, drop them now [this kind of cheats in a quick bhogar without burning anything], then a quick stir & add your bhuna mixture. Fry gently until the water evaporates off & the oil fully blends with the sauce base, then starts to separate out again. Garlic/ginger puree can go in now. Keep it moving all the time to blend & prevent burning. Drop your onion puree & keep this going until your onions clarify. Watch out for it spitting, rather gloopily.
Salt to taste [but check again later after any other ingredients go in, under-salting will really weaken the flavours].
That's your base. Simmer for at least 2 hours.
Anything else after this point defines your "curry".
 The bhogar method is to fry spices directly in hot oil before adding any liquids. This can produce a more intense flavour, but is very easy to burn if not experienced. Bhogar is sometimes called tarka or tadka - I can only assume this is from different language origins, but I'm just a Brit & have no real clue on languages. Same applies to Balti vs Karahi, same thing, different place. Both originally referred to the small wok-like pan it was cooked in, not to what was cooked in it.
As regards your 'extra, late ingredients'
Paprika, fine; though there is a similar Northern Indian sub-continent version - Kashmiri Mirch. Similar to paprika in that it adds a lot of colour & flavour without adding any 'heat'. No need to be sparing with it, you can use a tablespoon or more.
Peri-peri salt - well, again OK as it's another red chilli very similar to bird's eye, though watch the salt levels.
Oregano/thyme - no, not really appropriate.
Cinnamon, clove - absolutely. Keep the quantities low, as each, like cardamom, can be overpowering if not used sparingly.
I only just noticed you have processed tomatoes and coconut milk in your recipe. That's an odd combination. Northern dishes would go with the tomatoes, Southern with the coconut. Keralan cuisine would use both, but the tomatoes would be fresh. The rest of your ingredient list would be better suited to a Northern dish, so I'd definitely lose the coconut next time. All of the above methods are 'Northern' methods too. Southern dishes use a lot of dry marinades, again contra to the suggestions above.
Also, depending on the 'wetness' of your tomato product, that's overall going to be way too watery. That's why my recipe idea above uses purée, to keep the added water content right down.
Apart from the excellent answers by Willk and Banjoe, I'd also say you need to consider the "Layering" of heat from different ingredients. By altering the proportions of ginger, garlic, black pepper, chilli powder, fresh and dried chillies, mustard seeds etc, you will get a slow build-up of heat with lots of flavour.
Exactly how harsh and where you want to end up on the fiery scale is a personal choice, but by using multiple sources of spicy heat you will add extra dimensions to your curry.
Just make sure you fry everything in plenty of oil, this extracts the natural oils from the spices etc. It is important you don't burn them or overdo it though, this will have the opposite effect.
I'm surprised no one has mentioned what finally made my curry pop...fermented fish paste.
I had a store-bought curry sauce whose results tasted the way I expected curry to taste, so I pored over the ingredients to see what it was using that I didn't traditionally use. And that was the biggest one.
In the western world, fermented fish paste is better known as Worcestershire sauce.
Another typical missing ingredient is corn starch, to give the food that "smooth" feel.