My father In Law had a similar situation. Try this:
1. Remove the tub spout and cap it off with a hosebib or valve with a elbow pointing down. Put a bucket under it.
2. Remove the shower head and try to turn the shower head arm up. Pour some vinegar or some kind of delimer in it. You will need to do this several times to get the grit to break loose. Let it set for awhile then open the valve you installed on the spout pipe and see what drains out. You might be surprised. I sure was. Even though you turn off the shower and the spout may drain out, junk in the water will still build up and close off water passages. You should not need to turn the water supply of to do this either. You just need to get the liquid down the shower head pipe.
At first we tried a new cartidge, then an air compressor to hopefully knock something loose in the pipe, He has galvanized pipe in Sun City. The shower works like new again.
I would suggest that you go through your house and remove and clean aereators on faucet spouts and turn the water on to flush out debris. Excersise your angle stops too. Typically when you really need them to do their job they are frozen from lack of use and break. Replace with a Dahl Brothers brand angle stop. Those little things are tanks! They are made in Canada. Install a whole house filter. This is your first defense against dirt and small rocks from getting in your water system.