|
From: Reece D. <ms...@go...> - 2010-06-28 23:23:54
|
On 28 June 2010 23:39, Jonathan Duddington <jo...@ta...> wrote: > On 28 Jun, Reece Dunn <ms...@go...> wrote: > >> I now have this building, but running espeak causes a segmentation >> fault > >> with $PLATFORM=big_endian > > I may be a endian compatibility problem with the data. Unfortunately I > am not able to test on a big-endian processor here. Actually, that step is not needed as the platform is actually little endian (64-bit Intel i7): platforms/big_endian/espeak-phoneme-data espeak-data-local espeak-data-local espeak-data-local/phondata-manifest Host seems to be little-endian .. I am defaulting to that so that the makefile will work -- I would get errors if PLATFORM is not defined. > The little-endian data in espeak-data in the eSpeak download > (specifically espeak-data/phondata,phonindex,phontab) is wrong for a > big-endian processor. Either you must re-compile the data using > espeakedit (which I think you have done) or use a program > 'platforms/big_endian/espeak-phoneme-data' in the eSpeak-source > download to convert it. So you don't need to run espeak-phoneme-data if you run espeakedit? Q: Do you need to run espeakedit to construct the espeak-data, or is it sufficient to use what is in the svn repository? >> 0x00007ffff7867286 in CalcLengths (tr=0x614560) at setlengths.cpp:751 >> 751 pitch_start = p->pitch1 >> ((p->pitch2-p->pitch1)*pitch_env[0])/256; > > What's the immediate cause of the segfault? What's the value of > variable 'env2' before the segfault (you could use a printf() to get > its value). I get: ----- 8< ----- env2 = 1 env2 = 105 Segmentation fault ----- >8 ----- > How did you run eSpeak? Did you use a command such as: > > espeak -v en "Hello world" > ? > Which voice (eg. 'en') did you use? $ espeak -v en hello env2 = 1 env2 = 105 Segmentation fault $ espeak -v en-us hello Bad voice option: option 12 1 Unknown phoneme table: 'en_us' env2 = 1 env2 = 105 Segmentation fault $ espeak -v es hello env2 = 1 env2 = 1 $ espeak -v de hello env2 = 101 Segmentation fault So es (and possibly others) are ok, but en, en-us and de are not. >> This is with: > >> espeak-data-local: espeak-phoneme-data espeak-data >> rm -rf espeak-data-local >> cp -a $(HOME)/espeak-data espeak-data-local >> platforms/$(PLATFORM)/espeak-phoneme-data espeak-data-local >> espeak-data-local espeak-data-local/phondata-manifest >> mkdir -p espeak-data-local/mbrola >> mkdir -p espeak-data-local/mbrola_ph >> mkdir -p espeak-data-local/soundicons >> mkdir -p espeak-data-local/voices/test >> rm -rf espeak-data-local/dictsource >> rm -rf espeak-data-local/phsource >> rm -rf espeak-data-local/phondata-manifest >> ----- 8< ----- > >> to generate the espeak-data directory (from the content of >> epeak-data-local, with $PLATFORM=big_endian). > > I'm sorry, but I don't understand what this means. I apologise for not making this clear. I am copying voices, phsource and dictsource to ~/espeak-data. Then I am building the voices using espeakedit. I am then copying the built voices to ./espeak-data-local and running the platform's espeak-phoneme-data on it. I am then making directories to match what directories are present in the Ubuntu espeak-data package (probably not necessary) and removing the sources (not strictly necessary, but keeps the installed espeak-data directory cleaner). > Does eSpeak pick up your data from $HOME/espeak-data which has been > compiled or converted for big-endian? >From an installed version that has been through `espeakedit --compile` and `espeak-phoneme-data` (installed to /usr/share/espeak-data). - Reece |