Changing voltages in code

I guess maybe what I need to figure out is if there is a more efficient way than to use shift registers to get this particular project accomplished.

I am presently having a shift register go high when a certain condition exists. However the output can exist at several voltages (and even as a contact closure).

Here are the voltages I wish to have the arduino trigger to some sort of an external chip. Contact Closure, 5VDC, 12VDC, or 24VDC ... I figured I could use some transistors and another shift register to switch activate the correct transistor, but there has to be a better way. The output will be going to a binding post (banana plug).

Is there a chip that could self regulate the voltages?

The kicker also is I need 24 selectable output banks, each one selectable from any of the 4 combinations. Surely I could do this with fewer connections like I am thinking. Any ideas are appreciated. Let me know if what I'm talking about doesn't make sense.

That's getting fairly complicated...

I suggest you build one channel before trying to build 24 shift-register controlled channels.

Of course, the contact closure is going to require a relay. And, a 2nd relay to isolate the optional voltages from the switched contacts.

A variable voltage regulator can be used to get the various voltages by switching-in different resistor values. That switching could probably be done with transistors or MOSFETs. Note that linear regulators have to dissipate power (heat). A "1 Amp" linear regulator that's regulating-down from more than 24V or more to 5V will likely overheat at less than one amp. If you need much current, look for a variable switching regulator chip.

You should be able to control all of that with shift registers, so you can multiply your circuit as many times as you wish. Of course, you can't directly drive relays from a regular shift register so that will also require a transistor or MOSFET.