Which TTS is better for the Dutch language?

Until now I have been using Espeak as TTS for Dutch. The quality is not good, quite often difficult to understand. So I’d like to switch to another solution, I tried OpenTTS but I had the impression it just uses the voice of Espeak. Any suggestions (based on experience) from the Dutch speaking part of the community here?

kind regards,
Hugo

Google Wavenet.

It sends the text to Google yes, but only once and then it is played from cache

1 Like

For those who speak Dutch (I don’t), have you come across any openly available speech data with a single person reading a book or something?

Importantly, each sentence should be split into a separate audio file. Librivox has plenty of audio books in Dutch, but it’s only split by chapters.

If someone can point me at a properly split audio corpus, I will train a MozillaTTS model for the Rhasspy community.

Alternatively, if anyone has the time and a high quality microphone, I can give you a phonetically balanced set of sentences to read and a small program that will record them. We only need one volunteer!

1 Like

Thanks for doing this, @synesthesiam! I have written a blog post about your offer in Dutch and pushed the link on my Twitter and LinkedIn accounts:

In what other places can we make some noise about this to make this happen?

1 Like

Synesthesiam,
I am prepared to read the phrases for you. I have an Apogee studio microphone available which only can be used on a Mac ( Not my choice…) and an sm57 (or 58) which I can connect to my main linux machine using an u-phoria umc202 interface. I also have a Jabra headset available.
My pronunciation will be that of Dutch(Flanders) which differs a bit from Dutch(The Netherlands) but is mutually understandable between people from Flanders and the Netherlands.
I have already being reading phrases for https://commonvoice.mozilla.org/nl, I don’t know whether that input could be merged with your data?
And a last thing which puzzles me, I read this in the Rhasspy-documentation
(https://rhasspy.readthedocs.io/en/latest/text-to-speech/):
“Mozilla TTS will not run on a Raspberry Pi”. Is that no longer up to date?

kind regards,
hugo

2 Likes

One person replied to me, she asks whether she needs any specific experience for this, and what she needs to do exactly. And which operating systems does this “small program” run on? She has a Mac.

It would be nice to have both a male and a female voice :slight_smile:

I wonder if there would be interest on the Mozilla TTS Discourse site? Maybe users of Home Assistant or OpenHAB would also be interested.

Awesome, thank you :slight_smile:

Please forgive my ignorance: is this a difference like U.S. vs U.K. English, (different pronunciations) or is this more like North vs. South U.S. (accent)? I ask because it may change how I build my pronunciation dictionaries. I see Flanders mentioned on this Dutch phonology page, but in some places like Wiktionary I see different pronunciations labelled “Nederland” and “Vlaanderen”.

My MozillaTTS Docker image is build for amd64 only right now. In theory, MozillaTTS should run wherever PyTorch can (or sometimes Tensorflow 2). I will need to build a Raspberry Pi image once I know the details of our models.

Great! Multiple voices would be awesome.

I have a small Python program that uses a very basic tkinter GUI and arecord. Do you know if these work on the Mac? We could replace arecord with some other Mac command-line utility if needed. @hugocoolens, it sounds like the same would apply to you since you’re also on a Mac.


Before we start recording, I need to do two things:

  1. Clean up my voice-recorder program (mentioned above) and ensure it can record on a Mac.
  2. Construct a set of “phonetically balanced” Dutch sentences for @hugocoolens and @koan’s participant to read.

I might need some feedback on #2. I plan to follow a similar process as was used to construct the CMU Arctic prompts for English. I’ve successfully trained a decent MozillaTTS model on these ~1000 prompts, so it seems like that’s enough data to start with (at least for English, which I’ve read is related to Dutch).

I’ll post a link here to my first attempt at the Dutch prompts/sentences when I have them ready. If this approach works well, we can extend this to Rhasspy’s other languages :slight_smile:

One last thing: licensing. Are you (@hugocoolens, @koan’s participant) willing to release your voice recordings into the public domain?

It might be; I need to check the licensing of Common Voice to see if I’m allowed to build voices based on the data. If you have local recordings, you could always release them separately.

I think instead of arecord we can use sox on macOS. It can be installed with Homebrew.

2 Likes

Yes, I am willing to release my anonymized voice recordings Do you think you can guarantee anonymizing them?

Since I already have no idea who you are, would this just mean not attaching your user name to them? :smiley:

If we use sox as @koan suggested and store the audio in WAV files, there shouldn’t be any metadata aside from sample rate, etc. in the files. We should still double check with soxi or something before anything gets sent around.

Please forgive my ignorance: is this a difference like U.S. vs U.K. English, (different pronunciations) or is this more like North vs. South U.S. (accent)? I ask because it may change how I build my pronunciation dictionaries. I see Flanders mentioned on this Dutch phonology page, but in some places like Wiktionary I see different pronunciations labelled “Nederland” and “Vlaanderen”.

I’m not a linguist (maybe an amateur linguist), but the difference between different pronunciation and different accents is not easy to determine.

Maybe you could give the speakers, which lend their voices, a checkbox to choose whether they consider their pronunciation “Flemish Dutch”, “Dutch from the Netherlands” or “Neutral”?

kind regards,
Hugo

Since I already have no idea who you are, would this just mean not attaching your user name to them?

Yes, that’s sufficient for me.

kind regards,
Hugo

1 Like

I have a small Python program that uses a very basic tkinter GUI and arecord . Do you know if these work on the Mac? We could replace arecord with some other Mac command-line utility if needed. @hugocoolens, it sounds like the same would apply to you since you’re also on a Mac.

My personal computers all are Linux-boxes. But the Apogee mike only works on a Mac (not mine, but from someone in the house ;-).

1 Like

I have tested your “little program” on my Linux-box with a Jabra Headset and it works fine.
You can send me those phonetically balanced” Dutch sentences.

kind regards,
Hugo

1 Like

I have a program now that can select a phonetically balanced set of sentences from a corpus. I’m finding that books work best as source material.

Does anyone here know of maybe 5 classic Dutch books that I could get plaintext files for? I looked in the Dutch section of Project Gutenberg, but I don’t see an option to sort by popularity within a given language.

The best books for this would be out of copyright, still understandable to modern Dutch readers, and not contain generally offensive or bizarre content.

Is it a problem if many of these books use older spelling rules? For instance, I just took a look at a random book, Aan de Zuidpool from Roald Amundsen, and I saw “nieuwen” instead of “nieuwe”, “groote”, instead of "grote, “dienzelfden” instead of “diezelfde”, … We don’t use this spelling anymore in Dutch.

This does seem to be a problem. I have “nieuwe” in my lexicon (from Wiktionary) for example, but not “nieuwen”.

Are there any public domain Dutch books you know of with modern spellings?

The books in the Dutch section of Project Gutenberg are not usable, I went through them and they are all in dated orthography and a kind of Dutch which isn’t spoken now a days. Maybe articles from news sites like https://www.vrt.be/vrtnws/nl could be used?

kind regards,
Hugo

They could, yes. Sites like that probably show up somewhere in the Dutch Oscar corpus. I can try a subset of Oscar (39 GB for Dutch alone!) and see what I get.

Books are nice in general for this task since they’re “meant” to be read aloud, and usually don’t have weird things like URLs and footnotes to filter out first.

Anything good at either of these sites?

Anything good at either of these sites?

I have been looking for some books which are in contemporary Dutch, here is what I found:

https://www.uitgeverijdefontein.nl/wp-content/uploads/2020/06/Lou-in-lockdown-Moyes-met-omslag.pdf
https://www.smashwords.com/books/download/617082/1/latest/0/0/spel-der-grenzen.pdf
https://www.smashwords.com/books/download/773824/1/latest/0/0/olifantentranen.pdf
https://www.smashwords.com/books/download/998326/1/latest/0/0/zusje.pdf
https://www.smashwords.com/books/download/691744/1/latest/0/0/ik-blijf-bij-je.pdf
https://www.chicklit.nl/static/files/chicklit/Jonkman_Pizzageur_Maneschijn.pdf
https://www.smashwords.com/books/download/505505/1/latest/0/0/passie-uit-het-verleden.pdf
https://www.smashwords.com/books/download/748347/1/latest/0/0/veroordeeld.pdf
https://www.dbnl.org/tekst/vos_049hima01_01/vos_049hima01_01.pdf

1 Like

What’s the license of these books? Are we allowed to use them?

1 Like

What’s the license of these books? Are we allowed to use them?

I think we should ask for trustworthy legal advice concerning this matter
kind regards,
hugo

1 Like

What’s the license of these books? Are we allowed to use them?

I think we should ask for trustworthy legal advice concerning this matter

Or maybe look for documents written by people who are willing to let them use for this purpose?

I’ve wondered: do you think any audiobook company would be willing to donate a contemporary book into the public domain for the Rhasspy project and others? Seems like it would look good for public relations.

New interested user here!!!

I’m looking for a dutch TTS myself. As mentioned espeak is really awful. I found these two references. It seems somebody is already working on a Dutch / Flemish TTS via Mozilla.


Maybe we should try to get in contact with the rdh user?

edit: I just posted in the Mozilla forum and posted the links to this topic. Let’s hope this results in a useful collaboration.

2 Likes

Great, thank you! I downloaded the German corpus linked from that discussion already. I know we already have plenty of German voices, but it’ll be good to have on hand.

If anything, maybe that user will have an idea of where to get good phrases.

I read the information about the layoff about Mozilla and the possible impact on the TTS / STT projects. That would be a major roadblock. I can understand the reluctance you showed to use Mozilla going forward since the future of the project is unknown at this time.

Maybe the following could a be a good set of dutch phrases?
https://nats.gitlab.io/swc/

Spoken Wikipedia in Dutch. An 8 GB archive is available for download.
Could this be used to train a TTS?

I’m willing to give this a go if I can get some guidance.
I’m no programming expert but I know my way around Python / C# / C++ and docker / Linux.

1 Like

I sent a request to https://www.uitgeverijdefontein.nl
I’ll keep you informed

kind regards,
hugo

1 Like

Let’s hope we get some support from the publisher. It would be nice.
I did find the following project which has some public domain works in dutch.

http://librivox.nl/

The dutch text is available as well (via Gutenberg or via the librivox site)

Thank you, @hugocoolens this is a big help. I’ll be digging through the Dutch Oscar corpus a bit today and seeing if there are good sentences there too.

Librivox is awesome, but looking at the publication dates of the Dutch books, I was worried about the use of old words and spellings (as @koan mentioned earlier).

Linguistically, this is an interesting problem. Copyright lasts so long that there is language drift by the time it’s in the public domain.

What about the Mozilla common voice project in dutch? It has about 42 hours in dutch.

Or does it need to be a limited number of voices?

I looked at TensorflowTTS today, I got it it to install just fine, but I’m having a little trouble at the lack of documentation. I’m currently looking into setting up a basic English model to build a better understanding.

For text to speech, it’s best to have a single voice in a quiet, professional environment. And it’s also important that the spoken phrases be phonetically balanced, so there are enough examples to cover corner cases.

I plan to use the Common Voice Dutch corpus to train my own Kaldi model. I’m seeing if I can get ahold of the CGN (Corpus Gesproken Nederlands) as well. Seems like there was some work on a DeepSpeech model using CGN.

I did find the following project which has some public domain works in dutch.

http://librivox.nl/

These are old texts in a kind of old fashioned Dutch. I wouldn’t use them.

kind regards,
Hugo

I sent a request to https://www.uitgeverijdefontein.nl

Unfortunately I didn’t get any reaction yet. I have however written another request to
the publisher chicklit. This time also mentioned it would look good too for their public relations.

You can find the e-mail I wrote here below (if people have suggestions for improvement or just want to use it for other publishing companies, feel free to do so)

Geachte Mevrouw/Heer,

Op het forum van het open source project Rhasspy (an open source, fully offline set of voice assistant services for many human languages) is momenteel een initiatief gestart om de omzetting van fonemen naar het Nederlands te verbeteren. Er wordt daarom overwogen om gebruik te maken van een selectie van zinnen die uit gratis downloadbare e-books afkomstig zijn. Die selectie van zinnen zou vervolgens door een native speaker voorgelezen worden en het resultaat zou dan gebruikt worden voor verbetering van de omzetting van tekst naar spraak (TTS=text to speech).

We hadden graag geweten of jullie het gebruik van gratis downloadbare e-books op jullie website voor deze toepassing zouden toestaan omdat we in geen geval later met juridische copyright issues willen geconfronteerd worden. We denken overigens dat samenwerking ook voor jullie voordelig zou kunnen zijn voor wat het public relations aspect betreft.

mvg.

Hugo Coolens

Een link naar het Rhasspy project vinden jullie hier:

https://rhasspy.readthedocs.io/en/latest/

en de discussie waarover ik het hierboven had vinden jullie hier:

Which TTS is better for the Dutch language?

3 Likes

I also sent a similar request to “de Digitale bibliotheek voor de Nederlandse letteren”

kind regards,
hugo

1 Like

I noticed I originally wrote phonemen in stead of fonemen…

Thanks for doing this, @hugocoolens! Let me know if you hear anything back.

@koan, @hugocoolens: I’ve just cleaned up the voice recorder. Can you (youse, y’all) verify that it still runs on your Macs?

Dutch Sentences

I also finally have my first try at phonetically balanced Dutch sentences. These were taken from a subset of the Oscar corpus. Can you both take a look and see if they’re any good? Do they say anything bad or have weird words that nobody would know how to pronounce?

Some details on the sentences: there are 1186 sentences that (should) have about 94% phoneme coverage. I restricted sentences to be between 3 and 15 words, and threw out anything with a URL, e-mail address, or number.

What about English words in the sentences? Funky, seminar, …

I also saw some URLs in the list.

And there’s an encoding issue with some of the accents and special characters.

I’ll take a closer look tomorrow.

1 Like

Any suggestions on an automated way to distinguish English words here? I could restrict everything to the N most frequent Dutch words (according to the Dutch language model I have). Or exclude words that show up as frequent English words…

Grrrrr…I filtered out “http” but there are some “www.” and ".com"s in there too!

This seems to be an issue with the Oscar corpus itself. I may need to pipe everything through iconv or something to fix UTF-8 issues. All sentences pass through Python, so they’re at least technically UTF-8. Filtering out non-word characters entirely may also be an option.

I think this is better reviewed manually.

Can you put this file in a repository? I think we need some iterations to get this into a usable state. I can go through the list then, delete all sentences that are less appropriate, you can add new sentences to keep the phoneme coverage high enough, and I can go through the diff again.

1 Like

OK, got it here: https://github.com/rhasspy/tts-prompts

Ok, I commented out 257 sentences for various reasons. I don’t know if commenting out or deleting is easiest for you to process it further, but I noticed you commented out some sentences with URLs, so I did the same.

The encoding was OK this time.

By the way, does this “94% phoneme coverage” mean that 6% of the Dutch phonemes will not be spoken by using this set of sentences?

1 Like

There is a some misunderstanding here. I said I had someone in my household who has a Mac with recording software and a professional mike. But I only tested the old version under linux (mint19.2). I tried out the new version also under mint 19.2 ans it works fine. I used a Jabra headset for the tests.

kind regards,
Hugo

1 Like

Ok, I commented out 257 sentences for various reasons. I don’t know if commenting out or deleting is easiest for you to process it further, but I noticed you commented out some sentences with URLs, so I did the same.

I read Koan’s corrected version. I think he did a great job. I noticed some typos, would like to add a few sentences and reject some others to be consistent with the criteria he used too.

I noticed a small typo in sentence 118:
( nl_rhasspy_118 “ik was altijd maar moe, maar dat kwam door mijn ogen. „“” )
should be:
( nl_rhasspy_118 “ik was altijd maar moe, maar dat kwam door mijn ogen.” )
Sentence 170 is OK if the speaker does not confuse hè with hé which are both pronounced differently in Dutch.
( nl_rhasspy_170 “Hè, hè, eindelijk goed geslapen.” )
I would leave out sentence 272 because of the French word “chapeau”
( nl_rhasspy_272 “Chapeau dus voor moed en volharding.” )
I would leave out sentence 337 because of the French word “enfin”
( nl_rhasspy_337 “Enfin, waar was ik gebleven.” )
I would leave out sentence 407 because of the French word “enfin”
( nl_rhasspy_407 “Enfin, praten heet dat dan gewoon.” )
Sentence 455 is acceptable for me
; ( nl_rhasspy_455 “Tijdens onze lessen staat de hele dag fruit, water, thee en koffie op tafel.” )
There is a typo in sentence 506:
( nl_rhasspy_506 “De aanhouder wint!)” ) should be: ( nl_rhasspy_506 “De aanhouder wint!” )
I would leave out 537 because of the word “team”
( nl_rhasspy_537 “Hoe hoog komt het team?” )
I would leave out 601 because of the word “enfin”
( nl_rhasspy_601 “Enfin, even zeven, en er kan gedronken worden.” )
I would leave out 606 because of the French word “enfin”
( nl_rhasspy_606 “Enfin, we zien wel.” )
I would leave out 673 because of the word “compromis”
( nl_rhasspy_673 “Een compromis dan maar op zolder.” )
I would leave out 713 because of the word “branche”
( nl_rhasspy_713 “Wat doet deze branche eigenlijk?” )
I would leave out 725 because of the word “chauffeur”
( nl_rhasspy_725 “Aangekomen bij het hotel geef ik de chauffeur aan om even te wachten.” )
I would leave out 780 because of the word “weekend”
( nl_rhasspy_780 “Dit weekend is geen gewoon weekend.” )
Sentence 843 is acceptable for me
; ( nl_rhasspy_843 “Die mensen is het moeilijk uit te leggen.” )
I would leave out 855 because of the word “interview”
( nl_rhasspy_855 “Ook niet als dat interview over Europa zou gaan.” )
There is a typo in 856
( nl_rhasspy_856 “Ik weet niet of ik dat wel wou weten :wink: Te laat!” ) should be:
( nl_rhasspy_856 “Ik weet niet of ik dat wel wou weten ; Te laat!” )
There is a typo in 870
( nl_rhasspy_870 “Wij van wc-eend adviseren wc-eend.’” ) should be:
( nl_rhasspy_870 “Wij van wc-eend adviseren wc-eend.” )
I would leave out 875 because of the word “populair”
( nl_rhasspy_875 “Die man is schijnbaar reuze populair, maar niemand van ons kent hem.” )
I would leave out 879 and 880 because of the word “cadeau”
( nl_rhasspy_879 “Dit is een puur cadeau aan jezelf!” )
( nl_rhasspy_880 “Een aanrader dus, een groot cadeau voor jezelf.” )
I would leave out 889 because of the word “meubilair”
( nl_rhasspy_889 “Al het bruin houten meubilair van die tijd.” )
I would leave out 893 because of the word “team”
( nl_rhasspy_893 “Niets kan op tegen een sterk team.” )
I would leave out 923 because of the word “ketchup”
( nl_rhasspy_923 “Tomatenketchup komt soms moeilijk uit de fles.” )
I would leave out 924 because of the word “gechargeerd”
( nl_rhasspy_924 “Wat gechargeerd, maar het scheelt niet veel.” )
I agree with Koan to leave out 934, but he entered accidently a colon in stead of a semicolon:
: ( nl_rhasspy_934 “Het is dé manier om voortdurend de big picture in het oog te houden.” )
I would leave out 924 because of the word “enthousiast”
( nl_rhasspy_990 “Moe maar heel enthousiast kwamen ze terug.” )
I would leave out 1013 because of the word “enfin”
( nl_rhasspy_1013 “Enfin, gaan we wel weer vroeg slapen.” )
I would leave out 1032 because of the word “shirt”
( nl_rhasspy_1032 “Jongen, donkerblauw shirt, rode tekst.” )
Sentence 1035 is acceptable for me:
; ( nl_rhasspy_1035 “Ik vond het echt een top tent.” )
I would leave out 1042 because of the word “enfin”
( nl_rhasspy_1042 “Enfin, dat maakte nu niet meer uit.” )
I would leave out 1050 because of the word “champagne”
( nl_rhasspy_1050 “Ik drink graag champagne.” )
I would leave out 1112 because of the word “enfin”
( nl_rhasspy_1112 “Enfin, waag uw kans!” )
I would leave out 1115 because of the words “college” en “enthousiast”
( nl_rhasspy_1115 “Ook het college werd enthousiast.” )

