To clarify, you were successful at varying LED intensity using a digital out but it causes noise? Second, is it correct that you saw the LED brightness pulsating with the audio?
If the problem is the noise, then this may be more of a hardware connection question rather than a Pd question.
One way it does interact with software is timing/syncrhonization. If you have several ports simultaneously switching, then that creates large pulse currents on the 3V3 supply. This noise can easily feed into audio circuits.
1) Electrical connections to LED's : Return path to a digital ground pin. Do not share the LED ground with audio ground.
2) Pull down LED's to turn them off (3V3->LED->IO_PIN), and make your 3V3 feed by using a 10-ohm resistor into a >470uF capacitor to ground. The capacitor in the mix will help slow down the edge rate on the circulating currents out of 3V3. The capacitors still need to be returned to a digital ground pin and kept away from audio grounds, but at least this lets you filter the 3V3.
3) Programming: Stagger the pulses so they don't all change state simultaneously. Make each output channel start its pulse at a different time so they don't all switch on or off together.
4) Programming part 2: If there is still noise then you can de-correlated it to make it more like white noise rather than a dominant irritating tone (pulse density modulation). Here is one way to do this using C++:
https://github.com/transmogrifox/Bela_Misc/tree/master/PDM_digital_IO
Sorry I don't have anything that does this using Pd, but if you have trouble with following the the C++ then maybe this block diagram will help outline the algorithm implemented for pulse density modulation:
rand()->[high-pass-filter]---->[+]----->[+]-------{>0 ? 1,0}--------o--->[DIGITAL OUTPUT]
^ -^ |
| | |
[Input Signal]------------------o o-----[low-pass-filter]<---o
Basically it's a feedback network where you add high frequency noise onto the input signal and then compare it against a low-pass filtered version of the digital output pulses. The feedback network through the low-pass filter causes the average pulse density power to track the input signal amplitude, but the pulses occur at random times.
Ideally you only have to make one high-pass random noise generator if you expect all the signal sources to be different. If you aren't outputting exactly the same levels at the same time then the different position against the noise waveform will mix up the switching times so they are not very closely correlated.
If you wanted it to be entirely uncorrelated, then you would need to make a random generator for every channel and seed these with a different value on initialization.