There's several grey areas here that I think need to be cleared up. Firstly, just sending bytes, that just so happen to be digital audio samples, over USB, isn't the same as USB audio. If you want your PC/mac to pick the USB devices up as an audio device, then it needs to enumerate as such and adhere to certain restrictions that will govern how it works - including sample rate, bit depth, feedback endpoints to tell the PC how many samples its sending (so it can calculate the sample rate, and convert it to your playback sample rate accordingly).
Similarly a MIDI device, if you want your apps to pick up the midi messages, must be a USB MIDI device class. One can of course have several devices on one bus, but is very involved.
If your goal is just to use USB to 'get data' from it, then you can indeed use a teensy/STM32 to read bytes from the I2S, and a UART for the MIDI, and just package them up and send them over USB as a HID device - but that won't help at the other end, its just 'bytes'. You could easily write an application that picks up these bytes, and writes to a *wav and a MIDI file but they will only be available after you've stopped recording.
Apologies if I was wrong in my reply, I had assumed you wanted to make something that means when you plug it into your PC via USB, it appears as both an audio device (a recording device) and a MIDI device (for using VST plugins, cubase, logic pro etc..). I have seen both DIY USB soundcards, and DIY USB MIDI interfaces, but not a project that merges the two. It can of course be done, one can buy interfaces with audio in/out and MIDI in/out in one box, but they're about £110-150.