Why does spd-say stop speaking after a short while in the command line?

The reason is spd-say times out and exits before completing the full text-to-speech output.

To make spd-say wait until the full text has been read, please add the option --wait after it. Like so:

spd-say --wait "moo moo farms are the best cow farms ever. They say moo, they don't pollute the earth, and they give milk. Visit moo moo farms today for only twelve easy payments of seventeen ninety five weekly!"

Explanation - as requested by Joshua Miller:

spd-say sends text-to-speech output requests to speech-dispatcher. Please, read here.

However, if the text is too long, spd-say exits early... hence the need for the --wait option.

Other applications including your JAVA application might be sending text-to-speech output requests directly to speech-dispatcher. Please read the ( description ) part here.