p.s.1 To avoid any misconceptions: the reason I leave out sentences with words of foreign origin is not because those words are not acceptable or used in contemporary Dutch but because they could reduce the quality of the phoneme-text conversion for Dutch.

p.s.2 As those words of foreign origin don’t follow the normal rules in Dutch, they could maybe be used
for refinements later?

Thank you! Commenting out is preferred since I will use those lines to create a “block list” on the next run.

Based on @hugocoolens’s feedback, I’m thinking I’ll need a separate block list for “foreign” words. I may have to get more sophisticated, using word likelihoods or excluding “optional” phonemes that are usually only used for foreign words (for example, supposedly /g/ as in “goal” is not native to Dutch).

No, this refers to phoneme pair coverage. This gets a little tricky, and I hope I’m doing it right. It’s common to do phone pairs (diphones) in a TTS dataset. Most phonemes are just one phone, but I also capture dipthongs, which are pairs of vowels that behave as one unit/phoneme (Dutch as at least three).

So I’m computing coverage based on phoneme pairs, but not all possible ones. Humans can’t produce all possible pairs, and I don’t know how to tell which ones belong in a language, so I’m just counting all pairs in the lexicon as “possible”. Coverage is then relative to all lexicon pronunciations. With hundreds of thousands of words, I’m hoping this will be sufficient.

