Added 2 rules and made 1 change to an existing one
The first rule I added was to indicate that "ur" at the end of a word is stressed so that it now can pronounce words like Gravur, Tastatur, Klausur, Zensur, etc. correctly. The second rule I added was a word which it pronounced incorrectly before. The change to the existing rules were so that it pronounces kanal and signal everywhere with the stress on the a.
Those are more rules for correct pronunciation. The ey rule at end of word was removed to make espeak pronounce names like Meyer, Speyer, etc. correctly which it didn't do before. The other rules I added are also for correct compound word pronunciation. German's got a lot of compound words, a lot of them espeak can't say, but adding every single word there exists would be hard I guess, those are at least a few
Make it possible to restart speech even when audio open failed once
When notably the audio card is busy, we should report the issue to the
application, but still permit the application to retry submitting text
to synth, and eventually succeed to open it.
This change simply fixes the update of the out_samplerate variable to track
whether audio is open, and if not when text is submitted by the application,
try again to open it.
Valgrind reports
==20307== Invalid write of size 1
==20307== at 0x4E856FE: Wavegen.part.1 (wavegen.c:880)
==20307== by 0x4E86682: Wavegen (wavegen.c:670)
==20307== by 0x4E86682: Wavegen2 (wavegen.c:1235)
==20307== by 0x4E86682: WavegenFill2 (wavegen.c:1317)
==20307== by 0x4E86CA7: WavegenFill (wavegen.c:1398)
==20307== by 0x4E7093F: Synthesize (speech.c:442)
==20307== by 0x4E712E0: sync_espeak_Synth (speech.c:549)
==20307== by 0x4E8A5C0: process_espeak_command (espeak_command.c:317)
==20307== by 0x4E8B387: say_thread (fifo.c:333)
==20307== by 0x50E85A9: start_thread (pthread_create.c:463)
==20307== by 0x53F5CBE: clone (clone.S:95)
==20307== Address 0xad5e1bd is 0 bytes after a block of size 2,205 alloc'd
==20307== at 0x4C2CABF: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20307== by 0x4C2EE04: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20307== by 0x4E70CFC: espeak_ng_InitializeOutput (speech.c:286)
==20307== by 0x4E6176E: espeak_Initialize (espeak_api.c:67)
==20307== by 0x10A5D8: initialize_espeak (espeak.c:303)
==20307== by 0x109D1D: main (espeakup.c:201)
==20307==
Indeed, the out_ptr >= out_end test is not enough: it only checks that
one byte can fit the buffer, while klatt and wavegen produce two bytes.
Add word "summe" in rules for correct compound word pronunciation
I hope that will be my last change. Most of them, like Zitat, gedulds, etc have been added for correct compound word pronunciation. The A: phoneme in komma and beta sounds more natural for me; I also did Komma this way because it matches the way espeak reads it when written as an actual word.