Signatures
speak and stop are async here, unlike React Native and Flutter where speak is
synchronous, and unlike Web where stop is.
Options
Playback lives in the renderer
The utility host produces samples; the renderer plays them.speak() handles the common case
for you, but when you want control over routing or mixing, synthesize and hand the samples to
a Web Audio graph in the window.