Thank you! I’ll incorporate these later tonight or tomorrow, and then re-run the optimization.

Some may be necessary to get coverage of “optional” phonemes (like /g/ I mentioned above). I’m trying to stay somewhat close to the phonemes from our existing Kaldi Dutch model because it’s been shown to work well.

1 Like

I’m not sure this is grammatically valid: I think this should be “staan”. Because of this doubt, I commented out the sentence. People reading these sentences shouldn’t have to think about it or be annoyed by it, because this influences their performance. That’s why I removed so many sentences: the slightest doubt would detract from the quality of their work.

Grammatically correct, but I would say “Aan die mensen”, so this sentence would annoy me when I would have to read it :slight_smile:

I don’t think this is a typo: this is an emoticon, ;). But maybe people will hesitate when they have to “speak” an emoticon, so I’d probably replace this by a full stop or an ellipsis.

I found this too “Northern Dutch”. And it should be “toptent” anyway.

I don’t agree with all the sentences @hugocoolens leaves out, but I agree with his reasoning that the quality of the phoneme-text conversion should be the important factor here. I let myself guide by the same principle for my deletions. So I think we should just drop any sentence that at least one of us doesn’t find acceptable. I suppose the corpus is big enough to find replacement sentences.

1 Like

OK Koan, that makes sense

