For anyone looking to do this in the future, See This Post as the old one is not at all optimal for live speech_recognition.
Optimized Solution Overview:
Note: I will not be posting details here. If you need any further details, you're welcome to comment here or shoot me a message
Essentially, the problem with accessing the audio data while the sink is recording, is that the recording function runs in a separate thread. So in it's natural state (without modification) the data won't be accessible until the thread completes (i.e. the stop_recording function is called) and the process navigates back to the main thread with the rest of your code.
The solution:
The solution I ended up implementing was slightly more complex, just as a result of the way the data is going to be utilized, but the essence lies in a slight modification to the base Sink Class in the core.py file. Essentially you add a queue (use either Queue (which is FIFO) or LifoQueue) as a base Sink class parameter. You then go down to the write function and implement it however you want. I chose to wrap the user and BytesIO buffer in a dict, and then pass that to the Queue via self.queue.put(dict_wrapper).
And that's pretty much it! After that, you just need to incorporate the receiving end of the pipe into your Bot's code via sink.queue.get().
An additional note: I did create a custom sink, by subclassing the base Sink class. I also added the queue there as a parameter. I then added a custom sr_formatting definition designed to process the BytesIO buffer bytes, add wav formatting, convert to numpy array, and write back to a different memory buffer to prep it for speech recognition processing.
Hope this is useful to someone!