I would recommend calling VOICE INIT exactly once at the start of your program, and never again, since it's not safe to call it when the Intellivoice is speaking. I honestly believe IV_INIT (what VOICE INIT calls) should be called automatically by IntyBASIC under the hood before reaching the first line of your program.
VOICE INIT at best should just let the current phoneme finish, and empty the queue. (This is not what it currently does.) I should add an IV_HUSH to my Intellivoice driver to do that.
I'll try to work up a proposed patch to intybasic_prologue.asm / intybasic_epilogue.asm and post them later.
EDIT: If you're going to reset your game by branching to $1000, you'll end up calling VOICE INIT again even with this strategy. If you don't take care to ensure the Intellivoice is quiet before branching to $1000, you could end up crashing the Intellivoice. As discussed previously, an actual hardware reset will be necessary at that point. I consider branching to $1000 to be a hack, FWIW.
Edited by intvnut, Wed Jan 31, 2018 6:09 PM.