kind regards,
Hugo

1 Like

Almost ready with an updated prompt list. I took @hugocoolens’s input into consideration and created a list of blocked words. We can add to this list and re-run the optimization.

I’ve added more sentences to the process (now about 13 million), and I’m finding that forcing the system to keep all of the approved sentences is less efficient. I can reduce the needed set from ~1200 to ~900 sentences by allowing it to pick anything, which seems like a big win for our voice talents (~300 fewer sentences to record). It does make more work up front for you guys, though. Thoughts?

OK, new prompts are here (930 instead of 1143).

I’ve included some coverage details too, which has a printout of all the missing phoneme pairs (like x c with example words that contain that pair (like aagtje). If we could meaningfully slip a few of these example words into the existing prompts, we could boost the coverage (currently about 93%).

The config.ini describes exactly how sentences were filtered – i.e…, which regular expressions/words excluded sentences from consideration. Anything commented out in prompt_filter.txt was also excluded.

Do you want me to go through them and give feedback like I did before?

kind regards,
Hugo

@hugocoolens I’ve started from the beginning. Maybe you can start from the end until 450?

@hugocoolens I’ve started from the beginning. Maybe you can start from the end until 450?
OK, should I also give the reasons why as I did last time?

kind regards,
Hugo

Yes, I’m also adding the reasons now as a comment in the list, that will be helpful to tune the filters probably.

Yes, I’m also adding the reasons now as a comment in the list, that will be helpful to tune the filters probably.

OK, I’ll do my part today

kind regards,
Hugo

I have gone through the first 450 sentences: https://github.com/rhasspy/tts-prompts/commit/eae987b64172ac0934b8cc60f2103b3cb305fa9f

The quality has improved somewhat, I “only” commented out 19% of the sentences. I explained my reasons in the comments.

I’l take a look at Hugo’s comments too when he’s done with the second half.

However, if the next iteration will again be a completely new set, I’m not sure we’re going anywhere with this. It seems that each time still a considerable part of the prompts has to be removed because of the sentences are inappropriate, incomplete, weird or with difficult to pronounce words.

Is there a way to adapt the generation of the prompts so it takes into account some margin of 20-25% prompts that can be deleted? And then after weeding out the roughly 20% less usable sentences, check which phoneme pairs are still missing and adding these words manually in these sentences?

Thank you! I see you offered sentence modifications. I’ll put the modified sentences back into the next iteration.

Going forward, I can lock the approved prompts in and only vary the commented out ones. This should let us converge on something soon.

Thank you, I appreciate you two taking the time to do this.

Starting with 451 (reasons below each sentence)
;nl_rhasspy_465 “Vlag Bahama’s kopen of bestellen.”
weird sentence
;nl_rhasspy_472 “Van vreemde origine dan nog wel!”
the word “origine” could be pronounced the French way
;nl_rhasspy_485 “Wij schreeuwen vanaf de pier en uiteindelijk zagen ze ons.”
inconsistent use of tenses, change to: “Wij schreeuwden vanaf de pier en uiteindelijk zagen ze ons.”
;nl_rhasspy_497 “Gillend en spuitend komt deze blondine klaar.”
pornographic language
;nl_rhasspy_498 “Gauw eind dit jaar weg!”
weird or incomplete sentence
;nl_rhasspy_500 “Wij van wc eend bevelen wc eend.”
incomplete sentence and the use of the word “wc”
;nl_rhasspy_506 “Dat zou ik wel cool vinden. “”
use of English word: cool
;nl_rhasspy_507 “De Fusion Wireless is duidelijk familie.”
use of English words
;nl_rhasspy_508 “De muis is dan de tweede muis.”
weird sentence
;nl_rhasspy_510 “Al dat is geen toeval.”
incorrect Dutch sentence
;nl_rhasspy_517 “Bij mij ligt er van alles haha, oeps!”
weird sentence
; nl_rhasspy_519 “beet ze haar broer toe.”
incomplete sentence
;nl_rhasspy_524 “Om Tjendol of Dawet te maken.”
uncommon words: Tjendol and Dawet
;nl_rhasspy_529 “En de vis die ze eten is de grote massa, oud, ziek, zwak of misselijk.”
weird sentence
;nl_rhasspy_530 “Zouden zeker nog een keer teruggaan!”
incomplete sentence
;nl_rhasspy_531 “In het spel van paus.”
incomplete sentence
;nl_rhasspy_536 “Ze kiest er een met coquille. „”
French word: coquille
;nl_rhasspy_537 “Gemakkelijk en voor ieder budget!”
Could easily be misread as: Gemakkelijk en voor ieders budget!
;nl_rhasspy_543 "hoek, grote eetkamer en bibliotheek.
incomplete sentence
;nl_rhasspy_545 “Ben jij per december beschikbaar?”
Northern Dutch
;nl_rhasspy_547 “Dat is dat ding en dat na a verschil.”
incorrect sentence
;nl_rhasspy_551 “En ook onze kinderen, met fiets.”
incomplete sentence
;nl_rhasspy_553 “Die zijn aan de kant van de iglo open.”
atypical pronunciation of the “g” in the foreign word “iglo”
;nl_rhasspy_554 “Of de trein al per december in Luik start is nog niet zeker.”
Northern Dutch
;nl_rhasspy_555 “Zo kunt u genieten van”
Incomplete sentence
;nl_rhasspy_559 “De zeventienjarige pakte dat af en stak op hem in.”
weird sentence
;nl_rhasspy_564 “Nee, nee zegt de bakra.”
foreign word: bakra
;nl_rhasspy_569 “In deze pdf hebben wij”
incomplete sentence and the use of the word “pdf”
;nl_rhasspy_571 “Hij zit klaar voor uw mail.”
use of English word “mail”
; nl_rhasspy_573 “Nee, ik ben niet pet.”
weird sentence
;nl_rhasspy_575 “Van de verslaving te komen ze voor.”
incorrect sentence
;nl_rhasspy_584 “Let op de vocht die uit de theedoek komt is heet.”
wrong article (de) and gender used for “vocht”
;nl_rhasspy_588 “Leuk dat je de tekst over de mosjav gaat lezen.”
foreign word: mosjav
;nl_rhasspy_589 “Je kan deze hier downloaden.”
English word: downloaden
;nl_rhasspy_590 “Ken dat niet…waar is de blauwe lucht??? #”
weird sentence, use of “…” in stead of “…” and use of “#”
;nl_rhasspy_591 “De glossy zou er nu moeten zijn.”
weird sentence and use of the English word “glossy”
;nl_rhasspy_596 “Laten afkoelen op de plaat.”
incomplete sentence
;nl_rhasspy_598 “Dat is no go area.”
use of English words
;nl_rhasspy_599 “Je kunt deze foto s laten zien tijdens de presentatie.”
Should be: “Je kunt deze foto’s laten zien tijdens de presentatie.”
;nl_rhasspy_600 “Dan kun je met data aan de slag.”
data could be pronounced the English way
;nl_rhasspy_602 “Deze website is nog in aanbouw.”
English word: website
;nl_rhasspy_605 “Mama was er vaak niet.””
Should be: “Mama was er vaak niet.”
;nl_rhasspy_607 “Zing u zondag in de kerk , zeker zing ik.”
incorrect Dutch conjugation
;nl_rhasspy_608 “Waar wacht je nog op, gamen maar!”
English word: gamen
;nl_rhasspy_609 “Je ontvangt automatisch een reminder.”
English word: reminder
;nl_rhasspy_610 “Kom jij lekker heet genieten.”
pornographic language
;nl_rhasspy_611 “Van stoer sportief tot smart casual.”
English words: smart casual
;nl_rhasspy_619 “duits slordig keel neuken pijpen keel.”
pornographic language
;nl_rhasspy_621 “Wie moet hier nu over besluiten? .”
incorrect Dutch sentence
;nl_rhasspy_622 “Geen toilet of douche binnen.”
French words: toilet and douche
;nl_rhasspy_625 “De verzendkosten voor het retourneren zijn voor uw rekening.”
verb derived from French: retourneren
;nl_rhasspy_628 “Wat is Aura of Chakra healing?”
Use of foreign words: chakra and healing
;nl_rhasspy_629 “Op data en tijdstip dat jullie past!”
ill formed sentence and use of the word “data”
;nl_rhasspy_631 “Reden, de ut kan een.”
incomprehensible sentence
;nl_rhasspy_635 “De drone komt ook in de kleuren blauw en groen.”
use of English word “drone”
;nl_rhasspy_644 “Ik doe er niet meer aan.”
weird sentence
;nl_rhasspy_645 “En ben jij per direct beschikbaar.”
Nothern Dutch
;nl_rhasspy_647 "En welke ben jij eigenlijk? ?
weird sentence
;nl_rhasspy_649 “Dus waarom niet op die manier cashen en dan jezelf laten verdwijnen?”
use of verb derived from English: cashen
;nl_rhasspy_652 “Een tool is ook niet alles.”
use of English word: tool
;nl_rhasspy_657 “Dit verschil is relatief klein maar significant.”
possible use of French pronunciation of “gn” in “significant”
;nl_rhasspy_658 “In het musje dat medelijden heeft?”
weird sentence
;nl_rhasspy_660 “Niet bang zijn om Frans te moeten spreken.”
incomplete sentence
;nl_rhasspy_664 “Service is top, advies is uitstekend.”
use of foreign word: service
;nl_rhasspy_670 “Hij moet direct komen om haar te jagen.”
incorrect Dutch
;nl_rhasspy_673 “Een dier is geen machine.”
atypical pronunciation of “ch” in “machine”
;nl_rhasspy_674 “Hoe kan ik mijn budget besteden?”
atypical pronunciation of “g” in “budget”
;nl_rhasspy_677 “dus kan mij er goed in vinden.”
incorrect sentence
;nl_rhasspy_681 “Ik was twee en dertig.”
should be written as: “ik was tweeëndertig”
;nl_rhasspy_683 “kijken, gamen, roken, te veel eten, dan kan deze methode je echt helpen.”
use of a verb derived from English: gamen
;nl_rhasspy_686 “Lees voor, is het of fout?”
incorrect sentence
;nl_rhasspy_687 “Die zullen exposure zijn voor mij.”
use of English word: exposure
;nl_rhasspy_689 “Dus een ver van mijn bed show is.”
incorrect sentence
;nl_rhasspy_694 “Kaas gemaakt van Jersey melk.”
use of English word: Jersey
;nl_rhasspy_695 “Bellen of mailen middels onze contact pagina is ook mogelijk.”
use of a verb derived from English: mailen
;nl_rhasspy_698 “Dit keer gewoon op de bonnefooi.”
Northern Dutch
;nl_rhasspy_701 “Mijn moeder zegt dat ik niet per se alles hoef te doen.”
atypical pronunciation of “per se”
;nl_rhasspy_705 “Iedere patiënt kan deelnemen aan deze pilot.”
use of English word: pilot
;nl_rhasspy_706 “De iets andere deurbel staat zeer mooi deze deurbel uil.”
incorrect sentence
;nl_rhasspy_712 “Maar je kan ook terecht op de pagina Over.”
weird sentence
;nl_rhasspy_715 “De vrouw vindt bijvoorbeeld dat ze best wel eens chagrijnig is.”
atypical pronunciation of “ch” in “chagrijnig”
;nl_rhasspy_717 “En dat met een beetje kick van de ui en paprika.”
Northern Dutch
;nl_rhasspy_723 “En ben jij per direct beschikbaar?”
Northern Dutch
;nl_rhasspy_724 “Op te halen op zaterdag augustus.”
incorrect sentence
;nl_rhasspy_726 “Janet droeg het optreden vervolgens op aan haar vader.”
atypical pronunciation of “j” in “Janet”
;nl_rhasspy_730 “Een leuk aspect van judo is, dat je je leven lang kunt doorleren zonder klaar te zijn.”
foreign word: judo
;nl_rhasspy_736 “Wie oren heeft, die hore!.””
old Dutch
;nl_rhasspy_737 “Deze bepaling mist dan ook toepassing.”
weird sentence
;nl_rhasspy_739 “En de muziek er, wow!”
incorrect sentence
;nl_rhasspy_746 “Waar staat de data eigenlijk?”
possible English pronunciation of the word “data”
;nl_rhasspy_749 “Is er dan te leven zonder dit lichaamsdeel?”
weird sentence
;nl_rhasspy_750 “Het einde van de leugen? –”
should be: “Het einde van de leugen?”
;nl_rhasspy_754 “Ik was moe ik ging liggen.”
should be: “Ik was moe, ik ging liggen.”
;nl_rhasspy_761 “Wat vind je van en Nicaragua?”
foreign word: Nigaragua
;nl_rhasspy_762 “Heb je research voor je verhaal moeten doen?”
English word: research
;nl_rhasspy_785 “Seks onder de douche kan best lastig zijn.”
French word: douche
;nl_rhasspy_790 “Niet over andere mensen praat of je door jaloezie laat leiden.”
incorrect sentence
;nl_rhasspy_793 “Als eerste bezoek ik Belize.”
foreign word: Belize
;nl_rhasspy_794 “De wijn blijft in vat tot vlak voor de botteling eind augustus.”
should be: “De wijn blijft in het vat tot vlak voor de botteling eind augustus.”
;nl_rhasspy_808 “Upper Ten weer naar Praag.”
use of English words: “Upper Ten”
;nl_rhasspy_810 “Beneden is nog een berging.”
replace by: “Beneden is er nog een berging.”
;nl_rhasspy_814 “Verbranden niet snel en worden relatief gemakkelijk bruin.”
incomplete sentence
;nl_rhasspy_815 “Dit alles maakt het verlies van de bagage goed.”
use of French word: bagage
;nl_rhasspy_816 “Zit zelfs een usb aansluiting in de stoel.”
incomplete sentence and use of “usb”
;nl_rhasspy_817 “grote douche, enigszins moe hoor.”
weird sentence and French word: douche
;nl_rhasspy_820 “Past veel in en is mooi stil.”
incomplete sentence
;nl_rhasspy_824 “No je hebt gelijk maar geeft het niet op.”
“No” should be “Nou”
;nl_rhasspy_828 “In veel gevallen zijn deze verdwijnen vanzelf.”
incorrect Dutch
;nl_rhasspy_833 “Of nee, eigenlijk niet eens van hen.”
incomplete sentence
;nl_rhasspy_835 “Op deze pagina vind je alles over Shoemixx.nl.”
use of website name: Shoemixx.nl
;nl_rhasspy_837 “De Fietser is geen winkel.”
weird sentence
;nl_rhasspy_844 “Echter was dat maar schijn.”
weird sentence
;nl_rhasspy_845 “Ideaal voor op de bank of ‘s zomers op de loungeset!”
English word: loungeset
;nl_rhasspy_847 “Dé zondag die een grote verandering in haar leven kan brengen. ‘”
should be: "Dé zondag die een grote verandering in haar leven kan brengen. "
;nl_rhasspy_853 “De schade aan de auto en de vangrail is groot.”
French word: rail
;nl_rhasspy_857 “Hebt u moeite met douchen?”
verb derived from Frecnh: douchen
;nl_rhasspy_858 “De manat is de munt van Azerbeidzjan.”
foreign words: manat and Azerbeidzjan
;nl_rhasspy_859 “U ziet dan in welke range u zit.”
English word: range
;nl_rhasspy_860 “Op de homepage zie je verder al een aantal spellen voorbijkomen.”
English word: homepage
;nl_rhasspy_865 “U kunt altijd retourneren zonder opgaaf van reden.”
verb derived from French: retourneren
;nl_rhasspy_868 “Wij vragen dan uw naam en email adres.”
English word: email
;nl_rhasspy_869 “Voor zover deze data bekend zijn, kunt u die vinden op deze pagina.”
possible English pronunciation of the word “data”
;nl_rhasspy_872 “Of komt de baby van je zus er bijna aan?”
English word: baby
;nl_rhasspy_873 “Ontvang jij de Winkel Cheque?”
foreign word: cheque
;nl_rhasspy_875 “Ik coach hem in die rol en geeft hem advies.”
English word: coach
;nl_rhasspy_877 “Pijpen zonder is te bespreken.”
pornographic language
;nl_rhasspy_879 “Zoals we zien liggen we op deze range gemakkelijk voor.”
English word: range
;nl_rhasspy_880 “Op uw gebruik van de Website alsmede deze disclaimer is uitsluitend Nederlands recht van toepassing.”
English words: website and disclaimer
;nl_rhasspy_887 “Perfect voor uw afbeelding of branding project!”
English words: branding project
;nl_rhasspy_895 “De volgende dag al in hui!”
weird sentence
;nl_rhasspy_907 “Je komt altijd op de homepage uit!”
English word: homepage
;nl_rhasspy_920 “Na de grote hoosbui ben ik weer verder gaan lopen.”
Northern Dutch word: hoosbui
;nl_rhasspy_922 “We waren eind september en hadden niet mooi weer.”
incorrect Dutch sentence
;nl_rhasspy_923 “Goed zoeken is iets anders dan even snel googelen.”
verb derived from English: googelen
;nl_rhasspy_924 “En deel waar ze eten zou rooster zijn.”
incorrect sentence
;nl_rhasspy_930 “Hoe uw woning tot leven komt?”
incomplete sentence

1 Like

OK, I’ve combined all the approved prompts between @koan and @hugocoolens (total: 1587). I then ran the optimization to minimize the set without dropping overall coverage, which produced 1169 prompts.

I’ve done my best to clean up the prompts. If you have time, please give them one more quick look over.

The final coverage is about 90%, which I think will be sufficient. For reference, I recently came across a set of Dutch prompts on VoxForge and their coverage was only 70%. VoxForge is all GPL, so I’d be hesitant in re-using any of their prompts.

Ok this was much better: I only removed/commented 30 sentences.

But I feel that there is still some repetition in sentence fragments. This one stood out because “wie o wie” is not something you read every day:

koan@x1:~/Rhasspy/tts-prompts$ grep -i "wie o wie" nl-nl/prompts.txt 
( nl_rhasspy_999 "Wie o wie kan ons helpen?" )
( nl_rhasspy_1010 "Wie o wie gaat er winnen, en welke weg gaan ze nemen?" )
( nl_rhasspy_1072 "Wie o wie?" )
( nl_rhasspy_1087 "Wie o wie kan mij helpen?" )

999 and 1087 are almost the same, and 1072 is probably redundant.

I’d still love to improve coverage by trying to add as much words as possible for the missing phoneme pairs.

By the way, can you publish the script to compute the coverage? This would be helpful for fine-tuning the list of prompts: I would then immediately see the effect of removing or adding words or sentences.

1 Like

Great, thank you! I’m thinking we should keep some of the sentences with English works to get a bit of the foreign phoneme coverage. Do you think those English words are common enough?

This must have been a way of getting the phoneme pair /iː o/ (wie is /w iː/). The /iː/ is from something like “anal[y]se” too. I see maybe 10 examples in the lexicon where this sound comes at the end of a word (like zei), and no cases where the pair occurs in a single word.

Sure, the coverage file contains all of the missing pairs and example words. If the example words all look unusual or foreign, it probably means the pair can be safely ignored.

Yes, maybe I was a bit too strict in weeding out all English words. Words like “Halloween”, “liken”, “showen”, “shop” and “bye” are probably common enough to include.

1 Like

Hi guys, I uploaded my Dutch dataset here.

Enjoy!

5 Likes

Awesome, thank you very much! I am training a new model now with your data :slight_smile:

1 Like

Quick update, here are some samples from the latest model: https://drive.google.com/drive/folders/1TXDr_ZeRks3fXDQmlIChlwFcDNK5ki4X?usp=sharing

I’m using GlowTTS and the Multiband MelGAN vocoder. I had to re-train from scratch this morning because of a mistake, so the vocoder isn’t sounding so great yet.

I’ll update the examples after it’s had a change to train overnight :slight_smile:

I’m looking forward to this! :smile:
I’m already ordering some Pi Zero for wakewords :crossed_fingers: in the house

1 Like

Updated the samples again with the vocoder about 50% done: https://drive.google.com/drive/folders/1TXDr_ZeRks3fXDQmlIChlwFcDNK5ki4X

Sounds much better!

1 Like

Awesome! Even at 50% the voice sounds great! Can’t wait for 100% :wink:

Would it be possible to do this for French also? Can we do this ourselves (recordings+training)?

1 Like

Definitely :slight_smile: The first step will be adding support for French to gruut. I expect this to be done by next week or so.

The recordings can be done with anything as long as you have WAV files and transcripts. With a little work, gruut will help select a small set of sentences from a large corpora (books, Wikipedia, etc.) that are maximally useful.

Training just needs a CUDA-enabled GPU that’s supported by PyTorch >= 1.5. I’m using a GTX 1060 6GB.

Updated the samples again with the vocoder about 50% done: https://drive.google.com/drive/folders/1TXDr_ZeRks3fXDQmlIChlwFcDNK5ki4X

4 of them are OK, but in the sentence “moeder sneedt zeven scheve sneden brood”, brood is
mispronounced.

kind regards,
Hugo

1 Like

Something cool I realized I could do this morning: https://drive.google.com/file/d/1PQneOLgfIyHqACsNj4x3FT1_Ypnuy6w0/view?usp=sharing

This is the rdh Dutch voice speaking an (accented) English sentence! Because I use IPA for both English and Dutch phonemes, I created a small mapping file that approximates the 14 or so “missing” phonemes from Dutch. I had to guess on some, but it works as a proof of concept :slight_smile:

So this means we could re-use some of the voices for other languages, until we get native speakers in that language. To get it right, though, I will need help from people who speak both languages. For example, I don’t really know how Dutch folks pronounce the “th” sounds from “thing” and “the”.

I don’t really know how Dutch folks pronounce the “th” sounds from “thing” and “the”

These sounds don’t exist in Dutch

kind regards,
Hugo

I substituted them with “s” and “z” sounds as a guess :man_shrugging:

What’s neat is that you could approximate a very specific accent with this approach.

Dutch people starting to learn English often mispronounce the “th” of “thing” as a plain “t” and the “th” of “the” as a “d”.

kind regards,
Hugo
p.s. started trimming the phrases, still 1300 to go…

1 Like

Much appreciated :slight_smile: I’ll get your model in the queue as soon as I get the files!

The first Dutch voice for Larynx is ready!

Special thanks to @rdh for donating his voice :clap:

It’s easiest to check out with Docker:

$ docker run -it -p 5002:5002 \
     --device /dev/snd:/dev/snd \
     rhasspy/larynx:nl-rdh-1

Then visit http://localhost:5002 to test it out :slight_smile:

You can use this from Rhasspy or Home Assistant by changing the run command slightly:

$ docker run -it -p 59125:5002 rhasspy/larynx:nl-rdh-1

Now you can tell Rhasspy/HomeAssistant that you’re using a MaryTTS server and point it to http://localhost:59125 (usually the default).

2 Likes

Loving it so far! :smile: Enormous thanks to @synesthesiam & @rdh

Just a few remarks, I don’t know if these are typical remarks that need manual finetuning.

Written numbers don’t come out well, 6 uur 46 vs. zes uur zesenveertig.
Example: GetTime intent

Some small things like OK is not correctly pronounced. However if you input “okee” the pronunciation is just fine.

For things like numbers and dates you should probably preprocess your text with something like Lingua Franca to convert them to words that are pronounceable by the TTS.

There are some undocumented features I’m still experimenting with, but I agree that in general a separate library should be used. Some of the features that are in there but disabled for now:

  • Currency recognition
    • “$100.12” (sort of works now)
  • Number types
    • “1_ordinal” becomes “first” in English
    • “1902_year” becomes “nineteen oh two” in English
  • Alternative pronunciations
    • “read_1” and “read_2” are pronounced like “red” and “reed” respectively

I also have the ability to list abbreviations for a language that are automatically expanded. I’ve got a list for English, like mr -> mister, but I don’t know any for Dutch.

Happy to help and expand on those lists.
If I remeber correctly Mycroft has something like a collaborative system on their website.
(translate.mycroft.ai)

I suppose we could do something similar with just a github directory per language and documentation on what is needed for completing a language.

1 Like

How should I cope with the following issue?
In the trimming phase of the program, it happens I hear a phrase being pronounced in a way that I don’t found 100% OK, but as I don’t know whether I recorded it twice, I accept it anyway. But then I notice there is indeed a better version. How can I find/delete the first version (without going through all phrases once more)?

The WAV files are all named <id>_<timestamp>.wav where id is from the prompts file. So just open that up and search for the text. Then, take the id and find all WAV files that start with it.

@synesthesiam No words, thank you upfront for all the relentless effort, again :clap:

I tried to set it up on an Intel NUC that acts as a Rhasspy server running Ubuntu 18.10 and the webserver perfectly loads, but when I try any word, e.g. oog (=eye), I get the following message:

Error: Failed to fetch Different browsers give a similar error message.

After that, the Docker container just crashes and nothing specific is shown in the output. It seems to go wrong when it tries to invoke the API at http://<ip>:59125/api/tts?text=oog&phonemes=false

Trying to invoke it directly using Postman gives the same behavior.

Let me know if I can help you figure this out and I’m happy to assist.

1 Like

You’re welcome :slight_smile:

Hmmm…this seem to work for me. Maybe I’m doing something different? This is on an x86_64 laptop:

$ docker run -it -p 59125:5002 rhasspy/larynx:nl-rdh-1

and then in a separate tab:

$ curl -X GET --output /tmp/test.wav 'http://localhost:59125/api/tts?text=oog'

When I aplay /tmp/test.wav it plays just fine.

In case it makes a difference:

$ docker --version
Docker version 18.09.3, build 774a1f4

Thoughts?

For those who want to use this in Hass.io, there is an add-on available now! It even works on the Raspberry Pi (super slow, but has a cache).

I wish :blush:

Doing the exact same thing as you gives the same result, the laryx container stops without a message. This is the output from cur:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (52) Empty reply from server

Docker for me is a version higher at Docker version 19.03.6, build 369ce74a3c. I also tested it on a brand new alpine VM and that has the same behavior.

Not sure what to test, but if somebody has a clue, I’m happy to test things along.

I know it shouldn’t matter, but is there any chance alpine could be causing an issue? Everything is compiled against a Ubuntu base. Docker should hide the differences, but it’s the only thing I can think of.

Another option might be to start the container with --entrypoint bash to get a shell prompt, and then run the ENTRYPOINT command in the Dockerfile manually. Maybe you’ll get an error message when it crashes?

I also encounterd the “empty reply from server” problem while trying to setup the rhasspy/larynx:nl-rdh-1 docker image. I tested the docker image on my laptop and it was working fine. The moment I moved it to my server it stopped working.

I followed the above advice and changed the entrypoint, then ran the ENTRYPOINT command. I got the following error:

Illegal instruction (core dumped)

Googling this message I get mostly tensorflow related problems about having an cpu not supporting an specific extension. I think this is also happening with this docker image.

the supported extensions on my server:

model name : Intel® Atom™ CPU D510 @ 1.66GHz
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts nopl cpuid aperfmperf pni dtes64 monitor ds_cpl tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm dtherm

The supported extensions on my laptop:

model name : Intel® Core™ i7-8550U CPU @ 1.80GHz
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d

This is all about a lack of AVX instructions on many of Intel’s processors (Cores and Xeons have them).

I’ve spent weeks trying to get a non-AVX build of PyTorch to work, with no success. It compiles fine, but AVX instructions sneak in no matter what I do. There are half a dozen cmake variables that are supposed to disable them, but some of the submodules in the projects still use them!

And here’s the kicker: this happens even when compiling on a non-AVX system. So the compiler supports putting CPU instructions into a binary when it can’t even execute them.

If anyone knows of a way to completely block AVX instructions from ending up in a compiled binary, I’d love to know :slight_smile:

I dont compile a lot, so i’m afraid I cant help that much.

The thing I can find is the GCC -march parameter which allows for choosing the target platform of the binary.

   -march=cpu-type
       Generate instructions for the machine type cpu-type.  In contrast to -mtune=cpu-type, which merely tunes the generated code for the specified cpu-type, -march=cpu-type allows GCC to generate
       code that may not run at all on processors other than the one indicated.  Specifying -march=cpu-type implies -mtune=cpu-type.

       The choices for cpu-type are:

       native
           This selects the CPU to generate code for at compilation time by determining the processor type of the compiling machine.  Using -march=native enables all instruction subsets supported by
           the local machine (hence the result might not run on different machines).  Using -mtune=native produces code optimized for the local machine under the constraints of the selected
           instruction set.

       x86-64
           A generic CPU with 64-bit extensions.

       i386
           Original Intel i386 CPU.

       i486
           Intel i486 CPU.  (No scheduling is implemented for this chip.)

       i586
       pentium
           Intel Pentium CPU with no MMX support.
     etc

For the submodules, maybe you need te recompile the whole toolchain without AVX?

I’m using voicerss api which is cloud service though, but dutch sounds really nice on it.With this custom component for home assistant installed, it has even more options than the standard home assistant integration. For a live demo: http://www.voicerss.org/api/demo.aspx

Nice, maybe we can add it to TextToSpeech engines in Rhasspy :slight_smile: