I would help with this, or add it, if I knew a way to clock it with 44.100kHz
I've been looking at this recently. It's a difficult problem.
Unfortunately PLL4 only routes to I2S, SPDIF and FlexIO. But sadly, NXP didn't implement FlexIO output triggers to the crossbar (FlexIO can receive triggers, but not transmit them), so FlexIO can't directly trigger ADC through the ADCETC. Looks like NXP didn't provide any other paths from PLL4 to any other timers that could feed trigger pulses into the crossbar. I can't see any to trigger the ADC in sync with PLL4.
So I'm afraid the only solution, at least that I can see, is to run the ADC asynchronously and resample its data. I have long wanted to run the ADC and DAC on Teensy 3.x at 4X the sample rate, and I'd like to do that (or slightly faster) from the start on Teensy 4. Fortunately we have plenty of CPU power.
My best guess so far looks like the ADC / ADCETC running continuously with a DMA channel in circular buffer mode (but no interrupts from the ADC or its DMA). Something generates an interrupt in sync with PLL4 every 128 sample, either FlexIO or one of the I2S ports. Might be simplest to just use I2S1 in a dummy configuration when the project isn't using I2S, rather than bother with FlexIO. The interrupt would read the ADC's DMA channel destination address to get the current write position in the circular buffer, than just read backwards from that point and run the data into a short FIR low pass filter. Before filtering, we'll probably linear interpolate to translate the raw ADC samples to an exact multiple of the actual audio sample rate, so then only 1 FIR calculation is needed for each output sample.
One of the unused quadtimers or flexpwm timers will probably need to be commandeered to trigger the ADC. Maybe we should start a list of which libraries are known to grab those "unused" timers so we can hopefully design libraries to have as few conflicts as possible if users try to use them together in a project.
Also, as a longer term goal (well beyond version 1.52), I want to move analogRead() to using the ADCETC. Hopefully this can give us a nice situation where people can freely mix audio library ADC use with ordinary Arduino analogRead(), and maybe also other time muxed use from other libraries needing analog inputs. Some sort of allocation of whether to use ADC1 vs ADC2 also needs to be worked out...