Clean up speech generation

Cleaning up speech generation a bit. Ultimately, I would like to make it a bit more flexible than this, but for now at least the procedure is a bit clearer when looking at the code.