Some massive pruning of the rsynth codebase. Hopefully I haven't removed

anything that was necessary.

Changed AtariVox code to be a compile-time option, and integrated rsynth
code into the 'Stella build' style, with a module.mk file.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1112 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2006-06-11 21:49:10 +00:00
parent 815a111b25
commit 758a4ed3ff
76 changed files with 167 additions and 21383 deletions

View File

@ -13,7 +13,7 @@
## See the file "license" for information on usage and redistribution of
## this file, and for a DISCLAIMER OF ALL WARRANTIES.
##
## $Id: Makefile,v 1.25 2006-06-11 07:13:19 urchlay Exp $
## $Id: Makefile,v 1.26 2006-06-11 21:49:04 stephena Exp $
##
## Based on code from ScummVM - Scumm Interpreter
## Copyright (C) 2002-2004 The ScummVM project
@ -28,7 +28,7 @@ srcdir ?= .
DEFINES :=
LDFLAGS :=
INCLUDES :=
LIBS := -Lsrc/emucore -lrsynth
LIBS :=
OBJS :=
PROF :=
@ -67,7 +67,6 @@ endif
#######################################################################
EXECUTABLE := stella$(EXEEXT)
RSYNTH = src/emucore/librsynth.a
all: tags $(EXECUTABLE)
@ -93,10 +92,6 @@ MODULES += \
src/gui \
src/common
$(RSYNTH): $(RSYNTH_OBJS)
( cd src/emucore/rsynth && ./configure && make Rsynth/librsynth.a ) && \
cp src/emucore/rsynth/Rsynth/librsynth.a src/emucore
######################################################################
# The build rules follow - normally you should have no need to
# touch whatever comes after here.
@ -113,7 +108,7 @@ DEPDIRS = $(addsuffix /$(DEPDIR),$(MODULE_DIRS))
DEPFILES =
# The build rule for the Stella executable
$(EXECUTABLE): $(OBJS) $(RSYNTH)
$(EXECUTABLE): $(OBJS)
$(LD) $(LDFLAGS) $(PRE_OBJS_FLAGS) $+ $(POST_OBJS_FLAGS) $(LIBS) $(PROF) -o $@
distclean: clean

24
stella/configure vendored
View File

@ -27,6 +27,7 @@ _build_joystick=yes
_build_cheats=yes
_build_static=no
_build_profile=no
_build_atarivox=yes
# more defaults
_ranlib=ranlib
@ -265,6 +266,8 @@ Optional Features:
--disable-joystick
--enable-cheats enable/disable cheatcode support [enabled]
--disable-cheats
--enable-atarivox enable/disable AtariVox support [enabled]
--disable-atarivox
--enable-shared build shared binary [enabled]
--enable-static build static binary (if possible) [disabled]
--disable-static
@ -280,8 +283,8 @@ Optional Libraries:
--with-sdl-prefix=DIR Prefix where the sdl-config script is installed (optional)
--with-nasm-prefix=DIR Prefix where nasm executable is installed (optional)
--disable-nasm disable assembly language optimizations [autodetect]
# --with-nasm-prefix=DIR Prefix where nasm executable is installed (optional)
# --disable-nasm disable assembly language optimizations [autodetect]
--x-libraries Path to X11 libraries [${X_LIBS}]
@ -312,6 +315,8 @@ for ac_option in $@; do
--disable-joystick) _build_joystick=no ;;
--enable-cheats) _build_cheats=yes ;;
--disable-cheats) _build_cheats=no ;;
--enable-atarivox) _build_atarivox=yes ;;
--disable-atarivox) _build_atarivox=no ;;
--enable-zlib) _zlib=yes ;;
--disable-zlib) _zlib=no ;;
--enable-png) _png=yes ;;
@ -739,6 +744,14 @@ else
echo
fi
if test "$_build_atarivox" = yes ; then
echo_n " AtariVox support enabled"
echo
else
echo_n " AtariVox support disabled"
echo
fi
if test "$_build_static" = yes ; then
echo_n " Static binary enabled"
echo
@ -770,6 +783,7 @@ DBG="$SRC/debugger"
DBGGUI="$SRC/debugger/gui"
YACC="$SRC/yacc"
CHEAT="$SRC/cheat"
ATARIVOX="$SRC/emucore/rsynth"
INCLUDES="-I$CORE -I$CORE/m6502/src -I$CORE/m6502/src/bspf/src -I$COMMON -I$GUI"
@ -882,6 +896,12 @@ if test "$_build_cheats" = yes ; then
INCLUDES="$INCLUDES -I$CHEAT"
fi
if test "$_build_atarivox" = yes ; then
DEFINES="$DEFINES -DATARIVOX_SUPPORT"
MODULES="$MODULES $ATARIVOX"
INCLUDES="$INCLUDES -I$ATARIVOX"
fi
if test "$_build_profile" = no ; then
_build_profile=
fi

View File

@ -13,7 +13,7 @@
// See the file "license" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//
// $Id: SpeakJet.cxx,v 1.1 2006-06-11 07:13:19 urchlay Exp $
// $Id: SpeakJet.cxx,v 1.2 2006-06-11 21:49:04 stephena Exp $
//============================================================================
#include "SpeakJet.hxx"
@ -160,4 +160,3 @@ const char *SpeakJet::ourPhonemeTable[] = {
"p", // 198 PE People, Computer
"p" // 199 PO Paw, Copy ???
};

View File

@ -13,7 +13,7 @@
// See the file "license" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//
// $Id: SpeakJet.hxx,v 1.1 2006-06-11 07:13:19 urchlay Exp $
// $Id: SpeakJet.hxx,v 1.2 2006-06-11 21:49:04 stephena Exp $
//============================================================================
#ifndef SPEAKJET_HXX
@ -75,16 +75,14 @@
anyway).
@author B. Watson
@version $Id: SpeakJet.hxx,v 1.1 2006-06-11 07:13:19 urchlay Exp $
@version $Id: SpeakJet.hxx,v 1.2 2006-06-11 21:49:04 stephena Exp $
*/
#include "bspf.hxx"
extern "C" {
#include <SDL.h>
#include <SDL_thread.h>
#include "rsynth/rsynth.h"
}
class SpeakJet
{

View File

@ -1 +0,0 @@
yes

View File

@ -1,741 +0,0 @@
Change 2707 on 2003/07/06 by nick@llama
SuSE 8.2 and gcc-3.* support
Mainly adding -fno-scrict-aliasing and removing -Werrors (for now)
Change 2636 on 2003/01/08 by nick@nickwork
Some tidy up on RedHat 7.1
Change 2635 on 2003/01/07 by nick@dromedary
Depends on Audio::Data
Change 2630 on 2003/01/05 by nick@dromedary
Decouple dict (and hence db routines) from rest of
text-to-phones stuff.
Change 2629 on 2003/01/05 by nick@dromedary
Restore ability to make CC=g++
Change 2628 on 2003/01/05 by nick@dromedary
Perl bindings for librsynth.a
Change 2627 on 2003/01/05 by nick@dromedary
Move Elements.pm under perl Rsynth dir
Change 2626 on 2003/01/04 by nick@dromedary
Nearly there - restructure once more to make
a usable library at two levels - text and phonetics
Change 2625 on 2003/01/04 by nick@dromedary
More cleanup of obsolete files.
Change 2624 on 2003/01/04 by nick@bactrian
Typo in ansi-izeing
Change 2623 on 2003/01/04 by nick@dromedary
Moderernize autoconf stuff
Change 2622 on 2003/01/04 by nick@dromedary
Cleanup and move things about so distribution
isn't full of my junk
Change 2621 on 2003/01/03 by nick@dromedary
More C++ isms and memory leak fixes.
Change 2620 on 2003/01/03 by nick@dromedary
More pickyness from build with CC=g++
Change 2619 on 2003/01/03 by nick@dromedary
More API cleanup and portability.
Change 2618 on 2003/01/03 by nick@bactrian
Correct dependancies
Change 2617 on 2003/01/03 by nick@dromedary
Lost edit
Change 2616 on 2003/01/03 by nick@dromedary
Re-structure API to remove most of the globals
(Also re-indent.)
Change 2615 on 2003/01/03 by nick@dromedary
Comments etc. after amp_adj changes.
Change 2614 on 2003/01/03 by nick@dromedary
Remove sops to K&R C - this is 21st century.
Change 2613 on 2003/01/03 by nick@dromedary
Move amp adjsutments into Elements.def
Convert 'an' to nasal fraction.
Loose 'a1' as it never does anything in cascade scheme.
Change 2612 on 2003/01/03 by nick@dromedary
Collect all dB adjustments of /^a\w+/ paramters into one place.
Change 2611 on 2003/01/02 by nick@dromedary
[E] and [{] seemed to be swapped.
Extraction of F1..F3 from CD is less helpful than expected
very hard to get John and Jill's cardinal vowels to look
right on tkvdgm.
Change 2610 on 2003/01/02 by nick@dromedary
Tweak near-equivalence script, avoid $Id: Change.log,v 1.1 2006-06-11 07:13:19 urchlay Exp $ in phtoelm.def
Change 2609 on 2003/01/02 by nick@dromedary
Re-arange code to allow dominance on a per-paramter basis
Change 2608 on 2003/01/02 by nick@dromedary
Avoid special elements for affricates where lengths of normal
elements sound acceptable.
Loose "QQ" as dummy target element in middle of fricatives.
(Prepare QQ to become [?] when we can do per-parameter rank
targeting.)
Correct av for closure parts of voiced stops.
Change 2607 on 2003/01/02 by nick@dromedary
Read new Elements.def format
Change 2606 on 2003/01/02 by nick@dromedary
Loose dict/ipa strings in favour of one sampa string.
Make font slot short and fill with Unicode.
Change 2605 on 2003/01/02 by nick@dromedary
Re-format without "error in fixed" term now we don't have it.
Change 2604 on 2003/01/02 by nick@dromedary
Drop 'stdy' slot in element data and use stdy*(1-prop) instead.
(Having established that making all data was like that did
not make things worse.)
Change 2603 on 2003/01/01 by nick@dromedary
Prune the #if 0 code now that new voice scheme and removal
of 1st difference seems to work.
Also re-instate long mis-understood 'avc' parameter.
Change 2602 on 2003/01/01 by nick@dromedary
Remove some entries for words written the same but
with different pronounciation when latter cause poblems
e.g. we want gin to be [dZIn] not [gIn] (Latter seems wrong)
and put to be [pUt] not golfer's [pVt].
Change 2601 on 2002/12/31 by nick@dromedary
More oddities - none of stops "stop" - weird - added
no-source and external duration to KY GY and seems to help
(Do same for [bptd]?)
Change 2600 on 2002/12/31 by nick@dromedary
Velars [kg] had no stimulus on in/out - no wonder they were weak!
Change 2598 on 2002/12/30 by nick@dromedary
"Restore" naive "f0 decline with stress pulses" approach for
un-assisted text-to-speech. Festival as a front end is
of course much better, but this restores stand-alone "prosody"
element.
Change 2597 on 2002/12/30 by nick@dromedary
Gate more messages with -v (verbose) switch
Change 2596 on 2002/12/30 by nick@dromedary
Festival binding.
Change 2595 on 2002/12/29 by nick@dromedary
Mend ability to say text files. Reset dumb F0 scheme on ',' etc.
as well as end of sentence.
Add a mode to use .pho file F0 data but ignore its duration data.
Correct pronounciation of 'diphones' in beep (dip-hones indeed!).
Change 2594 on 2002/12/28 by nick@dromedary
Another try at ms -> num-of-frames interpolation.
(Goal is to avoid non-stop elements which vanish as they
get 0 time.)
Change 2593 on 2002/12/28 by nick@dromedary
General overhaul of Elements.def removing duplicates
and correcting accidentally identical elements.
Change 2591 on 2002/12/28 by nick@dromedary
"Correct" fix contribution term
Change 2590 on 2002/12/28 by nick@dromedary
More info in and tidier plot file.
Turn on parameter smoothing by default.
Change 2589 on 2002/12/28 by nick@dromedary
Turn of debug :-(
Change 2588 on 2002/12/28 by nick@dromedary
Improve mbrola .pho file interpollation:
- allow length reduction for non stops
- invent new attribute 'stl' (stop locus) to mark in/out
elements of stops so only central part is marked as stp
(with above this means in/put can change length).
- Remove specific [A:] etc. entries in phtoelem.def and handle
':' in phtoelm.c
Change 2587 on 2002/12/28 by nick@dromedary
At least attempt all vowels on IPA diagram.
(Missing ones F1,F2,F2 from IPA CD.)
Change 2586 on 2002/12/27 by nick@dromedary
Better error messages for phone translation problems
Change 2585 on 2002/12/27 by nick@dromedary
Experimental "rsc" resonator to lift centre of spectrum.
Inspired by frequent occurance of such in LPC spectra from tkscope.
Change 2584 on 2002/12/27 by nick@dromedary
Tweak [{] based on tkscope analysis of IPA CD
Change 2581 on 2002/12/27 by nick@dromedary
Make 1st half of [D] same as 2nd half (looks like an
old experiment that got left in.
Change 2580 on 2002/12/27 by nick@dromedary
Try waiting longer for /dev/dsp
Change 2579 on 2002/12/24 by nick@dromedary
First pass at adding Copyright and LGPL/GPL notices.
Change 2576 on 2002/12/23 by nick@dromedary
Switch to piece-wise linear/quadratic voicing waveform.
Change 2575 on 2002/12/23 by nick@dromedary
Add "Medi" (Welsh woman's christian name) to dict for personal
reasons ;-)
Change 2574 on 2002/12/23 by nick@dromedary
#if to switch between taking 1st diff of output + lowpass
or not doing either (supposed to be equivalent).
The non-diff case should make it easier to inject specific
voice waveform.
Change 2573 on 2002/12/23 by nick@dromedary
Some light tidying
Change 2570 on 2002/12/22 by nick@dromedary
Update comments, experiment with pitch-sync cascade update
Change 2564 on 2002/12/19 by nick@dromedary
Tune [N] based on tkscope analysis of "Sounds of IPA" CD
- match f4/f5/f6 to John Well's and then adjust [N]'s fn..f3
and bandwidths till it looks best.
Change 2563 on 2002/12/19 by nick@dromedary
Back port the try severl times tweak
Change 2550 on 2002/12/15 by nick@dromedary
SAMPA corrections for sylabic consonants
Change 2549 on 2002/12/15 by nick@dromedary
Update/add SAMPA labels for Klatt/MITalk phones
Change 2548 on 2002/12/12 by nick@dromedary
Add SAMPA IPA Unicode HTML and script for manipulating it.
Change 2547 on 2002/12/10 by nick@dromedary
Place holders for high central vowels [1] and [}]
Change 2545 on 2002/12/09 by nick@dromedary
Add x-sampa [4] [K] [?]
Change 2544 on 2002/12/04 by nick@dromedary
Restore speed from -S
- some clicks seem to be "rapid" changes in f2
i.e. go away with more steps as in -S 10 -m 1
Change 2543 on 2002/12/04 by nick@dromedary
Adjust global gain to avoid clipping on /Q/
Change 2542 on 2002/12/03 by nick@dromedary
Add check for f1-f2-f3-f4 spacing and correct problems
it showed
- raise fixed f4 above common f3 in several elements
- move f1/f2 of /A/ to rp values as perl tkvdgm
Update tkvdgm to get data from Elements.def via Elements.pm
Change 2541 on 2002/11/28 by nick@dromedary
Clean up tracks of /N/ - still not right (sounds too much like /n/)
Change 2540 on 2002/11/28 by nick@dromedary
Amplitude investigations - plot avg power
Allow amp/db fudge factor experiments.
Change 2539 on 2002/11/26 by nick@dromedary
Compute and plot output amplitude.
Change 2538 on 2002/11/25 by nick@dromedary
Tweak duration code with comment till we are clearer
about effects to shortened durations on the parameter
interpollation.
Change 2537 on 2002/11/25 by nick@dromedary
Support say -f whatever.pho
where whatever.pho is a mbrola phone/duration/f0 file.
Interpolation between durations in ms and frames is
still a little rough. Also have some issues when specified
duration is less than duration of stops (and maybe some others.)
Change 2536 on 2002/11/24 by nick@dromedary
end-of-weekend checkin
Change 2535 on 2002/11/24 by nick@dromedary
Some initial mbrola compatibility tweaks
Change 2528 on 2002/11/19 by nick@dromedary
Separate voice and parameter data for plotting
Change 2527 on 2002/11/19 by nick@dromedary
Parameter track plotting
Change 2526 on 2002/11/18 by nick@dromedary
Start reconciling element params and synth params
Change 2525 on 2002/11/18 by nick@dromedary
Start of cleanup removing uses of old Klatt code
Change 2524 on 2002/11/17 by nick@dromedary
Allow study of old synth
Change 2522 on 2002/11/17 by nick@dromedary
Overhaul voice generation - amplitude and basic sound
should now be sample rate independant.
Change 2521 on 2002/11/13 by nick@dromedary
Update comments, play with sox stats
Change 2519 on 2002/11/08 by nick@dromedary
Show phone table
Change 2503 on 2002/10/05 by nick@bactrian
Update to modern linux's math.h
Change 2222 on 2001/05/22 by nick@dromedary
Clean up f1 too close to f2, f2 to f3 etc.
Change 2213 on 2001/04/30 by nick@dromedary
Honour gain terms in impulse response output.
Change 2212 on 2001/04/24 by nick@pluto
Boost af gain (i.e. stop * 0.25),
move [k] near its voiced analogue [g] and apply
same changes.
Change 2211 on 2001/04/24 by nick@pluto
[g] edits
- av for in/out is low, av for 'nail' is high.
- silence/burst
Change 2210 on 2001/04/24 by nick@pluto
Support for getting impluse response from frame parameters.
Change 2209 on 2001/04/24 by nick@pluto
Apply Klatt f1..f3, b1..b3 to [g]
Change 2208 on 2001/04/24 by nick@pluto
Mark fmtelm as executable.
Change 2207 on 2001/04/23 by nick@dromedary
Add element trace.
Change 2206 on 2001/04/23 by nick@dromedary
Add klatt mapping table. Order parms as perl MITalk book by default.
Change 2205 on 2001/04/23 by nick@dromedary
Rename variables to match parameter struct slot names.
Change 2204 on 2001/04/20 by nick@bactrian
Modern nas needs -lXt
Change 2202 on 2001/04/17 by nick@dromedary
A few systematic adjustments
Change 2201 on 2001/04/17 by nick@dromedary
Perl version of Elements.def read/write prior to systematic changes.
Change 2200 on 2001/04/17 by nick@dromedary
Finish off the basic osay/say nsynth/opsynth decoupling.
Change 2199 on 2001/04/17 by nick@dromedary
Branch Elements
Change 2198 on 2001/04/17 by nick@pluto
Makefile tweak to allow nasay to build.
Make some of checking Linux only.
Change 2197 on 2001/04/16 by nick@dromedary
More flexible sorting.
Change 2195 on 2001/04/16 by nick@dromedary
Byteswapping issues in au_file
Change 2194 on 2001/04/16 by nick@dromedary
Bounds checking.
A hack for 8kHz issue, seems skirt of r5c is aliasing ?
Change 2193 on 2001/04/16 by nick@dromedary
Fix gross C->perl->C mis-re-translation in dB routine.
Change 2191 on 2001/04/15 by nick@dromedary
Start of new synth.
Change 2190 on 2001/04/15 by nick@dromedary
Tweak parameters-for-plot dump
Change 2189 on 2001/04/14 by nick@dromedary
Filter efficency and use new features in tkanal.
Change 2186 on 2001/04/13 by nick@dromedary
More features for analysing rsynth element tables.
Change 2113 on 2001/01/27 by nick@dromedary
Work better on modern linux (SuSE6.4)
Change 1536 on 1999/11/27 by nick@bactrian_nt
Win32 fixes
Change 1496 on 1999/11/09 by nick@bactrian
Cleanup alignment generation process
Change 1481 on 1999/09/27 by nick@pluto
Remove near duplicate file
Change 1480 on 1999/09/27 by nick@pluto
Inherit minor tweak on work version of txt710.dat
Change 1478 on 1999/09/26 by nick@bactrian
Configure searches /usr/local on linux where gcc suggests /usr
as prefix.
Bug fix in db API.
Change 1476 on 1999/09/24 by nick@bactrian
Builds to use /dev/dspW (16 bit) under OSS
Change 1475 on 1999/09/22 by nick@bactrian
Correct gdbm abstraction
Change 1474 on 1999/09/22 by nick@bactrian
Update autoconf versions, config.guess etc.
Change 1455 on 1999/09/02 by nick@bactrian
On-the-road Monterey/San Jose/Dallas changes
Change 1316 on 1999/05/14 by nick@ni-s
Update manifest
Change 1226 on 1999/03/12 by nick@pluto
Do not skip source for of Makefile, config.h etc.
Change 1224 on 1999/03/11 by nick@pluto
MANIFEST stuff
Change 1215 on 1999/02/20 by nick@camel
Fixup for Win32
Change 1214 on 1999/02/20 by nick@ni-s
Add Makefile
Change 1213 on 1999/02/20 by nick@ni-s
Add "align" stuff
Change 1205 on 1999/01/23 by nick@camel
Update for VC++6.0
Change 1204 on 1999/01/23 by nick@camel
Add VC++ package
Change 898 on 1998/06/02 by nick@ni-s
F/B splitting of text-only trie works
Change 895 on 1998/06/01 by nick@ni-s
Re-start from degenerate case (with bugs...)
Change 893 on 1998/05/31 by nick@ni-s
Bad splits break re-finding
Change 892 on 1998/05/30 by nick@ni-s
Don't match if cannot split both word and phon
Change 891 on 1998/05/30 by nick@ni-s
Basic splitting working, problem with silly partition on
Dutchmen/Dutchman
Change 890 on 1998/05/30 by nick@ni-s
Separate functions for forward/backward insert
Change 889 on 1998/05/30 by nick@ni-s
Split functions
Change 888 on 1998/05/30 by nick@ni-s
Dual disjoint trees
Change 887 on 1998/05/29 by nick@pluto
Fridays changes - try stack of nodes
Change 886 on 1998/05/28 by nick@pluto
End of Thur - backward match stuff
Change 885 on 1998/05/28 by nick@pluto
After re-structure to allow guess/build
Change 884 on 1998/05/28 by nick@pluto
End of Wednesday
Change 883 on 1998/05/26 by nick@ni-s
dtree seems to build
Change 882 on 1998/05/26 by nick@ni-s
Missed file
Change 881 on 1998/05/26 by nick@pluto
Add autoconf input file, remove Makefile as it is built
Change 880 on 1998/05/26 by nick@pluto
Support db as well as gdbm, update to latest autoconf
Change 879 on 1998/05/25 by nick@ni-s
Pre s-rule messing
Change 878 on 1998/05/25 by nick@ni-s
Added consonat rules as far as 's' from LPD side-bars
Change 877 on 1998/05/25 by nick@ni-s
Re-structure for stand-alone guess for debug
Change 876 on 1998/05/25 by nick@ni-s
Snapshot more rule changes
Change 875 on 1998/05/25 by nick@ni-s
Switched text.c rules to lower case
Change 874 on 1998/05/25 by nick@ni-s
Pre-downcase
Change 873 on 1998/05/24 by nick@ni-s
More rule tweaks
Change 872 on 1998/05/24 by nick@ni-s
1st round of rule-fixups by cross check with CUVOALD
Change 870 on 1998/05/23 by nick@ni-s
Open as ktext
Change 869 on 1998/05/23 by nick@ni-s
Add integer version of synth
Change 868 on 1998/05/23 by nick@ni-s
Wilbur's pitch floor tweak.
Change 867 on 1998/05/23 by nick@camel
Builds under mingw32
Change 866 on 1998/05/23 by nick@camel
Works on Win32 (watch the volume...)
Change 865 on 1998/05/23 by nick@camel
Links under borland
Change 864 on 1998/05/23 by nick@camel
Gross fixup
Change 863 on 1998/05/23 by nick@camel
Win32-side fixup
Change 861 on 1998/05/23 by nick@ni-s
Raw timidity win32 stuff
Change 860 on 1998/05/23 by nick@ni-s
gcc 2.8 fussyness
Change 858 on 1998/05/23 by nick@ni-s
Import /home/nick/speak/rsynth
Change 857 on 1998/05/23 by nick@ni-s
Import /home/nick/speak/rsynth-2.0
Change 856 on 1998/05/23 by nick@ni-s
Import /tmp/rsynth
Change 855 on 1998/05/23 by nick@ni-s
Version 1.99
Change 854 on 1998/05/23 by nick@ni-s
"ntalk" May 7 1994
Change 853 on 1998/05/23 by nick@ni-s
Version c. 'Feb 24 1994' rsynth.tar.Z
Change 852 on 1998/05/23 by nick@ni-s
Version "rsynth_cuvolad.tar.gz"
Change 851 on 1998/05/23 by nick@ni-s
Version released as 'nsynth.tar.gz'
Change 850 on 1998/05/23 by nick@ni-s
Original 'synth.tar.gz'

View File

@ -1,169 +0,0 @@
$Id: INSTALL,v 1.1 2006-06-11 07:13:20 urchlay Exp $
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.
The file `configure.in' is used to create `configure' by a program
called `autoconf'. You only need `configure.in' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source directory by typing `make clean'. To also remove the files
that `configure' created (so you can compile the package for a
different kind of computer), type `make distclean'.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
this:
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
Or on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Using a Different Build Directory
=================================
You can compile the package in a different directory from the one
containing the source code. Doing so allows you to compile it on more
than one kind of computer at the same time. To do this, you must use a
version of `make' that supports the `VPATH' variable, such as GNU
`make'. `cd' to the directory where you want the object files and
executables to go and run the `configure' script. `configure'
automatically checks for the source code in the directory that
`configure' is in and in `..'.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on. Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:
CPU-COMPANY-SYSTEM
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.
If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Operation Controls
==================
`configure' recognizes the following options to control how it
operates.
`--cache-file=FILE'
Save the results of the tests in FILE instead of `config.cache'.
Set FILE to `/dev/null' to disable caching, for debugging
`configure'.
`--help'
Print a summary of the options to `configure', and exit.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made.
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--version'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`configure' also accepts some other, not widely useful, options.

View File

@ -1,114 +0,0 @@
COPYING GPL
COPYING.LIB LGPL
Change.log What has happened
Elements.def Definition of elements
INSTALL How to install
MANIFEST This file
MANIFEST.SKIP Things that don't get included here
Makefile.in Pre configure Makefile
OldChanges Changes from RCS days
PORTING Outline of audio driver needs
kmap Phone mappings
README Please do ;-)
Revision.c Clunky way of setting revision
Rsynth/Audio.pm Perl API to this
Rsynth/Audio.xs Perl C bindings
Rsynth/Elements.pm Perl access to Elements
Rsynth/Makefile.PL Perl API build
Rsynth/t/elem.t Test low level Perl API
Rsynth/t/phones.t Test data
Rsynth/phtoelm.def Phone to element data
Rsynth/typemap Perl/C type conversion
Sampa.pm Perl code to read sampa.htm
aufile.c Sun .au file writer
aufile.h Sun .au file writer
charset.c Locale and charcter set choices
charset.h
config.guess configure support
config.h.in configure support
config.sub configure support
config/NeXTplay.c
config/config.win32
config/dummyplay.c
config/freebsdplay.c
config/hpuxplay.c
config/alsaplay.c New ALSA Audio driver
config/ossplay.c OSS Audio driver
config/make_dist
config/mmsystem.h
config/naplay.c NAS Audio Driver
config/pipeplay.c
config/sgiplay.c
config/sunplay.c
config/sunplay_mm.c
config/win32play.c
configure Generated build script
configure.in configure support
darray.c Dynamic array C code
darray.h
dat2au Perl script for something ...
dbif.h DB/GDBM abstraction for dictionary
deutsch.c Some support for german
deutsch.h Some support for german
dict.c Dictionary code
dict.h
dlookup.c Dictionary lookup command line application
efix
elements.c Element code
elmdgm Vowel parameter display/edit tool
english.c Letter to Sound rules
english.h
euler.pho MBrola style pho file ( say -f euler.pho )
euler.txt Plain text of above ( say < euler.txt )
festival/.festivalrc Copy to ~/.festivalrc to enable rsynth as a voice for festival
festival/lib/rsynth.scm Festival Hackery
festival/lib/voices/english/rsynth_br_f/festvox/rsynth_br_f.scm
festival/lib/voices/english/rsynth_br_f/mrpa-sampa
festival/lib/voices/english/rsynth_br_m/festvox/rsynth_br_m.scm
festival/lib/voices/english/rsynth_br_m/mrpa-sampa
fmtelem Re-format Elements.def
fmtfeat Re-format phfeat.h
fsay Use via festival
getarg.c Command line parser
getargs.h
getrev Build assist script
guess.c Command line tool to test letter to sound rules
holmes.c Element parameter interpolation
hplay.h Audio driver API
hpuxcc.doc
iam.txt Test data
install.sh configure support
l2u.c uLaw conversion tables
l2u.h
lang.h
ldbdict perl dump of DB dictionary
ldict perl dump of GDBM dictionary
mbrola.txt Test data
mkdictdb.c Build DB/GDBM dictionary from CMU style file
naplay.c NAS audio driver
opsynth.c Core synth
phfeat.h Phoneme features
phones.c Phoneme table
phones.def Guts of phoneme table
phones.h
phrases.txt Test data
phtoelm.c Phoneme to element layer
phtoelm.h
plotparm.h
prune_elm Perl script that for Elements.def
rsynth.h Main header
sampa.htm SAMPA IPA tables as UTF-8 HTML
sample Test data
say.c Algrorithmic conversion of numbers etc.
say.h
saydate Demo
saymain.c main() of ./say application
showphone perl/Tk app to display phones.def
text test data
text.c Letter to sound driver
text.h
tkvdgm Old perl/Tk app to show vowel diagram from formants
tracks gnuplot dumpped interpollated parameters
trie.c Trie lookup code
trie.h
useconfig.h configure support

View File

@ -1,21 +0,0 @@
[%~]$
\.[oa]$
\.d$
\.(bak|bck|save|old|db|plot|dat|bs|au)$
\b(RCS|CVS|comments|Solaris|makefiles|SunOS.*)/
\b[ab]Dict$
\b(align|710)\b
text710\.
\bcheck\b
(sampa|dist|misc|voice|dict|anal|attic|MITalk|mappings|Rsynth/blib)/
\bconfig\.h$
\brulebuild
\brulecheck
(GNU)?[Mm]akefile$
hplay\.c
Rsynth/Audio\.c
pm_to_blib
^(say|nasay|rsynth|mkdictdb|dlookup|guess|mid|small|tiny)$
config\.(cache|status|log)$
autom4te.cache/.*
^phtoelm.def

View File

@ -1,166 +0,0 @@
# $Id: Makefile,v 1.1 2006-06-11 07:13:20 urchlay Exp $
SRCDIR = .
CC = gcc
RANLIB = ranlib
PREFIX = /usr/local
BIN_DIR = $(PREFIX)/bin
LIB_DIR = $(PREFIX)/lib/dict
LDLIBS = -lm -lgdbm -ldb -L/usr/local/lib -lasound
XLIBS = -L/usr/X11R6/lib64 -lXt -L/usr/X11R6/lib64 -lX11 -lnsl
CFLAGS = -g -O2
CPPFLAGS = -I. -I. -I/usr/local/include -I/usr/X11R6/include
DEFS = -DDICT_DIR=\"$(LIB_DIR)\" -DDEFAULT_DICT=\"$(DEFAULT_DICT)\"
PROGS = say mkdictdb dlookup mkdictdb dlookup
ADICT =
BDICT =
BUILD = perlstuff
DICTS =
PERL = /usr/bin/perl
FESTIVAL =
DEFAULT_DICT = b
INSTALL = /usr/bin/ginstall -c
INSTALL_PROG = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
EXTRA_INST = install_perl
MESSAGE = Hello there
LIBRARY = Rsynth/librsynth.a
.c.o :
$(CC) $(CFLAGS) $(CPPFLAGS) -IRsynth $(DEFS) -c -o $@ $<
all :: $(PROGS) $(BUILD)
check :: all perl_check
(./say $(MESSAGE) || ./nasay $(MESSAGE))
SYNOBJ = opsynth.o elements.o holmes.o trie.o phtoelm.o darray.o
PHONOBJ = say.o phones.o text.o english.o deutsch.o charset.o
$(LIBRARY) : $(SYNOBJ) $(PHONOBJ)
$(AR) rc $@ $(SYNOBJ) $(PHONOBJ)
$(RANLIB) $@
SAY_OBJS = $(PHONOBJ) l2u.o aufile.o getarg.o Revision.o dict.o saymain.o
say : $(LIBRARY) $(SAY_OBJS) hplay.o
$(CC) -o $@ $(LDFLAGS) $(SAY_OBJS) $(SYNOBJ) hplay.o $(LIBRARY) $(LDLIBS)
nasay : $(LIBRARY) $(SAY_OBJS) naplay.o
$(CC) -o $@ $(LDFLAGS) $(SAY_OBJS) $(SYNOBJ) naplay.o $(LIBRARY) $(XLIBS) $(LDLIBS)
mkdictdb : mkdictdb.o $(LIBRARY)
$(CC) -o $@ $(LDFLAGS) mkdictdb.o $(LIBRARY) $(LDLIBS)
dlookup : dlookup.o getarg.o $(LIBRARY)
$(CC) -o $@ $(LDFLAGS) dlookup.o getarg.o dict.o $(LIBRARY) $(LDLIBS)
clean ::
if test -f Rsynth/Makefile ; then cd Rsynth && make PERL=$(PERL) clean ; fi
rm -f $(LIBRARY) $(PROGS) $(DICTS) *.o tmp.par core *~ *% ,* .e[cks]1
distclean :: clean
if test -f Rsynth/Makefile ; then cd Rsynth && make PERL=$(PERL) distclean ; fi
rm -f Makefile config.status config.h config.log config.cache hplay.c
hplay.o : hplay.c getargs.h hplay.h
aDict.db : $(ADICT) mkdictdb
LANG=en_US mkdictdb $(ADICT) aDict.db
touch $@
bDict.db : $(BDICT) mkdictdb
LANG=en_GB mkdictdb $(BDICT) bDict.db
touch $@
install : $(PROGS) $(DICTS) $(EXTRA_INST)
mkdir -p $(PREFIX) $(BIN_DIR) $(LIB_DIR)
for f in $(PROGS); do \
$(INSTALL_PROG) $$f $(BIN_DIR); \
done
$(INSTALL) -d $(LIB_DIR)
for f in $(DICTS); do \
$(INSTALL_DATA) $$f $(LIB_DIR); \
done
perl_check :
if test -f Rsynth/Makefile ; then cd Rsynth && make PERL=$(PERL) test ; fi
perlstuff : $(LIBRARY) Rsynth/Makefile.PL
cd Rsynth && $(PERL) Makefile.PL && $(MAKE) PERL=$(PERL)
festival :
install_perl :
cd Rsynth && $(MAKE) PERL=$(PERL) install
install_festival :
phtoelm.def : Rsynth/phtoelm.def
$(INSTALL_DATA) $< $@
# This bit of Makefile only works if GNU make is available
# The classic make version would have `$(SRCDIR)/getrev $(SRCDIR)`
# which does not work as it gets evaluated by 'sh' once we have cd'ed
# elsewhere. GNU make scheme uses := and $(shell...) to evaluate
# REVISION once at Makefile parse time
# It is really only needed by developer
REVISION := $(shell $(SRCDIR)/getrev $(SRCDIR))
distribution:
rm -rf /tmp/rsynth-$(REVISION)
mkdir /tmp/rsynth-$(REVISION)
(cd $(SRCDIR); tar cf - `cat MANIFEST` ) | (cd /tmp/rsynth-$(REVISION); tar xf - )
(cd /tmp; tar cvf - rsynth-$(REVISION) ) | gzip -c > $(SRCDIR)/../rsynth-$(REVISION).tar.gz
disttest :
rm -rf /tmp/rsynth-$(REVISION)
mkdir /tmp/rsynth-$(REVISION)
(cd $(SRCDIR); tar cf - `cat MANIFEST` ) | (cd /tmp/rsynth-$(REVISION); tar xf - )
(cd /tmp/rsynth-$(REVISION); CC=$(CC) configure ; make CC=$(CC) -k check)
#MM Fri Jan 2 11:28:16 2004
aufile.o: aufile.c config.h useconfig.h getargs.h l2u.h hplay.h aufile.h
charset.o: charset.c charset.h
darray.o: darray.c config.h useconfig.h darray.h
deutsch.o: deutsch.c config.h darray.h lang.h say.h deutsch.h
dict.o: dict.c config.h charset.h phones.h phones.def useconfig.h dbif.h \
lang.h darray.h dict.h
dlookup.o: dlookup.c config.h useconfig.h dict.h lang.h darray.h phones.h \
phones.def getargs.h english.h
elements.o: elements.c config.h rsynth.h darray.h trie.h phfeat.h \
Elements.def
english.o: english.c config.h darray.h lang.h say.h charset.h english.h \
phones.h phones.def
getarg.o: getarg.c config.h useconfig.h getargs.h
guess.o: guess.c darray.h charset.h text.h phones.h phones.def lang.h \
english.h say.h
holmes.o: holmes.c config.h useconfig.h rsynth.h darray.h trie.h \
getargs.h plotparm.h hplay.h
hplay.o: hplay.c config.h useconfig.h l2u.h getargs.h hplay.h
l2u.o: l2u.c
mkdictdb.o: mkdictdb.c config.h useconfig.h trie.h darray.h phones.h \
phones.def charset.h dbif.h
opsynth.o: opsynth.c config.h useconfig.h rsynth.h darray.h trie.h \
plotparm.h
phones.o: phones.c config.h phones.h phones.def
phtoelm.o: phtoelm.c config.h useconfig.h rsynth.h darray.h trie.h \
hplay.h phfeat.h phtoelm.def
Revision.o: Revision.c
rulebuild.o: rulebuild.c config.h useconfig.h darray.h lang.h english.h \
phones.h phones.def charset.h text.h say.h
say.o: say.c config.h useconfig.h darray.h rsynth.h trie.h hplay.h dict.h \
lang.h text.h getargs.h phones.h phones.def aufile.h charset.h \
english.h deutsch.h say.h
saymain.o: saymain.c config.h useconfig.h darray.h rsynth.h trie.h \
hplay.h dict.h lang.h text.h getargs.h phones.h phones.def aufile.h \
charset.h english.h deutsch.h say.h
text.o: text.c config.h useconfig.h darray.h phtoelm.h lang.h text.h \
say.h
trie.o: trie.c config.h useconfig.h trie.h

View File

@ -1,145 +0,0 @@
# $Id: Makefile.in,v 1.1 2006-06-11 07:13:22 urchlay Exp $
VPATH = @srcdir@
SRCDIR = @srcdir@
CC = @CC@
RANLIB = @RANLIB@
PREFIX = @prefix@
BIN_DIR = $(PREFIX)/bin
LIB_DIR = $(PREFIX)/lib/dict
LDLIBS = @LIBS@
XLIBS = @XLIBS@
CFLAGS = @CFLAGS@
CPPFLAGS = @CPPFLAGS@
DEFS = -DDICT_DIR=\"$(LIB_DIR)\" -DDEFAULT_DICT=\"$(DEFAULT_DICT)\"
PROGS = @PROGS@
ADICT = @ADICT@
BDICT = @BDICT@
BUILD = @BUILD@
DICTS = @DICTS@
PERL = @PERL@
FESTIVAL = @FESTIVAL@
DEFAULT_DICT = @DEFAULT_DICT@
INSTALL = @INSTALL@
INSTALL_PROG = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
EXTRA_INST = @EXTRA_INST@
MESSAGE = Hello there
LIBRARY = Rsynth/librsynth.a
.c.o :
$(CC) $(CFLAGS) $(CPPFLAGS) -IRsynth $(DEFS) -c -o $@ $<
all :: $(PROGS) $(BUILD)
check :: all perl_check
(./say $(MESSAGE) || ./nasay $(MESSAGE))
SYNOBJ = opsynth.o elements.o holmes.o trie.o phtoelm.o darray.o
PHONOBJ = say.o phones.o text.o english.o deutsch.o charset.o
$(LIBRARY) : $(SYNOBJ) $(PHONOBJ)
$(AR) rc $@ $(SYNOBJ) $(PHONOBJ)
$(RANLIB) $@
SAY_OBJS = $(PHONOBJ) l2u.o aufile.o getarg.o Revision.o dict.o saymain.o
say : $(LIBRARY) $(SAY_OBJS) hplay.o
$(CC) -o $@ $(LDFLAGS) $(SAY_OBJS) $(SYNOBJ) hplay.o $(LIBRARY) $(LDLIBS)
nasay : $(LIBRARY) $(SAY_OBJS) naplay.o
$(CC) -o $@ $(LDFLAGS) $(SAY_OBJS) $(SYNOBJ) naplay.o $(LIBRARY) $(XLIBS) $(LDLIBS)
mkdictdb : mkdictdb.o $(LIBRARY)
$(CC) -o $@ $(LDFLAGS) mkdictdb.o $(LIBRARY) $(LDLIBS)
dlookup : dlookup.o getarg.o $(LIBRARY)
$(CC) -o $@ $(LDFLAGS) dlookup.o getarg.o dict.o $(LIBRARY) $(LDLIBS)
clean ::
if test -f Rsynth/Makefile ; then cd Rsynth && make PERL=$(PERL) clean ; fi
rm -f $(LIBRARY) $(PROGS) $(DICTS) *.o tmp.par core *~ *% ,* .e[cks]1
distclean :: clean
if test -f Rsynth/Makefile ; then cd Rsynth && make PERL=$(PERL) distclean ; fi
rm -f Makefile config.status config.h config.log config.cache hplay.c
hplay.o : hplay.c getargs.h hplay.h
aDict.db : $(ADICT) mkdictdb
LANG=en_US mkdictdb $(ADICT) aDict.db
touch $@
bDict.db : $(BDICT) mkdictdb
LANG=en_GB mkdictdb $(BDICT) bDict.db
touch $@
install : $(PROGS) $(DICTS) $(EXTRA_INST)
mkdir -p $(PREFIX) $(BIN_DIR) $(LIB_DIR)
for f in $(PROGS); do \
$(INSTALL_PROG) $$f $(BIN_DIR); \
done
$(INSTALL) -d $(LIB_DIR)
for f in $(DICTS); do \
$(INSTALL_DATA) $$f $(LIB_DIR); \
done
perl_check :
if test -f Rsynth/Makefile ; then cd Rsynth && make PERL=$(PERL) test ; fi
perlstuff : $(LIBRARY) Rsynth/Makefile.PL
cd Rsynth && $(PERL) Makefile.PL && $(MAKE) PERL=$(PERL)
festival :
install_perl :
cd Rsynth && $(MAKE) PERL=$(PERL) install
install_festival :
phtoelm.def : Rsynth/phtoelm.def
$(INSTALL_DATA) $< $@
@make_dist@
#MM Fri Jan 2 11:28:16 2004
aufile.o: aufile.c config.h useconfig.h getargs.h l2u.h hplay.h aufile.h
charset.o: charset.c charset.h
darray.o: darray.c config.h useconfig.h darray.h
deutsch.o: deutsch.c config.h darray.h lang.h say.h deutsch.h
dict.o: dict.c config.h charset.h phones.h phones.def useconfig.h dbif.h \
lang.h darray.h dict.h
dlookup.o: dlookup.c config.h useconfig.h dict.h lang.h darray.h phones.h \
phones.def getargs.h english.h
elements.o: elements.c config.h rsynth.h darray.h trie.h phfeat.h \
Elements.def
english.o: english.c config.h darray.h lang.h say.h charset.h english.h \
phones.h phones.def
getarg.o: getarg.c config.h useconfig.h getargs.h
guess.o: guess.c darray.h charset.h text.h phones.h phones.def lang.h \
english.h say.h
holmes.o: holmes.c config.h useconfig.h rsynth.h darray.h trie.h \
getargs.h plotparm.h hplay.h
hplay.o: hplay.c config.h useconfig.h l2u.h getargs.h hplay.h
l2u.o: l2u.c
mkdictdb.o: mkdictdb.c config.h useconfig.h trie.h darray.h phones.h \
phones.def charset.h dbif.h
opsynth.o: opsynth.c config.h useconfig.h rsynth.h darray.h trie.h \
plotparm.h
phones.o: phones.c config.h phones.h phones.def
phtoelm.o: phtoelm.c config.h useconfig.h rsynth.h darray.h trie.h \
hplay.h phfeat.h phtoelm.def
Revision.o: Revision.c
rulebuild.o: rulebuild.c config.h useconfig.h darray.h lang.h english.h \
phones.h phones.def charset.h text.h say.h
say.o: say.c config.h useconfig.h darray.h rsynth.h trie.h hplay.h dict.h \
lang.h text.h getargs.h phones.h phones.def aufile.h charset.h \
english.h deutsch.h say.h
saymain.o: saymain.c config.h useconfig.h darray.h rsynth.h trie.h \
hplay.h dict.h lang.h text.h getargs.h phones.h phones.def aufile.h \
charset.h english.h deutsch.h say.h
text.o: text.c config.h useconfig.h darray.h phtoelm.h lang.h text.h \
say.h
trie.o: trie.c config.h useconfig.h trie.h

View File

@ -1,42 +0,0 @@
$Log: not supported by cvs2svn $
# Revision 1.13 1994/11/08 13:30:50 a904209
# 2.0 release
#
# Revision 1.12 1994/11/04 13:32:31 a904209
# 1.99.1 - Change configure stuff
#
# Revision 1.11 1994/11/02 10:55:31 a904209
# Add autoconf. Tested on SunOS/Solaris
#
# Revision 1.10 1994/10/04 17:12:50 a904209
# 3rd pre-release
#
# Revision 1.9 1994/10/04 09:08:27 a904209
# Next Patch merge
#
# Revision 1.8 1994/10/03 08:41:47 a904209
# 2nd pre-release
#
# Revision 1.7 1994/09/19 15:48:29 a904209
# Split hplay.c, gdbm dictionary, start of f0 contour, netaudio and HP ports
#
# Revision 1.6 1994/04/15 16:47:37 a904209
# Edits for Solaris2.3 (aka SunOs 5.3)
#
# Revision 1.5 1994/02/24 15:03:05 a904209
# Added contributed linux, NeXT and SGI ports.
#
# Revision 1.4 93/11/18 16:28:56 a904209
# Migrated nsyth.c towards Jon's scheme - merge still incomplete
#
# Revision 1.3 93/11/16 14:32:34 a904209
# Added RCS Ids, partial merge of Jon's new klatt/parwave
#
# Revision 1.2 93/11/16 14:30:48 a904209
# Applied suggested linux patches and added partial SGI support
#
# Revision 1.1 93/11/16 14:26:09 a904209
# Add RCS version control to original posting
#
# First posting of rsynth-0.9.tar.Z

View File

@ -1,233 +0,0 @@
This is a text to speech system produced by integrating various pieces
of code and tables of data, which are all (I believe) suitable
for use in OpenSource projects.
The files in this distribution are either under GPL or LGPL.
For best quality it is highly desirable to use one of the dictionaries
suggested below.
The uses GNU autoconf to build a configure script.
The generic install instructions are in INSTALL, but basically
it works like this :
configure
make
make check
say --help
say Something of your choice
make -n install # see what it is going to do
make install # copy program(s) to /usr/local/bin
configure --help and INSTALL file explain configure options
which may help.
To allow the package to be built when installer cannot install the
GNU gdbm package in the "normal" place you can specify a pathname
to the gdbm source directory as follows :
configure --with-gdbm=<path-to-gdbm>
e.g.
configure --with-gdbm=$HOME/gdbm
Currently there are the following drivers that are actively
maintained by me:
1. Linux - ALSA or OSS
OSS driver will probably work on netbsd/freebsd etc.
configure should sort this out.
2. Windows - I will be supporting it, but it may not work
in this version.
3. Any machine for which a nas/netaudio port exists.
And for which configure can find the include files and libraries.
(Nas "net audio server" does for audio what X11 does for graphics.)
There are also drivers from the really old rsynth code
which are still there:
* Sun SPARCStations - written & tested by me (when at TI)
on SunOS4.1.3 and Solaris2.3
* NeXT
* SGI - this built on "mips-sgi-irix4.0.5H"
* HPUX
Dictionaries:
Dictionaries convert words in "text" to phonemes in "arpabet"
symbols. The arpabet symbols are then "expanded" into an ASCII
representation of the IPA.
The IPA representation is SAMPA, as defined by J C Wells at UCL see:
http://www.phon.ucl.ac.uk/home/sampa/home.htm
Dictionary databases can be built from either of two ftp'able
sources:
1. The Carnegie Mellon Pronouncing Dictionary [cmudict.0.1] is Copyright
1993 by Carnegie Mellon University. Use of this dictionary, for any
research or commercial purpose, is completely unrestricted. If you
make use of or redistribute this material, we would appreciate
acknowlegement of its origin.
ftp://ftp.cs.cmu.edu/project/fgdata/dict
Latest seems to be cmudict.0.6.gz
2. "beep" from
ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/dictionaries
Latest seems to be beep-1.0.tar.gz
This is a direct desendant of CUVOLAD (british pronounciation)
(as used by previous releases of rsynth), and so
has a more restrictive copyright than CMU dictionary.
dict.c looks for bDict.db by default. b is for british e.g. beep
I use aDict.db for CMU (american) dictionary.
You can then :
say -d a schedule # sked...
say -d b schedule # shed...
It is simplest to obtain dictionaries prior to configuring the
package and tell it where the source are at configure time:
configure --with-aDict=../dict/cmudict.0.6 --with-bDict=../dict/beep-1.0
If you have already built/installed the package you can
gdbm from it as follows:
mkdictdb main-dictionary-file bDict.db
mv bDict.db /usr/local/lib
Expect a few messages from mkdictdb about words it does not like
in either dictionary.
It should not be too hard to port it to other hardware. For a discussion of
these issues see PORTING.
Use say --help to get a list of command line options.
There is an experimental hook to allow you to "say" .pho files intended
for MBrola diphone synth. This is used to provide a hacky back-end
for Festival.
Projects:
Plan is to pre-analyze the dictionaries and produce better letter
to sound rules and smaller exception dictionaries.
Add more of IPA repertiore so that synth can attempt more languages.
Improve quality.
The components (top down ) :
saymain.c
C main() function.
Initializes lower layers and then converts words from
command line or "stdin" to phonemes.
say.c / say.h
Some "normalization" of the text is performed, in particular
numbers can be represented as sequences of digits.
dict.c / dict.h
As of this release uses a GNU "gdbm" database which has been
pre-loaded with a pronounciation dictionary.
text.c / english.c / text.h
An implementation of US Naval Research Laboratory rules
for converting english (american?) text to phonemes.
Based on the version on the comp.speech archives, main changes
were in the encoding of the phonemes from the so called "arpabet"
to a more concise form used in the above dictionary.
This form (which is nmemonic if you know the International Phonetic
Alphabet), is described in the dictionary documentation. It is
also very close to that described in the postings by Evan Kirshenbaum
(evan@hplerk.hpl.hp.com) to sci.lang and alt.usage.english. (The
differences are in the vowels and are probably due to the differences
between Britsh and American english).
saynum.c
Code for "saying" numbers derived from same source as above.
It has been modified to call the higher level routines recursively
rather producing phonemes directly. This will allow any systematic
changes (e.g. British vs American switch) to affect numbers without
having to change this module.
holmes.c / holmes.h / elements.c / elements.def
My implementation of a phoneme to "vocal tract parameters" system
described by Holmes et. al. [1]
The original used an Analogue Hardware synthesizer.
opsynth.c / rsynth.h
My re-implementation of the "Klatt" synthesizer, described
in Klatt [2].
hplay.c / hplay.h
hplay.h describes a common interface.
hplay.c is a link to play/xxxplay.c
Acknowledgements :
Particular thanks to
Tony Robinson ajr@eng.cam.ac.uk
for providing FTP site for alpha testing, and telnet access to a
variety of machines.
Many thanks to
Axel Belinfante Axel.Belinfante@cs.utwente.nl (World Wide Web)
Jon Iles J.P.Iles@cs.bham.ac.uk
Rob Hooft hooft@EMBL-Heidelberg.de (linux stuff)
Thierry Excoffier exco@ligiahp3.univ-lyon1.fr (playpipe for hpux)
Markus Gyger mgyger@itr.ch (HPUX port)
Ben Stuyts ben@stuyts.nl (NeXT port)
Stephen Hocking <sysseh@devetir.qld.gov.au> (Preliminary Netaudio port)
Greg Renda <greg@ncd.com> (Netaudio cleanup)
Tracey Bernath <bernath@bnr.ca> (Netaudio testing)
"Tom Benoist" <ben@ifx.com> (SGI Port)
Andrew Anselmo <anselmo@ERXSG.rl.plh.af.mil> (SGI testing)
Mark Hanning-Lee <markhl@iris-355.jpl.nasa.gov> (SGI testing)
Cornelis van der Laan <nils@ims.uni-stuttgart.de> (freebsd)
for assisting me in puting this package together.
References :
[1] Holmes J. N., Mattingly I, and Shearme J. (1964)
"Speech Synthesis by Rule" , Language Speech 7, 127-143
[2] Dennis H. Klatt (1980)
"Software for a Cascade/Parallel Formant Synthesizer",
J. Acoust. Soc. Am. 67(3), March 1980.

View File

@ -1,21 +0,0 @@
/*
Copyright (c) 1994,2001-2002 Nick Ing-Simmons. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/
char *Revision = "Revision: 3.0.0";
char *say_ident = "@(#)say 3.0.1 2001/04/17"; /* so 'what' works */

View File

@ -1,28 +0,0 @@
package Sampa;
use Exporter;
use base qw(Exporter);
@EXPORT_OK = qw(%unicode %description %example);
open(my $sampa,"sampa.htm") || die "Cannot open sampa.htm:$!";
while (<$sampa>)
{
my @td = m!<td[^>]*>([^<>]*)</td>!g;
if (@td >= 5)
{
my ($sampa,$IPA,$hex,$dec,$desc,$example) = @td;
die "$IPA != $dec" unless $IPA =~ /&#$dec;/;
die "0x$hex != $dec" unless hex($hex) == $dec;
$sampa =~ s/&amp;/&/;
$unicode{$sampa} = chr($dec);
$description{$sampa} = $desc;
$example{$sampa} = $example;
# warn "'$sampa' => $dec\n";
}
elsif (/<td>/)
{
warn "Skip [@td]:$_";
}
}
1;
__END__

View File

@ -1,241 +0,0 @@
/*
Copyright (c) 1994,2001-2002 Nick Ing-Simmons. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/
#include "config.h"
#include <stdio.h>
#include <fcntl.h>
#include "useconfig.h"
#include "getargs.h"
#include "l2u.h"
#include "hplay.h"
#include "aufile.h"
#ifndef HAVE_FTRUNCATE
#ifdef HAVE_CHSIZE
#define ftruncate(fd,size) chsize(fd,size)
#else
#define ftruncate(fd,size) /* oh well */
#endif
#endif
static const short endian = 0x1234;
#define SUN_MAGIC 0x2e736e64 /* Really '.snd' */
#define SUN_HDRSIZE 24 /* Size of minimal header */
#define SUN_UNSPEC ((unsigned)(~0)) /* Unspecified data size */
#define SUN_ULAW 1 /* u-law encoding */
#define SUN_LIN_8 2 /* Linear 8 bits */
#define SUN_LIN_16 3 /* Linear 16 bits */
file_write_p file_write = NULL;
file_term_p file_term = NULL;
static char *linear_file;
static char *au_file;
static int au_fd = -1; /* file descriptor for .au ulaw file */
static int linear_fd = -1;
static unsigned au_encoding = SUN_ULAW;
static unsigned au_size = 0;
static void wblong(int fd, unsigned long x);
static void
wblong(int fd, long unsigned int x)
{
int i;
for (i = 24; i >= 0; i -= 8)
{
char byte = (char) ((x >> i) & 0xFF);
write(fd, &byte, 1);
}
}
extern void au_header(int fd,unsigned enc,unsigned rate,unsigned size,char *comment);
void
au_header(int fd, unsigned int enc, unsigned int rate, unsigned int size, char *comment)
{
if (!comment)
comment = "";
wblong(fd, SUN_MAGIC);
wblong(fd, SUN_HDRSIZE + strlen(comment));
wblong(fd, size);
wblong(fd, enc);
wblong(fd, rate);
wblong(fd, 1); /* channels */
write(fd, comment, strlen(comment));
}
static void aufile_write(int n,short *data);
static void
aufile_write(int n, short int *data)
{
if (n > 0)
{
if (linear_fd >= 0)
{
unsigned size = n * sizeof(short);
if (write(linear_fd, data, n * sizeof(short)) != (int) size)
perror("write");
}
if (au_fd >= 0)
{
if (au_encoding == SUN_LIN_16)
{
unsigned size = n * sizeof(short);
if (*((const char *)(&endian)) == 0x12)
{
if (write(au_fd, data, size) != (int) size)
perror("write");
else
au_size += size;
}
else
{
int i;
for (i=0; i < n; i++)
{
if (write(au_fd, ((char *)data)+1, 1) != 1)
perror("write");
if (write(au_fd, ((char *)data)+0, 1) != 1)
perror("write");
au_size += 2;
data++;
}
}
}
else if (au_encoding == SUN_ULAW)
{
unsigned char *plabuf = (unsigned char *) malloc(n);
if (plabuf)
{
unsigned char *p = plabuf;
unsigned char *e = p + n;
while (p < e)
{
*p++ = short2ulaw(*data++);
}
if (write(au_fd, plabuf, n) != n)
perror(au_file);
else
au_size += n;
free(plabuf);
}
else
{
fprintf(stderr, "%s : No memory for ulaw data\n", program);
}
}
else
{
abort();
}
}
}
}
static void aufile_term(void);
static void
aufile_term(void)
{
/* Finish ulaw file */
if (au_fd >= 0)
{
off_t here = lseek(au_fd, 0L, SEEK_CUR);
if (here >= 0)
{
/* can seek this file - truncate it */
ftruncate(au_fd, here);
/* Now go back and overwite header with actual size */
if (lseek(au_fd, 8L, SEEK_SET) == 8)
{
wblong(au_fd, au_size);
}
}
if (au_fd != 1)
close(au_fd);
au_fd = -1;
}
/* Finish linear file */
if (linear_fd >= 0)
{
ftruncate(linear_fd, lseek(linear_fd, 0L, SEEK_CUR));
if (linear_fd != 1)
close(linear_fd);
linear_fd = -1;
}
}
int
file_init(int argc, char **argv)
{
argc = getargs("File output", argc, argv,
"l", "", &linear_file, "Raw 16-bit linear pathname",
"o", "", &au_file, "Sun/Next audio file name",
NULL);
if (help_only)
return argc;
if (au_file)
{
if (strcmp(au_file, "-") == 0)
{
au_fd = 1; /* stdout */
}
else
{
au_fd = open(au_file, O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (au_fd < 0)
perror(au_file);
}
if (au_fd >= 0)
{
if (samp_rate > 8000)
au_encoding = SUN_LIN_16;
else
au_encoding = SUN_ULAW;
au_header(au_fd, au_encoding, samp_rate, SUN_UNSPEC, "");
au_size = 0;
}
}
if (linear_file)
{
if (strcmp(linear_file, "-") == 0)
{
linear_fd = 1 /* stdout */ ;
}
else
{
linear_fd = open(linear_file, O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (linear_fd < 0)
perror(linear_file);
}
}
if (au_fd >= 0 || linear_fd >= 0)
{
file_write = aufile_write;
file_term = aufile_term;
}
return argc;
}

View File

@ -1,6 +1,19 @@
#ifndef __AUFILE_H
#define __AUFILE_H
#ifdef __cplusplus
extern "C" {
#endif
extern int file_init(int argc,char *argv[]);
typedef void (*file_write_p)(int n, short *data);
typedef void (*file_term_p)(void);
extern file_write_p file_write;
extern file_term_p file_term;
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,5 +1,6 @@
#ifndef CHARSET_H
#define CHARSET_H
#ifdef __cplusplus
extern "C" {
#endif
@ -15,4 +16,5 @@ extern int accent(int a, int c);
#ifdef __cplusplus
}
#endif
#endif /* CHARSET_H */

File diff suppressed because it is too large Load Diff

View File

@ -8,13 +8,13 @@
#define HAVE_ALSA_ASOUNDLIB_H 1
/* Define to 1 if you have the <audio/audiolib.h> header file. */
/* #undef HAVE_AUDIO_AUDIOLIB_H */
#define HAVE_AUDIO_AUDIOLIB_H 1
/* Define to 1 if you have the `chsize' function. */
/* #undef HAVE_CHSIZE */
/* Define to 1 if you have the <db.h> header file. */
#define HAVE_DB_H 1
/* #undef HAVE_DB_H */
/* Found /dev/audio */
/* #undef HAVE_DEV_AUDIO */
@ -35,7 +35,7 @@
#define HAVE_FTRUNCATE 1
/* Define to 1 if you have the <gdbm.h> header file. */
#define HAVE_GDBM_H 1
/* #undef HAVE_GDBM_H */
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
@ -50,10 +50,10 @@
/* #undef HAVE_LIBC_H */
/* Define to 1 if you have the `db' library (-ldb). */
#define HAVE_LIBDB 1
/* #undef HAVE_LIBDB */
/* Define to 1 if you have the `gdbm' library (-lgdbm). */
#define HAVE_LIBGDBM 1
/* #undef HAVE_LIBGDBM */
/* Define to 1 if you have the `m' library (-lm). */
#define HAVE_LIBM 1
@ -80,7 +80,7 @@
#define HAVE_MEMORY_H 1
/* Found NAS -laudio */
/* #undef HAVE_NAS */
#define HAVE_NAS 1
/* Sun hack */
/* #undef HAVE_NONSTDARITH */

View File

@ -1,169 +0,0 @@
/* config.h.in. Generated from configure.in by autoheader. */
/* Old ALSA API without pointers */
#undef ALSA_PCM_OLD_HW_PARAMS_API
/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
#undef HAVE_ALSA_ASOUNDLIB_H
/* Define to 1 if you have the <audio/audiolib.h> header file. */
#undef HAVE_AUDIO_AUDIOLIB_H
/* Define to 1 if you have the `chsize' function. */
#undef HAVE_CHSIZE
/* Define to 1 if you have the <db.h> header file. */
#undef HAVE_DB_H
/* Found /dev/audio */
#undef HAVE_DEV_AUDIO
/* Found /dev/dsp */
#undef HAVE_DEV_DSP
/* Found /dev/dspW */
#undef HAVE_DEV_DSPW
/* Found /dev/sbdsp */
#undef HAVE_DEV_SBDSP
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define to 1 if you have the `ftruncate' function. */
#undef HAVE_FTRUNCATE
/* Define to 1 if you have the <gdbm.h> header file. */
#undef HAVE_GDBM_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `asound' library (-lasound). */
#undef HAVE_LIBASOUND
/* Define to 1 if you have the `audio' library (-laudio). */
#undef HAVE_LIBAUDIO
/* Define to 1 if you have the <libc.h> header file. */
#undef HAVE_LIBC_H
/* Define to 1 if you have the `db' library (-ldb). */
#undef HAVE_LIBDB
/* Define to 1 if you have the `gdbm' library (-lgdbm). */
#undef HAVE_LIBGDBM
/* Define to 1 if you have the `m' library (-lm). */
#undef HAVE_LIBM
/* Found -lX11 */
#undef HAVE_LIBX11
/* Found -lXt */
#undef HAVE_LIBXT
/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
/* Define to 1 if you have the <machine/soundcard.h> header file. */
#undef HAVE_MACHINE_SOUNDCARD_H
/* Define to 1 if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H
/* Define to 1 if you have the `memcpy' function. */
#undef HAVE_MEMCPY
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Found NAS -laudio */
#undef HAVE_NAS
/* Sun hack */
#undef HAVE_NONSTDARITH
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the `strchr' function. */
#undef HAVE_STRCHR
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the <sun/audioio.h> header file. */
#undef HAVE_SUN_AUDIOIO_H
/* Define to 1 if you have the <sys/audioio.h> header file. */
#undef HAVE_SYS_AUDIOIO_H
/* Define to 1 if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H
/* Define to 1 if you have the <sys/ioccom.h> header file. */
#undef HAVE_SYS_IOCCOM_H
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#undef HAVE_SYS_IOCTL_H
/* Define to 1 if you have the <sys/soundcard.h> header file. */
#undef HAVE_SYS_SOUNDCARD_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the `truncate' function. */
#undef HAVE_TRUNCATE
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* No float prototype */
#undef NOPROTOFLOAT
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define as the return type of signal handlers (`int' or `void'). */
#undef RETSIGTYPE
/* New ALSA API passes pointers to parms */
#undef RSYNTH_ALSA_PCM_POINTER_PARAMS_API
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if the X Window System is missing or not being used. */
#undef X_DISPLAY_MISSING
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
/* Define to `long' if <sys/types.h> does not define. */
#undef off_t

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,322 +0,0 @@
define([AC_CACHE_LOAD], )dnl
define([AC_CACHE_SAVE], )dnl
dnl Process this file with autoconf to produce a configure script.
AC_REVISION($Revision: 1.1 $)
AC_PREREQ(2.59)
AC_INIT
AC_CONFIG_SRCDIR([say.c])
AC_CANONICAL_HOST
AC_CONFIG_HEADER(config.h)
PROGS="say"
dnl Set up link to the native play program
hplay=dummy
dbm=none
make_dist=/dev/null
prefix=/usr/local
dnl AC_PREFIX_PROGRAM(gcc)
if test -z "$CC" && test -n "$GCC" ; then
CC=$GCC
fi
dnl Checks for programs.
AC_PROG_CC
if test "$GCC" != yes; then
CFLAGS="-O"
fi
AC_ISC_POSIX
AC_PROG_MAKE_SET
AC_PROG_INSTALL
AC_PROG_RANLIB
dnl Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(fcntl.h limits.h sys/types.h sys/file.h sys/ioctl.h sys/time.h unistd.h)
if test "$ac_cv_header_stdc" != yes; then
AC_CHECK_FUNCS(strchr memcpy)
AC_CHECK_HEADERS(memory.h malloc.h)
fi
AC_CHECK_FUNCS(ftruncate chsize truncate)
case "$host" in
*-sun-*) hplay=sun; AC_CHECK_HEADERS(sys/ioccom.h sys/audioio.h sun/audioio.h);;
*-sgi-*) hplay=sgi ;;
*-next-*) hplay=NeXT; AC_CHECK_HEADERS(libc.h) ;;
*-*-freebsd*) hplay=linux ;;
*-*-linux*) hplay=linux ;;
*-*-hpux*) hplay=hpux ;;
*-*-*) echo "Unknown host type $host" ;;
esac
AC_MSG_WARN(prefix is $prefix)
if test "$hplay" = linux; then
AC_CHECK_HEADERS(alsa/asoundlib.h,hplay=alsa,hplay=oss)
fi
if test "$hplay" = alsa; then
AC_MSG_CHECKING(Checking for new ALSA API)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <alsa/asoundlib.h>
]], [[
static snd_pcm_hw_params_t *hwparams;
static snd_pcm_uframes_t chunk;
snd_pcm_hw_params_get_buffer_size (hwparams,&chunk);
]])],[
new_alsa=yes
AC_MSG_RESULT(yes),
AC_DEFINE(RSYNTH_ALSA_PCM_POINTER_PARAMS_API,1,[New ALSA API passes pointers to parms])
],[
new_alsa=no
AC_MSG_RESULT(no)
])
if test $new_alsa = no; then
AC_MSG_CHECKING(Checking for old ALSA API)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#define ALSA_PCM_OLD_HW_PARAMS_API
#include <alsa/asoundlib.h>
]], [[
static snd_pcm_hw_params_t *hwparams;
static snd_pcm_uframes_t chunk;
chunk = snd_pcm_hw_params_get_buffer_size (hwparams);
]])],[
AC_MSG_RESULT(yes),
AC_DEFINE(ALSA_PCM_OLD_HW_PARAMS_API,1,[Old ALSA API without pointers])
],[
AC_MSG_RESULT(no)
])
fi
AC_CHECK_LIB(asound,snd_pcm_open)
fi
if test "$hplay" = oss; then
AC_CHECK_HEADERS(sys/soundcard.h machine/soundcard.h,break,hplay=dummy)
if test -c /dev/dspW ; then
AC_DEFINE(HAVE_DEV_DSPW,1,[Found /dev/dspW])
fi
if test -c /dev/audio ; then
AC_DEFINE(HAVE_DEV_AUDIO,1,[Found /dev/audio])
fi
if test -c /dev/dsp ; then
AC_DEFINE(HAVE_DEV_DSP,1,[Found /dev/dsp])
fi
if test -c /dev/sbdsp ; then
AC_DEFINE(HAVE_DEV_SBDSP,1,[Found /dev/sbdsp])
fi
fi
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_OFF_T
dnl See if float can be used in protos followed by K&R definition
AC_MSG_CHECKING(if we can use float in prototypes)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
} int func (float a);
int func(a) float a; { ]])],[AC_MSG_RESULT(yes)],[
AC_DEFINE(NOPROTOFLOAT,1,[No float prototype])
AC_MSG_RESULT(no)
])
if test -d $prefix/include; then
CPPFLAGS="$CPPFLAGS -I$prefix/include"
AC_MSG_WARN(Using -I$prefix/include)
fi
if test -d $prefix/lib; then
LIBS="-L$prefix/lib $LIBS"
AC_MSG_WARN(Using -L$prefix/lib)
fi
AC_ARG_WITH(aDict,[ --with-aDict[=<path>] American Dictionary],[
if test "$withval" != "" && test -r "$withval" ; then
AC_MSG_NOTICE(Using $withval as American Dictionary)
ADICT="$withval"
BUILD="$BUILD aDict.db"
DICTS="$DICTS aDict.db"
else
AC_MSG_WARN(Cannot read $withval for American Dictionary)
fi])
AC_ARG_WITH(bDict,[ --with-bDict[=<path>] British Dictionary],[
if test "$withval" != "" && test -r "$withval" ; then
AC_MSG_NOTICE(Using $withval as British Dictionary)
BDICT="$withval"
BUILD="$BUILD bDict.db"
DICTS="$DICTS bDict.db"
else
AC_MSG_WARN(Cannot read $withval for British Dictionary)
fi])
AS_MESSAGE([checking for database libraries...])
AC_ARG_WITH(db,[ -with-db[=<path] Try and use Berkeley DB],[
if test "$withval" != "" && test -d "$withval" ; then
CPPFLAGS="-I$withval $CPPFLAGS"
LIBS="-L$withval $LIBS"
fi])
if test "$with_db" != "no" ; then
AC_CHECK_LIB(db,db_create)
if test "$ac_cv_lib_db_db_create" = yes ; then
AC_CHECK_HEADERS(db.h,db_h=yes)
fi
if test "$db_h" = yes ; then
PROGS="$PROGS mkdictdb dlookup"
AC_MSG_WARN(Using db)
fi
fi
AC_ARG_WITH(gdbm,[ --with-gdbm[=<path>] Try and use GNU gdbm (given source directory)],[
if test "$withval" != "" && test -d "$withval" ; then
CPPFLAGS="-I$withval $CPPFLAGS"
LIBS="-L$withval $LIBS"
else
echo "--with-gdbm=$withval"
fi])
if test "$with_gdbm" != "no" ; then
AC_CHECK_HEADERS(gdbm.h,gdbm_h=yes)
if test "$gdbm_h" = yes; then
AC_CHECK_LIB(gdbm,gdbm_open)
if test "$ac_cv_lib_gdbm_gdbm_open" = yes ; then
AC_MSG_WARN(Using gdbm)
PROGS="$PROGS mkdictdb dlookup"
fi
fi
fi
if test "$db_h$gdbm_h" = ""; then
AC_MSG_WARN(No db.h and no gdbm.h)
BUILD=""
fi
AC_PATH_PROG(PERL,perl)
if test "perl" != ""; then
BUILD="$BUILD perlstuff"
EXTRA_INST="$EXTRA install_perl"
fi
AC_ARG_WITH(festival,[ --with-festival[=<path>] Festival Directory],[
if test "$withval" != "" && test -d "$withval/lib/voices" ; then
FESTIVAL="$withval"
BUILD="$BUILD festival"
EXTRA_INST="$EXTRA_INST install_festival"
else
AC_MSG_WARN(Cannot find $withval/lib/voices directory)
fi])
DEFAULT_DICT=b
AC_ARG_WITH(defDict,[ --with-defDict[=<a|b>] Default Dictionary, American (a) or British (b)],[
if test "$withval" != "" ; then
DEFAULT_DICT="$withval"
else
echo "Cannot read $withval"
fi])
CPPFLAGS="-I. -I$srcdir $CPPFLAGS"
AC_CHECK_LIB(M,atan)
AC_CHECK_LIB(m,atan)
if test "$hplay" = sgi; then
AC_CHECK_LIB(audio,ALopenport)
fi
dnl Checking for X11
AC_PATH_XTRA
if test -n "$x_includes" ; then
CPPFLAGS="$CPPFLAGS -I$x_includes"
fi
AC_CHECK_LIB(socket,socket,XLIBS="-lsocket $XLIBS")
AC_CHECK_LIB(nsl,inet_addr,XLIBS="-lnsl $XLIBS")
AC_CHECK_LIB(X11,XauReadAuth,[
XLIBS="$X_LIBS -lX11 $XLIBS"
AC_DEFINE(HAVE_LIBX11,1,[Found -lX11])
],,$X_LIBS $XLIBS $LIBS)
AC_CHECK_LIB(Xt,XtAppAddInput,[
XLIBS="$X_LIBS -lXt $XLIBS"
AC_DEFINE(HAVE_LIBXT,1,[Found -lXt])
],,$X_LIBS $XLIBS $LIBS)
dnl See if we can find nas audio library
AC_CHECK_HEADERS(audio/audiolib.h)
if test "$ac_cv_header_audio_audiolib_h" = yes ; then
AC_CHECK_LIB(audio,AuOpenServer,[
XLIBS="$XLIBS -laudio"
AC_DEFINE(HAVE_NAS,1,[Found NAS -laudio])
],,$XLIBS $LIBS)
if test "$ac_cv_lib_audio_AuOpenServer" = yes; then
if test "$hplay" = dummy; then
hplay="na"
LIBS="$XLIBS $LIBS"
XLIBS=""
else
PROGS="$PROGS nasay"
fi
fi
fi
dnl Check for obscure but speed-enhancing sun hack
if test "$hplay" = sun; then
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[nonstandard_arithmetic();]])],[AC_DEFINE(HAVE_NONSTDARITH,1,[Sun hack])],[])
fi
dnl Checks for library functions.
AC_PROG_GCC_TRADITIONAL
AC_TYPE_SIGNAL
AC_MSG_CHECKING(for GNU make)
if make -v 2>/dev/null | grep -i 'GNU *Make' > /dev/null ; then
make_dist=$srcdir/config/make_dist
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
AC_SUBST(CC)
AC_SUBST(RANLIB)
AC_SUBST(INSTALL)
AC_SUBST(INSTALL_PROGRAM)
AC_SUBST(INSTALL_DATA)
AC_SUBST(BUILD)
AC_SUBST(EXTRA_INST)
AC_SUBST(PERL)
AC_SUBST(FESTIVAL)
AC_SUBST(ADICT)
AC_SUBST(BDICT)
AC_SUBST(DICTS)
AC_SUBST(DEFAULT_DICT)
AC_SUBST(XLIBS)
AC_SUBST(PROGS)
AC_SUBST(NOPROTOFLOAT)
AC_SUBST(HAVE_NONSTDARITH)
AC_SUBST_FILE(make_dist)
ac_sources="config/${hplay}play.c"
ac_dests="hplay.c"
while test -n "$ac_sources"; do
set $ac_dests; ac_dest=$1; shift; ac_dests=$*
set $ac_sources; ac_source=$1; shift; ac_sources=$*
ac_config_links_1="$ac_config_links_1 $ac_dest:$ac_source"
done
AC_CONFIG_LINKS([$ac_config_links_1])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

View File

@ -17,7 +17,7 @@
MA 02111-1307, USA
*/
/* $Id: darray.h,v 1.1 2006-06-11 07:13:23 urchlay Exp $
/* $Id: darray.h,v 1.2 2006-06-11 21:49:07 stephena Exp $
*/
#if !defined(DARRAY_H)
#define DARRAY_H
@ -27,7 +27,6 @@
extern "C" {
#endif
typedef struct
{char *data; /* the items */
unsigned items; /* number of slots used */
@ -97,7 +96,4 @@ extern int darray_fget(FILE * f, darray_ptr p);
}
#endif
#endif /* DARRAY_H */

View File

@ -1,55 +0,0 @@
#!/usr/local/bin/perl -w
use Audio::Data;
use Audio::Play;
my $f = shift;
my $n = shift(@ARGV) + 0;
my @data;
while (<>)
{
s/#.*$//;
next if /^\s*$/;
s/^\s+//;
my @f = split(/\s+/,$_);
my $v = 0+$f[$n];
push(@data,$v);
}
my $au = Audio::Data->new(rate => 11025);
$au->data(@data);
$au /= 32768;
my ($max,$min) = $au->bounds;
my $dur = $au->duration;
warn "Original $max - $min ${dur}s\n";
if ($max > 1 || $min < -1)
{
my $dc = ($max+$min)/2;
$au -= $dc;
my $size = ($max-$min)/2;
$au /= $size;
($max,$min) = $au->bounds;
$dur = $au->duration;
warn "Normaized $max - $min ${dur}s\n";
}
open(my $fh,">$f") || die "Cannot open $f:$!";
$au->Save($fh,"");
close($fh);
# Audio::Play->new->play($au);
open($fh,"$f") || die "Cannot open $f:$!";
my $rb = Audio::Data->new(Load => $fh);
close($fh);
($max,$min) = $rb->bounds;
$dur = $rb->duration;
warn "Duration $max - $min ${dur}s\n";

View File

@ -1,2 +1,14 @@
#ifndef __DEUTCSH_H
#define __DEUTCSH_H
#ifdef __cplusplus
extern "C" {
#endif
extern lang_t Deutsch;
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,152 +0,0 @@
/*
Copyright (c) 1994,2001-2003 Nick Ing-Simmons. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/
/* jms: changed default for dict_path to "g" */
#include "config.h"
#ifdef HAVE_IO_H
#include <io.h>
#endif /* HAVE_IO_H */
#include <stdio.h>
#include <ctype.h>
#include "charset.h"
#include "phones.h"
#include "useconfig.h"
#include "dbif.h"
#ifndef DEFAULT_DICT
#define DEFAULT_DICT "b"
#endif
char *dict_path = DEFAULT_DICT;
#ifdef DB_HANDLE
DB_HANDLE dict;
#include "lang.h"
#include "dict.h"
#ifndef DICT_DIR
#define DICT_DIR "/usr/local/lib/dict"
#endif
unsigned char *
dict_lookup(const char *s, unsigned int n)
{
if (!n)
n = strlen(s);
if (dict) {
unsigned char *p = (unsigned char *) s;
DATUM key;
DATUM data;
unsigned int i;
char *buf = (char *) malloc(n);
DATUM_SET(key, buf, n);
for (i = 0; i < n; i++) {
buf[i] = (isupper(p[i])) ? tolower(p[i]) : p[i];
}
DB_FETCH(dict, key, data);
free(buf);
if (DATUM_DATA(data)) {
unsigned char *w = (unsigned char *) realloc(DATUM_DATA(data),
DATUM_SIZE(data) +
1);
w[DATUM_SIZE(data)] = '\0';
return w;
}
}
return NULL;
}
static void choose_dialect(void);
static void
choose_dialect(void)
{
unsigned char *word = dict_find("wash", 0);
if (word && word[0] == W) {
if (word[1] == OH)
dialect = ph_br;
else if (word[1] == AA1)
dialect = ph_am;
free(word);
}
}
int
dict_init(const char *dictname)
{
char *buf = NULL;
#ifdef OS2
char *dictdir = getenv("ETC");
if (dictdir == NULL)
dictdir = DICT_DIR; /* jms: if ETC is not set */
#else
char *dictdir = DICT_DIR;
#endif
buf =
(char *) malloc(strlen(dictdir) + strlen("Dict.db") +
strlen(dict_path) + 2);
sprintf(buf, "%sDict.db", dictname);
DB_OPEN_READ(dict, buf);
if (!dict) {
sprintf(buf, "%s/%sDict.db", dictdir, dictname);
DB_OPEN_READ(dict, buf);
}
if (dict) {
dict_path = (char *) realloc(buf, strlen(buf) + 1);
lang->lookup = dict_lookup;
choose_dialect();
}
return have_dict;
}
void
dict_term(void)
{
if (dict) {
DB_CLOSE(dict);
free(dict_path);
lang->lookup = 0;
dict = 0;
}
}
#else
unsigned char *
dict_find(char *s, unsigned n)
{
return NULL;
}
int
dict_init(int argc, char *argv[])
{
return argc;
}
void
dict_term(void)
{
}
#endif

View File

@ -1,77 +0,0 @@
/*
Copyright (c) 1994,2001-2002 Nick Ing-Simmons. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "config.h"
#include <stdio.h>
#include <ctype.h>
#include "useconfig.h"
#include "dict.h"
#include "phones.h"
#include "getargs.h"
#include "english.h"
lang_t *lang = &English;
static void show(char *s);
static void
show(char *s)
{
unsigned char *p = dict_find(s, strlen(s));
printf("%s", s);
if (p) {
int l = strlen((char *) p);
int i;
for (i = 0; i < l; i++)
printf(" %s", ph_name[(unsigned) (p[i])]);
printf(" [");
for (i = 0; i < l; i++)
printf("%s", dialect[(unsigned) (p[i])]);
printf("]\n");
free(p);
}
else
printf(" ???\n");
}
int
main(int argc, char **argv, char **envp)
{
argc = getargs("Dictionary", argc, argv,
"d", "", &dict_path, "Which dictionary [b|a|g]", NULL);
if (help_only) {
fprintf(stderr, "Usage: %s [options as above] words to lookup\n",
argv[0]);
}
else {
if (dict_path && *dict_path)
dict_init(dict_path);
if (have_dict) {
int i;
for (i = 1; i < argc; i++) {
show(argv[i]);
}
dict_term();
}
}
return 0;
}

View File

@ -1,83 +0,0 @@
#!/tools/local/perl -w
use strict;
use Rsynth::Elements;
read_elements();
my $vv;
my $nv = 0;
my $tv = 0;
foreach my $e (@eNames)
{
if ($elem{$e}{features}{vwl})
{
$nv++;
my $av = $elem{$e}{'av'}[0];
$vv = $av unless defined $vv;
$tv = $tv+$av;
if ($vv != $av)
{
warn "$e has av=$av not $vv\n";
}
}
}
$vv = int($tv/$nv+0.5);
warn "Vowels are av=$vv\n";
foreach my $e (@eNames)
{
my $f = $elem{$e}{features};
if ($elem{$e}{'f2'}[0] - $elem{$e}{'f1'}[0] < 200)
{
warn sprintf("$e : f2 %d too close to f1 %d\n", $elem{$e}{'f2'}[0], $elem{$e}{'f1'}[0]);
set($elem{$e}{'f2'},$elem{$e}{'f1'}[0]+200);
}
if ($elem{$e}{'f3'}[0] - $elem{$e}{'f2'}[0] < 200)
{
warn sprintf("$e : f3 %d too close to f2 %d\n", $elem{$e}{'f3'}[0], $elem{$e}{'f2'}[0]);
}
if (!$f->{vwl})
{
my $av = $elem{$e}{'av'}[0];
if ($av >= $vv)
{
warn "$e ".join(',',keys %{$elem{$e}{features}})." has av=$av\n";
if ($f->{apr} || $f->{nas} || $f->{lat})
{
set($elem{$e}{'av'},$vv-10);
}
elsif ($f->{frc} || $f->{stp})
{
set($elem{$e}{'av'},$vv-13);
}
}
if ($av > 0)
{
my $av = $elem{$e}{'avc'}[0];
if ($av >= $vv)
{
warn "$e ".join(',',keys %{$elem{$e}{features}})." has avc=$av\n";
if ($f->{apr} || $f->{nas} || $f->{lat})
{
set($elem{$e}{'avc'},$vv-10);
}
elsif ($f->{frc} || $f->{stp})
{
set($elem{$e}{'avc'},$vv-13);
}
}
}
}
}
write_elements("Elements.def");
sub set
{
my ($a,$v) = @_;
warn "Setting to $v\n";
my $p = $a->[2]/100;
$a->[0] = $v;
$a->[1] = $v * (1-$p);
}

View File

@ -1,254 +0,0 @@
#!/usr/local/bin/perl -w
use strict;
use Tk;
use Tk::Font;
use Rsynth::Elements;
use Audio::Play;
use blib './Rsynth';
use Rsynth::Audio;
my $au = Audio::Data->new(rate => 11025);
my $synth = Rsynth::Audio->new($au);
my $mw = MainWindow->new;
$mw->menu;
my $IPA = $mw->Font(family => 'Gentium',
point => 180, slant => 'r',
weight => 'medium');
my $t = $mw->Scrolled(Text => -width => 25,-background => 'black')
->pack(-side => 'right', -expand => 1, -fill => 'both');
#
# Vowel diagram to screen:
# Y axis is F1 - higher values near bottom, so just scaled
sub F1BASE () { 190 } # Lowest F1 and origin for Y axis
sub F1MAX () { 900 } # Highest F1
sub F1SCALE () { 3 }
# X axis is F2-F1 with higher values on the left
#
sub F2MIN () { 700 } # Lowest F2
sub F2MAX () { 2500 } # Highest F2
sub F2BASE () { 2400 } # Screen X offset to ensure +ve x.
sub F2SCALE () { 6 }
# F3 is a 3rd dimension which is a pain.
# F3 is lowest for /r/ sounds - low F3 is their characteristic.
# F3 is highest for unrounded vowels and lower for rounded vowels
# (F2 is lower for rounded vowels too)
# Note that /i/ and /j/ and possibly /&/ F3 isn't
# from usual "cavity".
sub F3MIN () { 1600 }
sub F3MAX () { 3200 }
sub F3SCALE () { 6 }
sub MINSPACE () { 200 }
sub f1f2toscreen
{
my ($f1,$f2) = @_;
my $x = (F2BASE - $f2 + $f1)/F2SCALE;
my $y = ($f1 - F1BASE)/F1SCALE;
return ($x,$y);
}
sub f1f2fromscreen
{
my ($x,$y) = @_;
my $f1 = F1BASE + F1SCALE*$y;
my $f2 = F2BASE - F2SCALE*$x+$f1;
if ($f2 < $f1 + MINSPACE)
{
$f2 = $f1 + MINSPACE;
}
return ($f1,$f2);
}
sub f2f3toscreen
{
my ($f2,$f3) = @_;
my $x = (F2BASE - $f2)/F2SCALE;
my $y = ($f3 - F3MIN)/F3SCALE;
return ($x,$y);
}
sub f2f3fromscreen
{
my ($x,$y) = @_;
my $f2 = F2BASE - $x *F2SCALE;
my $f3 = F3MIN + $y *F3SCALE;
if ($f3 < $f2 + MINSPACE)
{
$f3 = $f2 + MINSPACE;
}
return ($f2,$f3);
}
my ($width,$height) = f1f2toscreen(F1MAX, F2MIN);
my $left = $mw->Frame->pack(-side => 'left', -fill => 'y', -expand => 0);
my $f1f2 = $left->Canvas(-background => 'black',
-height => $height,
-width => $width)
->pack(-side => 'top', -expand => 0);
($width,$height) = f2f3toscreen(F2MIN, F3MAX);
my $f2f3 = $left->Canvas(-background => 'black',
-height => $height,
-width => $width)
->pack(-side => 'top', -expand => 0);
my $d = $mw->Text(-width => 15, -font => $IPA)
->pack(-side => 'left',-fill => 'y');
my $cur12 = $f1f2->create(oval => [0,0,0,0],-outline => 'yellow');
my $cur23 = $f2f3->create(oval => [0,0,0,0],-outline => 'yellow');
my @colours = qw(white red green blue magenta cyan orange brown pink violet);
my %colour;
my $i = 0;
read_elements();
my $ve;
foreach my $e (sort { height($a) <=> height($b) ||
front($a) <=> front($b) ||
round($a) <=> round($b) }
grep { $_->{features}{vwl} } values %elem)
{
my $ch = $e->{unicode};
utf8::decode($ch);
if ($e->{features}{vwl} || $e->{features}{gld})
{
next if ($e->{features}{nas} || $e->{features}{dip});
my @feat = features($e);
my $key = join(' ',@feat);
my $colour = $colour{$key};
unless (exists $colour{$key})
{
$colour = $colours[$i++ % @colours] ;
$t->tagConfigure($colour,-foreground => $colour, -font => $IPA);
$colour{$key} = $colour;
}
my $sm = $e->{sampa};
$t->insert('end',"$sm [$ch] - @feat\n",[$colour,$e->{name}]);
my ($x,$y) = f1f2toscreen($e->{f1}[0],$e->{f2}[0]);
my $id12 = $f1f2->createText($x, $y,
-font => $IPA,
-fill => $colour, -text => $ch);
($x,$y) = f2f3toscreen($e->{f2}[0],$e->{f3}[0]);
my $id23 = $f2f3->createText($x, $y,
-font => $IPA,
-fill => $colour, -text => $ch);
if ($e->{sampa} eq '#')
{
$ve = $e;
$f1f2->Tk::bind('<3>',[\&Click12,$ve,$id12,$id23,Ev('x'),Ev('y'),Ev('s')]);
$f2f3->Tk::bind('<3>',[\&Click23,$ve,$id12,$id23,Ev('x'),Ev('y'),Ev('s')]);
}
$f1f2->bind($id12,'<1>',[\&display,$e,$id12,$id23]);
$f1f2->bind($id12,'<2>',[\&change,$e,$id12,$id23]);
$f2f3->bind($id23,'<1>',[\&display,$e,$id12,$id23]);
$f2f3->bind($id23,'<2>',[\&change,$e,$id12,$id23]);
$t->tagBind($e->{name},'<1>',[\&display,$e,$id12,$id23]);
$t->tagBind($e->{name},'<2>',[\&change,$e,$id12,$id23]);
}
}
sub Click12
{
my ($w,$e,$id12,$id23,$wx,$wy,$s) = @_;
my $x = $w->canvasx($wx);
my $y = $w->canvasy($wy);
my ($f1,$f2) = f1f2fromscreen($x,$y);
$e->{f1}[0] = $f1;
$e->{f2}[0] = $f2;
display($w,$e,$id12,$id23);
}
sub Click23
{
my ($w,$e,$id12,$id23,$wx,$wy,$s) = @_;
my $x = $w->canvasx($wx);
my $y = $w->canvasy($wy);
my ($f2,$f3) = f2f3fromscreen($x,$y);
$e->{f2}[0] = $f2;
$e->{f3}[0] = $f3;
display($w,$e,$id12,$id23);
}
sub change
{
my ($w,$e,$id12,$id23) = @_;
foreach my $key (qw(f1 f2 f3))
{
$e->{$key}[0] = $ve->{$key}[0];
}
display($w,$e,$id12,$id23);
}
sub display
{
my ($w,$e,$id12,$id23) = @_;
my ($bx,$by) = f1f2toscreen($e->{f1}[0],$e->{f2}[0]);
$f1f2->coords($id12,[$bx,$by]);
my @coord = $f1f2->bbox($id12);
$f1f2->coords($cur12,\@coord);
($bx,$by) = f2f3toscreen($e->{f2}[0],$e->{f3}[0]);
$f2f3->coords($id23,[$bx,$by]);
@coord = $f2f3->bbox($id23);
$f2f3->coords($cur23,\@coord);
$e->update;
$d->delete('1.0','end');
my $ch = $e->{unicode};
utf8::decode($ch);
$d->insert('end',$e->{name}.' '.$e->{sampa}." [$ch]\n");
$d->insert('end',join(' ',features($e))."\n");
foreach my $sym (@pNames)
{
$d->insert('end',sprintf("$sym:%4d\n",$e->{$sym}[0]));
}
# Clear audio buffer
$au->length(0);
# An empty element/dur "string".
my $elm = '';
my $pre = '.';
my $post = '.';
my $idx = $e->{idx};
foreach my $ename (@{$Rsynth::Phones::phtoelm{$pre}},$e->{name},
@{$Rsynth::Phones::phtoelm{$post}})
{
my $t = $elem{$ename};
$elm .= chr($t->{idx});
$elm .= ($t->{idx} == $idx) ? chr(10) : chr($t->{du});
$d->insert('end',$ename);
}
$synth->interpolate($elm);
my $svr = Audio::Play->new;
$d->insert(end => "\n");
$svr->play($au) if $svr;
}
$f1f2->configure(-scrollregion => [$f1f2->bbox('all')]);
MainLoop;
write_elements("Elements.edt");

View File

@ -1,2 +1,12 @@
#ifndef __ENGLISH_H
#define __ENGLISH_H
#include "lang.h"
extern lang_t English;
#ifdef __cplusplus
extern "C" {
extern lang_t English;
}
#endif
#endif

View File

@ -1,121 +0,0 @@
; Mbrola demo file for en1.
; Copyright (c) 1997 Faculte Polytechnique de Mons
;
; "It would be a considerable invention indeed, that of
; a machine able to mimic our speech, with its sounds
; and articulations. I think it is not impossible."
;
; - Leonhard Euler, 1761
_ 70
I 80 0 115 50 142 99 142
t 90
w 100
U 50 50 205
d 40 25 195 87 181
b 80
i: 140 0 132 99 108
@ 30 50 107
k 90
@ 40 0 145 100 121
n 40 50 117
s 110
I 80 50 218
d 40
r 50
@ 60 75 160
b 90 100 109
@ 30
5 90
I 60 75 109
n 80
v 40
e 90 0 109 50 153 75 177
n 30 25 195
S 80
@ 70
n 30
I 70 75 112
n 130 100 98
d 60 75 108
i: 270 30 177 60 100 100 156
d 120 100 177
_ 300
D 130 50 114
{ 100 45 142
t 110
V 30 25 119
v 60
@ 70
m 100
@ 30 100 100
S 230
i: 180 0 186 35 200 50 190 95 133
n 160 6 140 85 145
_ 300
eI 150 54 150 77 160
b 60
@ 10
l 70 20 137 70 135
t 100
@ 80 10 105
m 78
I 60 60 160
m 50 50 173
I 50 50 140
k 120
aU 120 5 120 75 97
s 140
p 100
i: 120 15 161 35 148 75 186
t 30
S 280
_ 300
w 100 90 115
I 30
D 60 15 117 60 123
I 70 75 205
t 60
s 60
s 100
aU 220 5 145 15 126 60 106 95 121
n 30
d 30 33 140
z 70
{ 70 0 110 85 119
n 30 33 115
d 40
A: 90 25 101 65 111
t 110
I 30 50 170
k 50
j 50 20 225 70 237
@ 30 35 235
l 50
eI 110 5 135 75 108
S 140
@ 40 35 95
n 80 95 99
z 230
_ 640
aI 210 90 105
T 140
I 30 35 216
N 180 85 250
k 110
I 30 50 222
t 70
s 80
_ 70
n 60 25 184 65 177
Q 130 5 181 80 222
t 120
I 30 15 221
m 60 85 173
p 80
Q 100 10 126 85 109
s 120
@ 50
b 60
@ 10 15 98
5 190 100 103
_ 50

View File

@ -1,3 +0,0 @@
It would be a considerable invention indeed, that of
a machine able to mimic our speech, with its sounds
and articulations. I think it is not impossible.

View File

@ -1,103 +0,0 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; ;;
;;; Nicholas Ing-Simmons ;;
;;; Copyright (c) 2002 ;;
;;; All Rights Reserved. ;;
;;; ;;
;;; Permission is hereby granted, free of charge, to use and distribute ;;
;;; this software and its documentation without restriction, including ;;
;;; without limitation the rights to use, copy, modify, merge, publish, ;;
;;; distribute, sublicense, and/or sell copies of this work, and to ;;
;;; permit persons to whom this work is furnished to do so, subject to ;;
;;; the following conditions: ;;
;;; 1. The code must retain the above copyright notice, this list of ;;
;;; conditions and the following disclaimer. ;;
;;; 2. Any modifications must be clearly marked as such. ;;
;;; 3. Original authors' names are not deleted. ;;
;;; 4. The authors' names are not used to endorse or promote products ;;
;;; derived from this software without specific prior written ;;
;;; permission. ;;
;;; ;;
;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;;
;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;;
;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;;
;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;;
;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;;
;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;;
;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;;
;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;;
;;; THIS SOFTWARE. ;;
;;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; Support for rsynth as an external module.
;;; Derived from the handler for mbrola by Nick Ing-Simmons
;;;
;;; You might want to set this in your sitevars.scm
(defvar rsynth_progname "/usr/local/bin/say"
"rsynth_progname
The program name for rsynth.")
(defvar rsynth_options "-E -v -a"
"rsynth_options
Command line options to be passed during rsynth Synthesis.")
(define (rsynth_Synth utt)
"(rsynth_Synth UTT)
Synthesize using rsynth as external module. Basically dump the info
from this utterance. Call rsynth and reload the waveform into utt.
[see rsynth]"
(let ((filename (make_tmp_filename)))
(save_segments_rsynth utt filename)
(system (string-append rsynth_progname " "
rsynth_options
" -o " filename ".au"
" -f " filename
))
(utt.import.wave utt (string-append filename ".au"))
(apply_hooks after_synth_hooks utt)
(delete-file filename)
(delete-file (string-append filename ".au"))
utt))
(define (save_segments_rsynth utt filename)
"(save_segments_rsynth UTT FILENAME)
Save segment information in rsynth format in filename. The format is
phone duration (ms) [% position F0 target]*. [see rsynth]"
(let ((fd (fopen filename "w")))
(mapcar
(lambda (segment)
(save_seg_rsynth_entry
(item.feat segment 'name)
(item.feat segment 'segment_start)
(item.feat segment 'segment_duration)
(mapcar
(lambda (targ_item)
(list
(item.feat targ_item "pos")
(item.feat targ_item "f0")))
(item.relation.daughters segment 'Target)) ;; list of targets
fd))
(utt.relation.items utt 'Segment))
(fclose fd)))
(define (save_seg_rsynth_entry name start dur targs fd)
"(save_seg_rsynth_entry ENTRY NAME START DUR TARGS FD)
Entry contains, (name duration num_targs start 1st_targ_pos 1st_targ_val)."
(format fd "%s %d " name (nint (* dur 1000)))
(if targs ;; if there are any targets
(mapcar
(lambda (targ) ;; targ_pos and targ_val
(let ((targ_pos (car targ))
(targ_val (car (cdr targ))))
(format fd "%d %d "
(nint (* 100 (/ (- targ_pos start) dur))) ;; % pos of target
(nint (parse-number targ_val))) ;; target value
))
targs))
(terpri fd)
(terpri fd)
)
(provide 'rsynth)

View File

@ -1,46 +0,0 @@
uh V
e e
a {
o Q
i I
u U
ii i
uu u
oo O
aa A
@@ 3
ai aI
ei eI
oi OI
au aU
ou @U
e@ e@
i@ I@
u@ U@
@ @
p b
t t
k k
b b
d d
g g
s s
z z
sh S
zh Z
f f
v v
th T
dh D
ch tS
jh dZ
h h
m m
n n
ng N
l l
ll 5
y j
r r
w w
# _

View File

@ -1,46 +0,0 @@
uh V
e e
a {
o Q
i I
u U
ii i
uu u
oo O
aa A
@@ 3
ai aI
ei eI
oi OI
au aU
ou @U
e@ e@
i@ I@
u@ U@
@ @
p b
t t
k k
b b
d d
g g
s s
z z
sh S
zh Z
f f
v v
th T
dh D
ch tS
jh dZ
h h
m m
n n
ng N
l l
ll 5
y j
r r
w w
# _

View File

@ -1,5 +0,0 @@
#!/usr/local/bin/perl -w
use strict;
use Rsynth::Elements;
read_elements();
write_elements(\*STDOUT);

View File

@ -1,5 +0,0 @@
#!/usr/local/bin/perl -w
use strict;
use Rsynth::Elements;
read_elements();
write_features(\*STDOUT);

View File

@ -1,2 +0,0 @@
#!/bin/sh
/home/nick/speech/festival/bin/festival --tts "$@"

View File

@ -1,214 +0,0 @@
/*
Copyright (c) 1994,2001-2002 Nick Ing-Simmons. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/
#include <config.h>
/* $Id: getarg.c,v 1.1 2006-06-11 07:13:25 urchlay Exp $
*/
char *getarg_id = "$Id: getarg.c,v 1.1 2006-06-11 07:13:25 urchlay Exp $";
#if defined(USE_PROTOTYPES) ? USE_PROTOTYPES : defined(__STDC__)
#include <stdarg.h>
#else
#include <varargs.h>
#endif
#include <stdio.h>
#include <ctype.h>
#include <useconfig.h>
#include "getargs.h"
int help_only = 0;
/*
Usage is like :
argc = getargs("Module",argc,argv,
"r", "%d", &rate, "Integer",
"u", "", &ufile_name, "String",
"g", "%d", &gain, "Double",
"a", NULL, &use_audio, "Boolean -a toggles, +a sets",
"s", "" , &speaker, "Boolean -s clears, +s sets",
NULL);
*/
#if defined(USE_PROTOTYPES) ? USE_PROTOTYPES : defined(__STDC__)
int
getargs(char *module,int argc, char *argv[],...)
#else
int
getargs(module, argc, argv, va_alist)
char *module;
int argc;
char *argv[];
va_dcl
#endif
{
va_list ap;
int i = 0;
int done_module = 0;
while (i < argc)
{
char *s = argv[i];
int flag = *s++;
if (*s && (flag == '-' || flag == '+'))
{
int off = 1;
while (*s)
{
char *a;
int count = 0;
#if defined(USE_PROTOTYPES) ? USE_PROTOTYPES : defined(__STDC__)
va_start(ap, argv);
#else
va_start(ap);
#endif
while ((a = va_arg(ap, char *)))
{
int l = strlen(a);
char *fmt = va_arg(ap, char *);
void *var = va_arg(ap, void *);
char *desc = va_arg(ap, char *);
if (!strcmp(s,"-help"))
{
help_only = 1;
if (!done_module++)
fprintf(stderr,"%s:\n",module);
if (fmt)
{char *x = strchr(fmt,'%');
if (x)
{
fprintf(stderr," -%s <%s> [",a,x+1);
switch(*(x+strlen(x)-1))
{
case 'e':
case 'f':
case 'g':
fprintf(stderr,fmt,*((double *) var));
break;
case 'u':
case 'd':
if (x[1] == 'l')
fprintf(stderr,fmt,*((long *) var));
else
fprintf(stderr,fmt,*((int *) var));
break;
}
fprintf(stderr,"]\t%s\n",desc);
}
else
fprintf(stderr," -%s <string> [%s]\t%s\n",a,
*((char **) var) ? *((char **) var) : "", desc);
}
else
{
fprintf(stderr," [+|-]%s [%s]\t%s\n",a,
*((int *) var) ? "yes" : "no",desc);
}
}
else if (l > 1)
{
if (!count && !strcmp(s, a))
{
if (fmt)
{
if (i + off < argc)
{
char *x = argv[i + off++];
if (strchr(fmt, '%'))
{
if (sscanf(x, fmt, var) != 1)
fprintf(stderr, "%s : %s invalid after -%s\n", argv[0], x, a);
}
else
*((char **) var) = x;
}
else
fprintf(stderr, "%s : no argument after -%s\n", argv[0], a);
}
else
{
if (flag == '+')
*((int *) var) = !0;
else
*((int *) var) = !*((int *) var);
}
/* skip to end of string */
count++;
s += l;
break; /* out of va_arg loop */
}
}
else
{
if (*s == *a)
{
if (fmt)
{
if (i + off < argc)
{
char *x = argv[i + off++];
if (strchr(fmt, '%'))
{
if (sscanf(x, fmt, var) != 1)
fprintf(stderr, "%s : %s invalid after -%s\n", argv[0], x, a);
}
else
*((char **) var) = x;
}
else
fprintf(stderr, "%s : no argument after -%s\n", argv[0], a);
}
else
{
if (fmt || flag == '+')
*((int *) var) = (flag == '+');
else
*((int *) var) = !*((int *) var);
}
count++;
s++;
break; /* out of va_arg loop */
}
}
}
va_end(ap);
if (!count)
{
off = 0;
break; /* Out of s loop */
}
}
if (off != 0)
{
int j;
argc -= off;
for (j = i; j <= argc; j++)
argv[j] = argv[j + off];
}
else
i++;
}
else
i++;
}
if (help_only && done_module)
fprintf(stderr,"\n");
return argc;
}

View File

@ -1,12 +1,12 @@
/* $Id: getargs.h,v 1.1 2006-06-11 07:13:25 urchlay Exp $
/* $Id: getargs.h,v 1.2 2006-06-11 21:49:07 stephena Exp $
*/
#ifndef GETARGS_H
#define GETARGS_H
#ifdef __cplusplus
extern "C" {
#endif
extern int getargs(char *module,int argc,char *argv[],...);
extern int help_only;

View File

@ -1,8 +0,0 @@
#!/bin/sh
if test $# -gt 0; then
dir=$1;
else
dir=.
fi
grep 'Revision:' ${dir}/Revision.c | sed 's/^.*Revision: *\([0-9.]*\).*$/\1/'

View File

@ -1,109 +0,0 @@
/*
Copyright (c) 1994,2001-2002 Nick Ing-Simmons. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "darray.h"
#include "charset.h"
#include "text.h"
#include "phones.h"
#include "lang.h"
#include "english.h"
#include "say.h"
lang_t *lang = &English;
unsigned
xlate_string(char *string, darray_ptr phone)
{
abort(); /* just a stub */
}
int main(int argc,char *argv[])
{
darray_t phone;
darray_init(&phone, sizeof(char), 128);
init_locale();
if (argc > 1)
{
rule_debug = 1;
while (--argc)
{
char *s = *++argv;
NRL(s,strlen(s),&phone);
darray_append(&phone,0);
printf("%s [%s]\n",s,(char *) darray_find(&phone,0));
phone.items = 0;
}
}
else
{
char buf[1024];
unsigned char *s;
unsigned total = 0;
unsigned right = 0;
while ((s = (unsigned char *) fgets(buf,sizeof(buf),stdin)))
{
while (*s && isspace(*s)) s++;
if (*s)
{
unsigned char *e = s;
unsigned char *p;
while (*e && !isspace(*e)) e++;
NRL(s,(e-s),&phone);
darray_append(&phone,0);
p = e;
while (*p && isspace(*p)) p++;
if (*p)
{
char *q = p;
total++;
while (*q && !isspace(*q)) q++;
*q++ = ' ';
*q = '\0';
if (strcmp(p,darray_find(&phone,0)) != 0)
{
printf("%.*s",(e-s),s);
printf(" expected /%s/, got /%s/\n",p,(char *) darray_find(&phone,0));
}
else
{
right++;
}
}
else
{
printf("%.*s",(e-s),s);
printf(" got /%s/\n",(char *) darray_find(&phone,0));
fflush(stdout);
}
phone.items = 0;
}
}
if (total)
{
fprintf(stderr,"%.3g%% correct\n",right*100.0/total);
}
}
return 0;
}

View File

@ -1,209 +0,0 @@
/*
Copyright (c) 2003 Nick Ing-Simmons.
All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/
#include "config.h"
#include "useconfig.h"
#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <ctype.h>
#include <fcntl.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/param.h>
#include <sys/signal.h>
#include <unistd.h>
// #define ALSA_PCM_OLD_HW_PARAMS_API
#include <alsa/asoundlib.h>
#include "l2u.h"
char *pcm_name = "default";
#include "getargs.h"
#include "hplay.h"
#define SAMP_RATE 11025
long samp_rate = SAMP_RATE;
/* Audio Parameters */
static int linear_fd = -1;
char *prog = "hplay";
static snd_pcm_t *pcm;
static snd_pcm_hw_params_t *hwparams;
static snd_pcm_uframes_t chunk;
static int
audio_open(void)
{
int err;
if ((err = snd_pcm_open(&pcm,pcm_name,SND_PCM_STREAM_PLAYBACK,0)) < 0)
{
fprintf(stderr,"Cannot open %s:%s",pcm_name,snd_strerror(err));
return 0;
}
else
{
unsigned int want = samp_rate;
int dir = 0;
snd_pcm_hw_params_malloc(&hwparams);
snd_pcm_hw_params_any(pcm,hwparams);
/* Check capabilities */
if ((err = snd_pcm_hw_params_set_access(pcm, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0)
{
fprintf(stderr,"Cannot set access %s:%s",pcm_name,snd_strerror(err));
return 0;
}
/* Set sample format */
if ((err=snd_pcm_hw_params_set_format(pcm, hwparams, SND_PCM_FORMAT_S16)) < 0)
{
fprintf(stderr,"Error setting format %s:%s",pcm_name,snd_strerror(err));
return(0);
}
#ifdef ALSA_PCM_OLD_HW_PARAMS_API
want = snd_pcm_hw_params_set_rate_near(pcm, hwparams, want, &dir);
#else
err = snd_pcm_hw_params_set_rate_near(pcm, hwparams, &want, &dir);
#endif
if (dir != 0 || want != samp_rate)
{
fprintf(stderr,"Wanted %ldHz, got %uHz (%d)",samp_rate,want,dir);
samp_rate = want;
}
if ((err=snd_pcm_hw_params_set_channels(pcm, hwparams, 1)) < 0)
{
fprintf(stderr,"Error setting channels %s:%s",pcm_name,snd_strerror(err));
return(0);
}
/* Apply HW parameter settings to */
/* PCM device and prepare device */
if ((err=snd_pcm_hw_params(pcm, hwparams)) < 0)
{
fprintf(stderr,"Error setting parameters %s:%s",pcm_name,snd_strerror(err));
return(0);
}
#ifdef ALSA_PCM_OLD_HW_PARAMS_API
chunk = snd_pcm_hw_params_get_buffer_size (hwparams);
#else
snd_pcm_hw_params_get_buffer_size (hwparams,&chunk);
#endif
return 1;
}
}
int
audio_init(int argc, char *argv[])
{
int rate_set = 0;
int use_audio = 1;
prog = argv[0];
argc = getargs("ALSA Sound driver",argc, argv,
"r", "%d", &rate_set, "Sample rate",
"A", "default", &pcm_name, "Device",
"a", NULL, &use_audio, "Audio enable",
NULL);
if (help_only)
return argc;
if (rate_set)
samp_rate = rate_set;
if (use_audio)
audio_open();
return argc;
}
void
audio_term(void)
{
/* Finish linear file */
if (linear_fd >= 0)
{
ftruncate(linear_fd, lseek(linear_fd, 0L, SEEK_CUR));
close(linear_fd);
linear_fd = -1;
}
/* Close audio system */
if (pcm)
{
int err = snd_pcm_drain(pcm);
if (err < 0)
{
fprintf(stderr,"%s:%s\n",pcm_name,snd_strerror(err));
}
if ((err = snd_pcm_close(pcm)) < 0)
{
fprintf(stderr,"%s:%s\n",pcm_name,snd_strerror(err));
}
pcm = 0;
}
if (hwparams)
{
snd_pcm_hw_params_free(hwparams);
hwparams = 0;
}
}
void
audio_play(int n, short *data)
{
if (n > 0)
{
if (linear_fd >= 0)
{
if (write(linear_fd, data, n) != n)
perror("write");
}
if (pcm)
{
snd_pcm_sframes_t ret;
while (n > 0)
{
size_t amount = ((size_t) n > chunk) ? chunk : (size_t) n;
while ((ret = snd_pcm_writei(pcm, data, amount)) < 0)
{
/* Pipe may well drain - but harmless as we write
whole words to the pipe
*/
if (ret != -EPIPE)
{
fprintf(stderr,"%s:%s\n",pcm_name,snd_strerror(ret));
}
snd_pcm_prepare(pcm);
}
n -= ret;
data += ret;
}
}
}
}

View File

@ -17,11 +17,23 @@
MA 02111-1307, USA
*/
/* $Id: hplay.h,v 1.1 2006-06-11 07:13:25 urchlay Exp $
/* $Id: hplay.h,v 1.2 2006-06-11 21:49:08 stephena Exp $
*/
#ifndef __HPLAY_H
#define __HPLAY_H
#ifdef __cplusplus
extern "C" {
#endif
extern char *program;
extern long samp_rate;
extern int audio_init(int argc, char *argv[]);
extern void audio_term(void);
extern void audio_play(int n, short *data);
#ifdef __cplusplus
}
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +0,0 @@
This is R-synth - a formant synthesizer.
R-synth takes a list of phonemes
described in John Well's SAMPA encoding of the IPA,
and generates speech using a digital model of the vocal tract.
The festival speech synthesis system, can use r-synth to generate a
voice to read conventional english text.
Prosodic information is generated by festival and fed to r-synth.

View File

@ -1,233 +0,0 @@
#!/bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5; it is not part of GNU.
#
# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
#
# This script is compatible with the BSD install script, but was written
# from scratch.
#
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
tranformbasename=""
transform_arg=""
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
dir_arg=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
-d) dir_arg=true
shift
continue;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
-s) stripcmd="$stripprog"
shift
continue;;
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
*) if [ x"$src" = x ]
then
src=$1
else
# this colon is to work around a 386BSD /bin/sh bug
:
dst=$1
fi
shift
continue;;
esac
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
else
true
fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
instcmd=:
else
instcmd=mkdir
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f $src -o -d $src ]
then
true
else
echo "install: $src does not exist"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
else
true
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
else
true
fi
fi
## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
pathcomp=''
while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
shift
if [ ! -d "${pathcomp}" ] ;
then
$mkdirprog "${pathcomp}"
else
true
fi
pathcomp="${pathcomp}/"
done
if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
else
# If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
true
fi
# Make a temp file name in the proper directory.
dsttmp=$dstdir/#inst.$$#
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp &&
trap "rm -f ${dsttmp}" 0 &&
# and set any options; do chmod last to preserve setuid bits
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile
fi &&
exit 0

View File

@ -1,571 +0,0 @@
/*
Copyright (c) 1994 Nick Ing-Simmons. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/
short _u2l[] =
{
-32256, -31228, -30200, -29172, -28143, -27115, -26087, -25059,
-24031, -23002, -21974, -20946, -19918, -18889, -17861, -16833,
-16062, -15548, -15033, -14519, -14005, -13491, -12977, -12463,
-11949, -11435, -10920, -10406, -9892, -9378, -8864, -8350,
-7964, -7707, -7450, -7193, -6936, -6679, -6422, -6165,
-5908, -5651, -5394, -5137, -4880, -4623, -4365, -4108,
-3916, -3787, -3659, -3530, -3402, -3273, -3144, -3016,
-2887, -2759, -2630, -2502, -2373, -2245, -2116, -1988,
-1891, -1827, -1763, -1698, -1634, -1570, -1506, -1441,
-1377, -1313, -1249, -1184, -1120, -1056, -992, -927,
-879, -847, -815, -783, -751, -718, -686, -654,
-622, -590, -558, -526, -494, -461, -429, -397,
-373, -357, -341, -325, -309, -293, -277, -261,
-245, -228, -212, -196, -180, -164, -148, -132,
-120, -112, -104, -96, -88, -80, -72, -64,
-56, -48, -40, -32, -24, -16, -8, 0,
32256, 31228, 30200, 29172, 28143, 27115, 26087, 25059,
24031, 23002, 21974, 20946, 19918, 18889, 17861, 16833,
16062, 15548, 15033, 14519, 14005, 13491, 12977, 12463,
11949, 11435, 10920, 10406, 9892, 9378, 8864, 8350,
7964, 7707, 7450, 7193, 6936, 6679, 6422, 6165,
5908, 5651, 5394, 5137, 4880, 4623, 4365, 4108,
3916, 3787, 3659, 3530, 3402, 3273, 3144, 3016,
2887, 2759, 2630, 2502, 2373, 2245, 2116, 1988,
1891, 1827, 1763, 1698, 1634, 1570, 1506, 1441,
1377, 1313, 1249, 1184, 1120, 1056, 992, 927,
879, 847, 815, 783, 751, 718, 686, 654,
622, 590, 558, 526, 494, 461, 429, 397,
373, 357, 341, 325, 309, 293, 277, 261,
245, 228, 212, 196, 180, 164, 148, 132,
120, 112, 104, 96, 88, 80, 72, 64,
56, 48, 40, 32, 24, 16, 8, 0
};
static unsigned char _l2u_[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, 0x19,
0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1D, 0x1D, 0x1D, 0x1D,
0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E,
0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21,
0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23,
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25,
0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x26, 0x26, 0x26,
0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x27, 0x27, 0x27,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x28,
0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x29, 0x29,
0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29,
0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2A, 0x2A,
0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2B,
0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B,
0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2C, 0x2C,
0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2D, 0x2D,
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2F, 0x2F,
0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x30,
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31,
0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x32,
0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x33,
0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x34,
0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x35,
0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37,
0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x38,
0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x39,
0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x3A,
0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3B,
0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3C,
0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3D,
0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45,
0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47,
0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,
0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D,
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F,
0x50, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51, 0x51, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53,
0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x56, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57,
0x58, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x59, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B,
0x5C, 0x5C, 0x5C, 0x5C, 0x5D, 0x5D, 0x5D, 0x5D, 0x5E, 0x5E, 0x5E, 0x5E, 0x5F, 0x5F, 0x5F, 0x5F,
0x60, 0x60, 0x61, 0x61, 0x62, 0x62, 0x63, 0x63, 0x64, 0x64, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67,
0x68, 0x68, 0x68, 0x69, 0x69, 0x6A, 0x6A, 0x6B, 0x6B, 0x6C, 0x6C, 0x6D, 0x6D, 0x6E, 0x6E, 0x6F,
0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E,
0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0,
0xEF, 0xEF, 0xEE, 0xEE, 0xED, 0xED, 0xEC, 0xEC, 0xEB, 0xEB, 0xEA, 0xEA, 0xE9, 0xE9, 0xE8, 0xE8,
0xE7, 0xE7, 0xE6, 0xE6, 0xE5, 0xE5, 0xE4, 0xE4, 0xE3, 0xE3, 0xE2, 0xE2, 0xE1, 0xE1, 0xE0, 0xE0,
0xDF, 0xDF, 0xDF, 0xDF, 0xDE, 0xDE, 0xDE, 0xDE, 0xDD, 0xDD, 0xDD, 0xDD, 0xDC, 0xDC, 0xDC, 0xDC,
0xDB, 0xDB, 0xDB, 0xDB, 0xDA, 0xDA, 0xDA, 0xDA, 0xD9, 0xD9, 0xD9, 0xD9, 0xD8, 0xD8, 0xD8, 0xD8,
0xD7, 0xD7, 0xD7, 0xD7, 0xD6, 0xD6, 0xD6, 0xD6, 0xD5, 0xD5, 0xD5, 0xD5, 0xD4, 0xD4, 0xD4, 0xD4,
0xD3, 0xD3, 0xD3, 0xD3, 0xD2, 0xD2, 0xD2, 0xD2, 0xD1, 0xD1, 0xD1, 0xD1, 0xD0, 0xD0, 0xD0, 0xD0,
0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE,
0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA,
0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8,
0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4,
0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2,
0xC2, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0xC0, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
0xBF, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
0xBE, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
0xBD, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
0xBC, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
0xBB, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
0xBA, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
0xB9, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
0xB8, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,
0xB7, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
0xB6, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
0xB5, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
0xB4, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
0xB3, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
0xB2, 0xB2, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
0xB1, 0xB1, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
0xAF, 0xAF, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
0xAE, 0xAE, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
0xAD, 0xAD, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
0xAC, 0xAC, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
0xAA, 0xAA, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
0xA9, 0xA9, 0xA9, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
0xA8, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
0xA6, 0xA6, 0xA6, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
0xA3, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
0xA2, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
0xA1, 0xA1, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
0xA0, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
0x9F, 0x9F, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
0x9E, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x89, 0x89,
0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88,
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x87,
0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86,
0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85,
0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84,
0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83,
0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82,
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x81,
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80
};
unsigned char *_l2u = _l2u_ + 4096;

View File

@ -1,5 +0,0 @@
extern short _u2l[]; /* 8-bit u-law to 16-bit PCM */
extern unsigned char *_l2u; /* 13-bit PCM to 8-bit u-law */
#define ulaw2short(X) (_u2l[(unsigned char) (X)])
#define short2ulaw(X) (_l2u[((short)(X)) >> 3])

View File

@ -1,5 +1,10 @@
#ifndef LANG_H
#define LANG_H
#ifdef __cplusplus
extern "C" {
#endif
#include "darray.h"
extern char **dialect;
@ -28,7 +33,14 @@ typedef struct lang_s
extern unsigned char *dict_find(const char *s, unsigned n);
extern lang_t *lang;
/* FIXME - the following was the original code
I guess it needs to be defined in SpeakJet ??
For now, it's defined in english.h
extern lang_t *lang;
*/
static lang_t *lang = 0;
#define isvowel(c,m) (*lang->vowel)(c,m)
#define isconsonant(c) (*lang->consonant)(c)
#define xlate_ordinal(v,p) (*lang->ordinal)(v,p)
@ -36,4 +48,8 @@ extern lang_t *lang;
#define dict_find(s,n) ((lang->lookup) ? (*lang->lookup)(s,n) : 0)
#define have_dict (lang->lookup != 0)
#ifdef __cplusplus
}
#endif
#endif /* LANG_H */

View File

@ -1,24 +0,0 @@
#!/usr/local/bin/new/perl -w
use DB_File;
use Fcntl;
use strict;
my $dict = shift;
die "No $dict" unless -r $dict;
my %dict;
my $h = tie %dict, 'DB_File', $dict, O_RDONLY, 0644, $DB_BTREE;
$h = tie %dict, 'DB_File', $dict, O_RDONLY, 0644, $DB_HASH unless $h;
die "Cannot tie $dict:$!" unless $h;
while (my ($key,$val) = each %dict)
{
print "$key\n";
}
untie %dict;

View File

@ -1,14 +0,0 @@
#!/usr/local/bin/perl -w
use GDBM_File;
$dict = shift;
tie( %dict, 'GDBM_File', $dict, &GDBM_READER, 0644) || die "Cannot tie $dict:$!";
while (($key,$val) = each %dict)
{
print "$key\n";
}
untie %dict;

View File

@ -1,5 +0,0 @@
Mbrola was developed by Thierry Dutoit.
It is a speech synthesizer based on the concatenation of diphones.
It takes a list of phonemes as input, together with prosodic
information, and produces speech at the sampling frequency of the
diphone database.

View File

@ -1,174 +0,0 @@
/*
Copyright (c) 1994,2001-2002 Nick Ing-Simmons. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "config.h"
#include <stdio.h>
#include <ctype.h>
#include "useconfig.h"
#include "trie.h"
#include "darray.h"
#include "phones.h"
#include "charset.h" /* national differences ,jms */
#include "dbif.h"
trie_ptr phones;
static void enter_phones(void);
static void
enter_phones(void)
{
int i;
char *s;
for (i = 1; (s = ph_name[i]); i++)
trie_insert(&phones, s, (void *) i);
}
static inline int
Delete(unsigned char *p)
{
int ch = *p;
while (*p)
{
*p = p[1];
p++;
}
return ch;
}
static void enter_words(DB_HANDLE db, FILE * f)
{
char buf[4096];
unsigned words = 0;
while (fgets(buf, sizeof(buf), f))
{
char *s = buf;
char *h = strchr(s, '#');
if (h)
*h = '\0';
while (isspace((unsigned char)*s))
s++;
if (*s)
{
unsigned char *p = (unsigned char *) s;
while (!isspace(*p))
{
if (*p == '"' || *p == '~' || *p == '<')
{
unsigned char *x = p;
*x = accent(x[0], x[1]);
x++;
strcpy((char *)x,(char *)x+1);
}
else if (*p == '\\')
{
unsigned char *x = p;
*x = accent(x[1], x[2]);
x++;
strcpy((char *) x,(char *)x+2);
}
if (isupper(*p))
*p = tolower(*p);
else if (!isalpha(*p) && *p != '\'' && *p != '-' && *p != '_' && *p != '.')
break;
p++;
}
if (isspace(*p))
{
char codes[4096];
char *d = codes;
int ok = 1;
int stress = 0;
DATUM key;
DATUM_SET(key, s, (char *) p - s);
if (++words % 10000 == 0)
{
printf("%d %.*s\n",words, (int) DATUM_SIZE(key), (char *) DATUM_DATA(key));
}
while (*p && ok)
{
unsigned code;
while (isspace(*p))
p++;
if (*p)
{
unsigned char *e = p;
while (isalpha(*e) || *e == '1' || *e == '2')
{
if (*e == '1' || *e == '2')
stress = 1;
else if (islower(*e))
*e = toupper(*e);
e++;
}
if (*e == '0')
*e++ = ' ';
if (e > p && (code = (unsigned) trie_lookup(&phones, (char **) &p)))
*d++ = code;
else
{
fprintf(stderr, "Bad code %.*s>%s", (int)((char *) p - s), s, p);
ok = 0;
break;
}
}
}
if (ok)
{
DATUM data;
DATUM_SET(data, codes, d - codes);
DB_STORE(db, key, data);
}
}
else
{
if (*p != '(')
fprintf(stderr, "Ignore (%c) %s", *p, s);
}
}
}
}
int main(int argc, char *argv[], char *env[]);
int
main(int argc, char **argv, char **envp)
{
init_locale();
if (argc == 3)
{
FILE *f = fopen(argv[1], "r");
if (f)
{
DB_HANDLE db;
DB_OPEN_WRITE(db,argv[2]);
if (db)
{
enter_phones();
enter_words(db, f);
DB_CLOSE(db);
}
else
perror(argv[2]);
fclose(f);
}
else
perror(argv[1]);
}
return 0;
}

View File

@ -1,150 +0,0 @@
/*
Copyright (c) 1998,2001-2002 Nick Ing-Simmons. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/
#include "config.h"
#include "useconfig.h"
#include <sys/time.h>
#include <sys/stat.h>
#ifdef __GNUC__
#define NeedFunctionPrototypes 1
#define NeedNestedPrototypes 1
#endif
#include <audio/audiolib.h>
#include <audio/soundlib.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <ctype.h>
#include "getargs.h"
#include "hplay.h"
long samp_rate = 8000;
static int volume = 100;
static char *audioserver = NULL;
static AuServer *aud;
static void done(AuServer * aud, AuEventHandlerRec * handler, AuEvent * ev, AuPointer data)
{
switch (ev->auany.type)
{
case AuEventTypeElementNotify:
{
int *d = (int *) data;
*d = (ev->auelementnotify.cur_state == AuStateStop);
if (!*d || ev->auelementnotify.reason != AuReasonEOF)
{
fprintf(stderr, "curr_state=%d reason=%d\n",
ev->auelementnotify.cur_state,
ev->auelementnotify.reason);
}
}
break;
case AuEventTypeMonitorNotify:
break;
default:
fprintf(stderr, "type=%d serial=%ld time=%ld id=%ld\n",
ev->auany.type, ev->auany.serial, ev->auany.time, ev->auany.id);
break;
}
}
void
audio_play(int n,short *data)
{
int endian = 1;
#define little_endian ((*((char *)&endian) == 1))
int priv = 0;
AuEvent ev;
Sound s = SoundCreate(SoundFileFormatNone, little_endian ?
AuFormatLinearSigned16LSB : AuFormatLinearSigned16MSB,
1, samp_rate, n, "Chit chat");
if (aud)
{
#ifdef USE_ALL_ARGS
AuStatus ret_status;
AuFlowID flow = 0;
int monitor = 0;
int multiplier = 0;
if (!AuSoundPlayFromData(aud, s, data, AuNone,
AuFixedPointFromFraction(volume, 100),
done, &priv,
&flow, &multiplier,
&monitor, &ret_status))
#else
if (!AuSoundPlayFromData(aud, s, data, AuNone,
AuFixedPointFromFraction(volume, 100),
done, &priv,
NULL, NULL, NULL, NULL))
#endif
perror("problems playing data");
else
{
while (1)
{
AuNextEvent(aud, AuTrue, &ev);
AuDispatchEvent(aud, &ev);
if (priv)
break;
}
}
}
SoundDestroy(s);
}
void
audio_term(void)
{
if (aud)
{
AuFlush(aud);
AuCloseServer(aud);
}
}
int
audio_init(int argc,char *argv[])
{
int rate_set = samp_rate;
int vol = 0;
argc = getargs("Nas",argc, argv,
"r", "%d", &rate_set, "Sample rate Hz",
"V", "%d", &vol, "Volume 0 .. 1.0",
"a", "", &audioserver,"Name of server",
NULL);
if (help_only)
return argc;
if ((aud = AuOpenServer(audioserver, 0, NULL, 0, NULL, NULL)) == (AuServer *) 0)
perror(audioserver);
if (rate_set && rate_set != samp_rate)
samp_rate = rate_set;
if (vol)
volume = vol;
return argc;
}

View File

@ -1,3 +1,6 @@
#ifndef __PHFEAT_H
#define __PHFEAT_H
#define unr 0x00000000
#define rnd 0x00000001
#define low 0x00000002
@ -31,3 +34,5 @@
#define gld 0x20000000
#define lbv 0x40000000
#define pal 0x80000000
#endif

View File

@ -1,3 +1,10 @@
#ifndef __PHONES_H
#define __PHONES_H
#ifdef __cplusplus
extern "C" {
#endif
#define PHONE(nm,st,br,am,ex) nm
enum phone_e { SIL,
#include "phones.def"
@ -6,3 +13,9 @@ END };
extern char *ph_name[];
extern char *ph_br[];
extern char *ph_am[];
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,10 +0,0 @@
Once upon a time there were three bears, they had
problems with nasty nasal noises until they took to drinking herbal tea.
Simulated singing is not a sin.
A bird in the hand is worth two in the bush.
Hello Medi.
Help!
Hello Ginger!
What do you want for supper Dudley?
I am sorry I cannot do that Dave.
01454 619107 This is a computer, please leave a message after the tone.

View File

@ -1,111 +0,0 @@
COMMENT("We are using COMMENT() so this file can be perl or C");
COMMENT("Silences");
enter(".","END",NULL); COMMENT("This is 1st non-aware upper layer can inject");
enter(" ","Q",NULL); COMMENT("This is 1st non-aware upper layer can inject");
enter("_","Q",NULL); COMMENT("'mbrola' compatibility");
enter("#","Q",NULL); COMMENT("'mbrola' compatibility");
COMMENT("Affricates (compounds) - put before singles to aid lookup");
enter("tS","T","CH",NULL);
enter("dZ","D","DY","DZ","ZH","ZH",NULL);
COMMENT("Plosives");
enter("p","P","PY","PZ",NULL);
enter("b","B","BY","BZ",NULL);
enter("t","T","TY","TZ",NULL);
enter("d","D","DY","DZ",NULL);
enter("k","K","KY","KZ",NULL);
enter("g","G","GY","GZ",NULL);
enter("?","QQ",NULL); COMMENT("stop-ness - not quite glottal stop");
COMMENT("Nasals");
enter("m","M",NULL);
enter("n","N",NULL);
enter("N","NG",NULL);
COMMENT("Trills and flaps");
enter("4","DT",NULL);
enter("rr","R","QQ","R",NULL);
enter("R","RX",NULL);
enter("`","RX",NULL); COMMENT("rhoticity diacritic - fallback");
COMMENT("Fricatives");
enter("f","F",NULL);
enter("v","V",NULL);
enter("T","TH",NULL);
enter("D","DH",NULL);
enter("s","S",NULL);
enter("z","Z",NULL);
enter("S","SH",NULL);
enter("Z","ZH",NULL);
enter("x","X",NULL);
enter("h","H",NULL);
COMMENT("Latterals");
enter("l","L",NULL);
enter("K","HL",NULL);
enter("5","LL",NULL);
COMMENT("Approximants");
enter("w","W",NULL);
enter("j","Y",NULL);
enter("r","R",NULL);
COMMENT("Dipthongs");
enter("eI","AI","I",NULL);
enter("aI","IE","I",NULL);
enter("OI","OI","I",NULL);
enter("aU","AI","OV",NULL);
enter("@U","OA","OV",NULL);
enter("I@","IA","IB",NULL);
enter("e@","AIR","IB",NULL);
enter("U@","OOR","IB",NULL);
enter("O@","OI","IB",NULL);
enter("oU","o","OV",NULL);
COMMENT("close vowels");
enter("i","EE",NULL);
enter("y","YY",NULL);
enter("1","EY",NULL);
enter("}","JU",NULL);
enter("M","UW",NULL);
enter("u","UU",NULL);
COMMENT("lax vowels");
enter("I","I",NULL);
enter("Y","IU",NULL);
enter("U","OO",NULL);
COMMENT("close-mid vowels");
enter("e","e",NULL);
enter("e~","eN",NULL);
enter("2","EU",NULL);
enter("@\\","Ur",NULL);
enter("8","UR",NULL);
enter("7","UE",NULL);
enter("o","o",NULL);
enter("o~","oN",NULL);
COMMENT("schwa");
enter("@","A",NULL);
COMMENT("open-mid vowels");
enter("E","EH",NULL);
enter("9","oe",NULL);
enter("9~","oeN",NULL);
enter("3","ER",NULL);
enter("3\\","Er",NULL);
enter("V","U",NULL);
enter("O","AW",NULL);
enter("{","AA",NULL);
enter("6","AA",NULL);
COMMENT("open vowels");
enter("a", "a",NULL);
enter("a~", "aN",NULL);
enter("&", "OE",NULL);
enter("A","AR",NULL);
enter("Q","O",NULL);

View File

@ -1,6 +1,18 @@
/* $Id: phtoelm.h,v 1.1 2006-06-11 07:13:26 urchlay Exp $
/* $Id: phtoelm.h,v 1.2 2006-06-11 21:49:09 stephena Exp $
*/
#ifndef __PHTOELM_H
#define __PHTOELM_H
#ifdef __cplusplus
extern "C" {
#endif
struct rsynth_s;
extern unsigned phone_to_elm (char *s, int n, darray_ptr elm, darray_ptr f0);
extern void say_pho(struct rsynth_s *rsynth, const char *path, int dodur,char *phoneset);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1 +1,10 @@
extern FILE *par_file;
#ifndef __PLOTPARM_H
#define __PLOTPARM_H
#ifdef __cplusplus
extern "C" {
extern FILE *par_file;
}
#endif
#endif

View File

@ -1,115 +0,0 @@
#!/usr/local/bin/perl -w
use strict;
use Rsynth::Elements;
read_elements();
my @seq;
sub NULL () { undef }
sub enter
{
my ($ph,@elem) = @_;
push(@seq,[$ph,@elem]);
}
sub COMMENT
{
my ($c) = @_;
push(@seq,$c);
}
do "phtoelm.def";
die $@ if $@;
my @list = @eNames;
while (@list)
{
my $e1 = shift(@list);
foreach my $e2 (@list)
{
if (my $why = differ($e1,$e2))
{
#warn "$e1 differs from $e2 on $why\n";
}
else
{
warn "$e1 seems to be same as $e2\n";
}
}
}
sub differ
{
my ($e1,$e2) = @_;
foreach my $k (qw(rk))
{
return $k if $elem{$e1}{$k} != $elem{$e2}{$k};
}
my $f1 = join('|',grep { $_ } sort keys %{$elem{$e1}{features}});
my $f2 = join('|',grep { $_ } sort keys %{$elem{$e2}{features}});
foreach my $p (@pNames)
{
for my $i (0..4)
{
if ($elem{$e1}{$p}[$i] != $elem{$e2}{$p}[$i])
{
if ($f1 eq $f2)
{
warn "$e1 and $e2 differ on $p\[$i] but share $f1\n";
}
return "$p\[$i\]";
}
}
}
foreach my $k (qw(rk du ud))
{
if ($elem{$e1}{$k} != $elem{$e2}{$k})
{
warn "$e1 and $e2 seem same except for $k\n";
return $k;
}
}
if ( $f1 ne $f2 )
{
warn "$e1 and $e2 seem same except for $f1 vs $f2\n";
}
return "";
}
my %seen;
my @names;
foreach my $p (@seq)
{
next unless ref($p);
my ($ph,@elem) = @$p;
foreach my $e (@elem)
{
last unless defined $e;
die "$ph needs $e" unless exists $elem{$e};
unless ($seen{$e}++)
{
# warn "Add $e for $ph\n";
push(@names,$e);
}
}
}
foreach my $e (@eNames)
{
unless (exists $seen{$e})
{
warn "$e not used by any phone\n";
push(@names,$e);
}
}
@eNames = @names;
write_elements("Elements.new");

View File

@ -20,14 +20,12 @@
#ifndef RSYNTH_H
#define RSYNTH_H
#include "darray.h"
#include "trie.h"
#ifdef __cplusplus
extern "C" {
#endif
#include "darray.h"
#include "trie.h"
typedef struct
{float stdy; /* steady state value of paramter */
@ -72,7 +70,7 @@ typedef struct Elm_s
char rk; /* Rank of element (obsolete) */
char du; /* Normal duration */
char ud; /* Unstressed duration */
unsigned char *unicode; /* UTF-8 for phonetic symbols */
char *unicode; /* UTF-8 for phonetic symbols */
char *sampa; /* SAMPA string for phonetic symbol */
long feat; /* features of the phone */
interp_t p[nEparm]; /* Table of parameter values */

View File

@ -1,132 +0,0 @@
<html>
<head><title>SAMPA and Unicode IPA</title>
<style type="text/css">
td.unicode {font-family:"arial unicode ms","lucida sans unicode","fixed"}
</style>
</head>
<body>
<h1>SAMPA computer readable phonetic alphabet and Unicode IPA</h1>
<table align=center width=90%>
<tr><th colspan="6">(x-)sampa Mappings with documented Unicode</i></th></tr>
<tr><th colspan="6">Vowels</th></tr>
<tr><th>SAMPA</th><th CLASS='unicode'>IPA</th><th>hex</th><th>dec</th><th>Phonetic Description</th><th> Example </th></tr>
<tr><td>i</td><td CLASS='unicode'>&#105;</td><td>0069</td><td>105</td><td>close front unrounded</td><td>Eng. ee</td></tr>
<tr><td>y</td><td CLASS='unicode'>&#121;</td><td>0079</td><td>121</td><td>close front rounded</td><td>Eng. y</td></tr>
<tr><td>1</td><td CLASS='unicode'>&#616;</td><td>0268</td><td>616</td><td>close central unrounded</td><td>Welsh. <i>lleyn</i> </td></tr>
<tr><td>}</td><td CLASS='unicode'>&#649;</td><td>0289</td><td>649</td><td>close central rounded</td><td>Swedish <i>sju</i> </td></tr>
<tr><td>M</td><td CLASS='unicode'>&#623;</td><td>026F</td><td>623</td><td>close back umrounded (Card.)</td><td></td></tr>
<tr><td>u</td><td CLASS='unicode'>&#117;</td><td>0075</td><td>117</td><td>close back rounded</td><td>Eng. oo</td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>I</td><td CLASS='unicode'>&#618;</td><td>026A</td><td>618</td><td>lax close front unrounded</td><td>Eng. <i>kit</i> </td></tr>
<tr><td>Y</td><td CLASS='unicode'>&#655;</td><td>028F</td><td>655</td><td>lax [y]</td><td>Ger. <i>h&uuml;bsch</i> </td></tr>
<tr><td>U</td><td CLASS='unicode'>&#650;</td><td>028A</td><td>650</td><td>lax close back rounded</td><td>Eng. <i>foot</i> </td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>e</td><td CLASS='unicode'>&#101;</td><td>0065</td><td>101</td><td>close-mid front unrounded</td><td></td></tr>
<tr><td>2</td><td CLASS='unicode'>&#248;</td><td>00F8</td><td>248</td><td>close-mid front rounded</td><td>Fr. <i>deux</i> </td></tr>
<tr><td>@\</td><td CLASS='unicode'>&#600;</td><td>0258</td><td>600</td><td>close-mid central unrounded</td><td></td></tr>
<tr><td>8</td><td CLASS='unicode'>&#629;</td><td>0275</td><td>629</td><td>close-mid central rounded</td><td></td></tr>
<tr><td>7</td><td CLASS='unicode'>&#612;</td><td>0264</td><td>612</td><td>close-mid back unrounded (Card.)</td><td></td></tr>
<tr><td>o</td><td CLASS='unicode'>&#111;</td><td>006f</td><td>111</td><td>close-mid back rounded</td><td></td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>@</td><td CLASS='unicode'>&#601;</td><td>0259</td><td>601</td><td>schwa</td><td>Eng. <i>banana</i> </td></tr>
<tr><td>@`</td><td CLASS='unicode'>&#602;</td><td>025A</td><td>602</td><td>rhotacized schwa</td><td></td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>E</td><td CLASS='unicode'>&#603;</td><td>025B</td><td>603</td><td>open-mid front unrounded (Card.3)</td><td>Fr. <i>m&ecirc;me</i> </td></tr>
<tr><td>9</td><td CLASS='unicode'>&#339;</td><td>0153</td><td>339</td><td>open-mid front rounded</td><td>Fr. <i>neuf</i> </td></tr>
<tr><td>3</td><td CLASS='unicode'>&#604;</td><td>025C</td><td>604</td><td>long mid central</td><td>Eng. <i>n<b>ur</b>se</i> </td></tr>
<tr><td>3`</td><td CLASS='unicode'>&#605;</td><td>025D</td><td>605</td><td>rhotacized open-mid central</td><td>Amer. <i>b<b>ir</b>d</i></td></tr>
<tr><td>3\</td><td CLASS='unicode'>&#606;</td><td>025E</td><td>606</td><td>open-mid central rounded</td><td></td></tr>
<tr><td>V</td><td CLASS='unicode'>&#652;</td><td>028C</td><td>652</td><td>open-mid back unrounded</td><td>Eng. <i>strut</i> </td></tr>
<tr><td>O</td><td CLASS='unicode'>&#596;</td><td>0254</td><td>596</td><td>open-mid back rounded</td><td>Eng. <i>thought</i> </td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>{</td><td CLASS='unicode'>&#230;</td><td>00E6</td><td>230</td><td>near-open front unrounded</td><td>Eng. <i>trap</i> </td></tr>
<tr><td>6</td><td CLASS='unicode'>&#592;</td><td>0250</td><td>592</td><td>open schwa</td><td>Ger. <i>besser</i> </td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>a</td><td CLASS='unicode'>&#97;</td><td>0061</td><td>97</td><td>open front unrounded</td><td>Eng. a</td></tr>
<tr><td>&amp;</td><td CLASS='unicode'>&#630;</td><td>0276</td><td>630</td><td>open front rounded</td><td></td></tr>
<tr><td>A</td><td CLASS='unicode'>&#593;</td><td>0251</td><td>593</td><td>open back unrounded (Card. 5)</td><td>Eng. <i>start</i> </td></tr>
<tr><td>Q</td><td CLASS='unicode'>&#594;</td><td>0252</td><td>594</td><td>open back rounded</td><td>Eng. <i>l<b>o</b>t</i> </td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><th colspan="6">Consonants</th></tr>
<tr><th>SAMPA</th><th CLASS='unicode'>IPA</th><th>hex</th><th>dec</th><th>Phonetic Description</th><th> Example </th></tr>
<tr><td>p</td><td CLASS='unicode'>&#112;</td><td>0070</td><td>112</td><td>voiceless bilabial plosive</td><td>Eng. p</td></tr>
<tr><td>b</td><td CLASS='unicode'>&#98;</td><td>0062</td><td>98</td><td>voiced blibaial plosive</td><td>Eng. b</td></tr>
<tr><td>t</td><td CLASS='unicode'>&#116;</td><td>0074</td><td>116</td><td>voiceless alveolar plosive</td><td>Eng. t</td></tr>
<tr><td>d</td><td CLASS='unicode'>&#100;</td><td>0064</td><td>100</td><td>voiced alveolar plosive</td><td>Eng. d</td></tr>
<tr><td>t`</td><td CLASS='unicode'>&#648;</td><td>0288</td><td>648</td><td>retroflex plosive, voiceless</td><td></td></tr>
<tr><td>d`</td><td CLASS='unicode'>&#598;</td><td>0256</td><td>598</td><td>retroflex plosive, voiced</td><td></td></tr>
<tr><td>c</td><td CLASS='unicode'>&#99;</td><td>0063</td><td>99</td><td>voiceless palatal plosive</td><td></td></tr>
<tr><td>k</td><td CLASS='unicode'>&#107;</td><td>006b</td><td>107</td><td>voiceless velar plosive</td><td>Eng. k</td></tr>
<tr><td>g</td><td CLASS='unicode'>&#103;</td><td>0067</td><td>103</td><td>voiced velar plosive</td><td>Eng. g</td></tr>
<tr><td>q</td><td CLASS='unicode'>&#113;</td><td>0071</td><td>113</td><td>voiceless uvular plosive</td><td></td></tr>
<tr><td>?</td><td CLASS='unicode'>&#660;</td><td>0294</td><td>660</td><td>glottal stop</td><td>Ger. <i>Verein</i>, also Danish <i>st&oslash;d</i> </td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>m</td><td CLASS='unicode'>&#109;</td><td>006d</td><td>109</td><td>bilabial nasal</td><td>Eng. m</td></tr>
<tr><td>F</td><td CLASS='unicode'>&#625;</td><td>0271</td><td>625</td><td>labiodental nasal</td><td></td></tr>
<tr><td>n</td><td CLASS='unicode'>&#110;</td><td>006e</td><td>110</td><td>alveolar nasal</td><td>Eng. n</td></tr>
<tr><td>n`</td><td CLASS='unicode'>&#627;</td><td>0273</td><td>627</td><td>retroflex nasal</td><td></td></tr>
<tr><td>J</td><td CLASS='unicode'>&#626;</td><td>0272</td><td>626</td><td>palatal nasal</td><td>Sp. <i>a&ntilde;o</i> </td></tr>
<tr><td>N</td><td CLASS='unicode'>&#331;</td><td>014B</td><td>331</td><td>velar nasal</td><td>Eng. <i>thing</i> </td></tr>
<tr><td>N\</td><td CLASS='unicode'>&#628;</td><td>0274</td><td>628</td><td>uvular nasal</td><td></td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>r</td><td CLASS='unicode'>&#114;</td><td>0072</td><td>114</td><td>alveolar trill</td><td>Eng. r</td></tr>
<tr><td>R\</td><td CLASS='unicode'>&#640;</td><td>0280</td><td>640</td><td>uvular trill</td><td></td></tr>
<tr><td>4</td><td CLASS='unicode'>&#638;</td><td>027E</td><td>638</td><td>alveolar tap</td><td>Amer. <i>bu<b>tt</b>er</i> </td></tr>
<tr><td>r`</td><td CLASS='unicode'>&#637;</td><td>027D</td><td>637</td><td>retroflex flap</td><td></td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>p\</td><td CLASS='unicode'>&#632;</td><td>0278</td><td>632</td><td>bilabial fricative, voiceless</td><td></td></tr>
<tr><td>B</td><td CLASS='unicode'>&#946;</td><td>03B2</td><td>946</td><td>voiced bilabial fricative</td><td>Sp. <i>cabo</i> </td></tr>
<tr><td>f</td><td CLASS='unicode'>&#102;</td><td>0066</td><td>102</td><td>voiceless labiodental fricative</td><td>Eng. f</td></tr>
<tr><td>v</td><td CLASS='unicode'>&#118;</td><td>0076</td><td>118</td><td>voiced labiodental fricative</td><td>Eng. v</td></tr>
<tr><td>T</td><td CLASS='unicode'>&#952;</td><td>03B8</td><td>952</td><td>voiceless dental fricative</td><td>Eng. <i>thin</i> </td></tr>
<tr><td>D</td><td CLASS='unicode'>&#240;</td><td>00F0</td><td>240</td><td>voiced dental fricative</td><td>Eng. <i>then</i> </td></tr>
<tr><td>s</td><td CLASS='unicode'>&#115;</td><td>0073</td><td>115</td><td>voiceless alveolar fricative</td><td>Eng. s</td></tr>
<tr><td>z</td><td CLASS='unicode'>&#122;</td><td>007a</td><td>122</td><td>voiced alveolar fricative</td><td>Eng. z</td></tr>
<tr><td>S</td><td CLASS='unicode'>&#643;</td><td>0283</td><td>643</td><td>voiceless palatoalveolar fricative</td><td>Eng. <i>ship</i> </td></tr>
<tr><td>Z</td><td CLASS='unicode'>&#658;</td><td>0292</td><td>658</td><td>vd. palatoalveolar fric.</td><td>Eng. <i>measure</i> </td></tr>
<tr><td>s`</td><td CLASS='unicode'>&#642;</td><td>0282</td><td>642</td><td>retroflex fricative, voiceless</td><td></td></tr>
<tr><td>z`</td><td CLASS='unicode'>&#656;</td><td>0290</td><td>656</td><td>retroflex fricative, voiced</td><td></td></tr>
<tr><td>C</td><td CLASS='unicode'>&#231;</td><td>00E7</td><td>231</td><td>voiceless palatal fricative</td><td>Ger. <i>ich</i> </td></tr>
<tr><td>j\</td><td CLASS='unicode'>&#669;</td><td>029D</td><td>669</td><td>palatal fricative, voiced</td><td></td></tr>
<tr><td>x</td><td CLASS='unicode'>&#120;</td><td>0078</td><td>120</td><td>voiceless velar fricative</td><td>Scot. <i>lo<b>ch</b></i> </td></tr>
<tr><td>G</td><td CLASS='unicode'>&#611;</td><td>0263</td><td>611</td><td>voiced velar fricative</td><td>Sp. <i>fuego</i> </td></tr>
<tr><td>X</td><td CLASS='unicode'>&#967;</td><td>03C7</td><td>967</td><td>uvular fricative, voiceless</td><td></td></tr>
<tr><td>R</td><td CLASS='unicode'>&#641;</td><td>0281</td><td>641</td><td>vd. uvular fric. or trill</td><td>Fr. <i>roi</i> </td></tr>
<tr><td>X\</td><td CLASS='unicode'>&#295;</td><td>0127</td><td>295</td><td>pharyngeal fricative, voiceless</td><td></td></tr>
<tr><td>?\</td><td CLASS='unicode'>&#661;</td><td>0295</td><td>661</td><td>pharyngeal fricative, voiced</td><td></td></tr>
<tr><td>h</td><td CLASS='unicode'>&#104;</td><td>0068</td><td>104</td><td>voiceless glotal fricative</td><td>Eng. h</td></tr>
<tr><td>h\</td><td CLASS='unicode'>&#614;</td><td>0266</td><td>614</td><td>glottal fricative, voiced</td><td></td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>P</td><td CLASS='unicode'>&#651;</td><td>028B</td><td>651</td><td>labiodental approximant</td><td></td></tr>
<tr><td>j</td><td CLASS='unicode'>&#106;</td><td>006a</td><td>106</td><td>palatal approximant</td><td>Eng. j</td></tr>
<tr><td>w</td><td CLASS='unicode'>&#119;</td><td>0077</td><td>119</td><td>voiced labial-velar approximant</td><td>Eng. w</td></tr>
<tr><td>W</td><td CLASS='unicode'>&#653;</td><td>028D</td><td>653</td><td>voiceless labial-velar fricative</td><td>Scot. wh</td></tr>
<tr><td>H</td><td CLASS='unicode'>&#613;</td><td>0265</td><td>613</td><td>labial-palatal semivowel</td><td>Fr. <i>huit</i> </td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><td>l</td><td CLASS='unicode'>&#108;</td><td>006c</td><td>108</td><td>alvelolar lateral approximant</td><td>Eng. l</td></tr>
<tr><td>5</td><td CLASS='unicode'>&#619;</td><td>026B</td><td>619</td><td>velarized l</td><td><i>ba<b>ll</b></i></td></tr>
<tr><td>K</td><td CLASS='unicode'>&#620;</td><td>026C</td><td>620</td><td>vl alveolar lateral fricative</td><td>Welsh <i>ll</i></td></tr>
<tr><td>L</td><td CLASS='unicode'>&#654;</td><td>028E</td><td>654</td><td>palatal lateral</td><td>It. <i>famiglia</i> </td></tr>
<tr><th colspan="6"><hr></th></tr>
<tr><th colspan="6">Diacritics</th></tr>
<tr><td>"</td><td CLASS='unicode'>&#712;</td><td>02C8</td><td>712</td><td>primary stress</td><td></td></tr>
<tr><td>%</td><td CLASS='unicode'>&#716;</td><td>02CC</td><td>716</td><td>secondary stress</td><td></td></tr>
<tr><td>:</td><td CLASS='unicode'>&#720;</td><td>02D0</td><td>720</td><td>length mark</td><td></td></tr>
<tr><td>`</td><td CLASS='unicode'>&#692;</td><td>02B4</td><td>692</td><td>rhotacized</td><td></td></tr>
<tr><td>Q~</td><td CLASS='unicode'>&#594;&#771;</td><td>0303</td><td>771</td><td>nasalization</td><td>Fr. <i>b<b>o</b>n</i> </td></tr>
<tr><td>n=</td><td CLASS='unicode'>n&#809;</td><td>0329</td><td>809</td><td>syllabic consonant</td><td>Eng. <i>garden</i> </td></tr>
<tr><td> </td><td CLASS='unicode'>&#32;</td><td>0020</td><td>32</td><td>pause</td><td></td></tr>
<tr><td>.</td><td CLASS='unicode'>&#46;</td><td>002E</td><td>46</td><td>End of sentence</td><td></td></tr>
</table>
</body>
</html>

View File

@ -1,13 +0,0 @@
bead sing bid thin .
bed then bad shed .
bard beige cod etch .
cord edge good food bud .
bird about moon man .
gnat fat vat .
when wet .
far pick tin tone .
gill kill Lily .
yet gore round rabbit .
lateral single zoo .
hello day go eye cow .
boy beer bare tour.

View File

@ -19,8 +19,17 @@
*/
#include "config.h"
/* jms: deutsch */
/* $Id: say.c,v 1.1 2006-06-11 07:13:27 urchlay Exp $
/* $Id: say.c,v 1.2 2006-06-11 21:49:09 stephena Exp $
$Log: not supported by cvs2svn $
Revision 1.1 2006/06/11 07:13:27 urchlay
Forgive the gigantic commit; I'm importing "rsynth". It's not really such
a big library, and it's not commonly installed anywhere, and it's GPL.
Actually, a good chunk of rsynth can be removed (all the stuff related
to perl modules and text-to-speech, which we won't need for Stella). I'll
prune it when I figure out exactly what I can keep...
* Revision 1.13 1994/11/08 13:30:50 a904209
* 2.0 release
*
@ -58,7 +67,11 @@
* Add IDs and merge Jon's klatt sources - incomplete
*
*/
char *say_id = "$Id: say.c,v 1.1 2006-06-11 07:13:27 urchlay Exp $";
#ifdef __cplusplus
extern "C" {
#endif
char *say_id = "$Id: say.c,v 1.2 2006-06-11 21:49:09 stephena Exp $";
extern char *Revision;
#include <stdio.h>
#include <ctype.h>
@ -83,7 +96,6 @@ extern char *Revision;
#include "deutsch.h"
#include "say.h"
unsigned
spell_out(char *word, int n, darray_ptr phone)
{
@ -348,3 +360,6 @@ say_file(rsynth_t * rsynth, FILE * f)
darray_free(&line);
}
#ifdef __cplusplus
}
#endif

View File

@ -1,15 +0,0 @@
#!/bin/sh
date +' %H %M %p %A %d %B %Y' | say

View File

@ -1,251 +0,0 @@
/*
Copyright (c) 1994,2001-2004 Nick Ing-Simmons. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "config.h"
extern char *Revision;
#include <stdio.h>
#include <ctype.h>
#include "useconfig.h"
#include <math.h>
#ifdef OS2
#include <signal.h>
#include <setjmp.h>
#include <float.h>
#endif /* OS2 */
#include "darray.h"
#include "rsynth.h"
#include "hplay.h"
#include "dict.h"
#include "lang.h"
#include "text.h"
#include "getargs.h"
#include "phones.h"
#include "aufile.h"
#include "charset.h" /* national differences ,jms */
#include "english.h"
#include "deutsch.h"
#include "say.h"
char *program = "say";
int verbose = 0;
#if 1
lang_t *lang = &English;
#else
lang_t *lang = &Deutsch;
#endif
long clip_max;
float peak;
static short
clip(long *clip_max, float input, float *peak)
{
long temp = (long) input;
float isq = input * input;
#ifdef PEAK
if (isq > *peak)
*peak = isq;
#else
*peak += isq;
#endif
if (-temp > *clip_max)
*clip_max = -temp;
if (temp > *clip_max)
*clip_max = temp;
if (temp < -32767) {
temp = -32767;
}
else if (temp > 32767) {
temp = 32767;
}
return (temp);
}
static void *
save_sample(void *user_data, float sample, unsigned nsamp,
rsynth_t * rsynth)
{
darray_t *buf = (darray_t *) user_data;
darray_short(buf, clip(&clip_max, sample, &peak)); /* Convert back to integer */
return (void *) buf;
}
static void *
flush_samples(void *user_data, unsigned nsamp, rsynth_t * rsynth)
{
darray_t *buf = (darray_t *) user_data;
if (buf->items) {
short *samp = (short *) darray_find(buf, 0);
audio_play(buf->items, samp);
if (file_write)
(*file_write) (buf->items, samp);
buf->items = 0;
}
return (void *) buf;
}
static char *
concat_args(int argc, char **argv)
{
int len = 0;
int i;
char *buf;
for (i = 1; i < argc; i++)
len += strlen(argv[i]) + 1;
buf = (char *) malloc(len);
if (buf) {
char *d = buf;
for (i = 1; i < argc;) {
char *s = argv[i++];
while (*s)
*d++ = *s++;
if (i < argc)
*d++ = ' ';
else
*d = '\0';
}
}
return buf;
}
int
main(int argc, char *argv[])
{
char *file_name = NULL;
char *voice_file = NULL;
char *par_name = NULL;
char *input_phones = "sampa";
double mSec_per_frame = 10;
double F0Hz = 133.0;
double speed = 1.0;
double frac = 0.5;
long gain = 57;
int monotone = 0;
int etrace = 0;
int f0trace = 0;
int dodur = 1;
#ifndef OS2
program = argv[0];
#else /* OS2 */
_control87(EM_INVALID | EM_DENORMAL | EM_ZERODIVIDE | EM_OVERFLOW |
EM_UNDERFLOW | EM_INEXACT, MCW_EM);
_ctype = ctable + 1; /* jms: proper character handling for toupper, tolower... */
/* if (NULL == setlocale(LC_ALL, "GERM") ) */
/* if (NULL == setlocale(LC_ALL, "DE_DE") ) */
/* if (NULL == setlocale(LC_ALL, "") ) */
/*printf("setlocale failed.\n") */ ;
/* jms */
#endif /* OS2 */
init_locale();
argc = getargs("Synth", argc, argv,
"d", "", &dict_path, "Which dictionary [b|a|g]",
"v", NULL, &verbose, "Verbose, show phonetic form",
"I", "", &input_phones, "Phoneset of input (for festival)",
"L", "", &voice_file, "Log file of voice data",
"D", NULL, &dodur, "Honour durations in .pho file",
"m", "%lg", &mSec_per_frame, "mSec per frame",
"F", "%lg", &F0Hz, "F0 Frequency",
"f", "", &file_name, "File to process",
"p", "", &par_name, "Parameter file for plot",
"S", "%lg", &speed, "Speed (1.0 is 'normal')",
"K", "%lg", &frac, "Parameter filter 'fraction'",
"M", NULL, &monotone, "Hold F0 fixed",
"E", NULL, &etrace, "Trace element sequence",
"G", "%ld", &gain, "Overall Gain",
NULL);
/* audio_init sets the rate */
argc = audio_init(argc, argv);
/* so must come before file init which writes rate to header */
argc = file_init(argc, argv);
if (help_only) {
fprintf(stderr, "Usage: %s [options as above] [words to say]\n",
program);
fprintf(stderr, "or %s [options as above] < file-to-say\n",
program);
fprintf(stderr, "(%s)\n", Revision);
}
else {
darray_t samples;
rsynth_t *rsynth;
darray_init(&samples, sizeof(short), 2048); /* chg jms */
if (dict_path && *dict_path)
dict_init(dict_path);
rsynth = rsynth_init(samp_rate, mSec_per_frame,
rsynth_speaker(F0Hz, gain, Elements),
save_sample, flush_samples, &samples);
if (par_name) {
rsynth->parm_file = fopen(par_name, "w");
if (!rsynth->parm_file)
perror(par_name);
}
rsynth->smooth = frac;
rsynth->speed = speed;
if (monotone)
rsynth->flags |= RSYNTH_MONOTONE;
if (etrace)
rsynth->flags |= RSYNTH_ETRACE;
if (verbose)
rsynth->flags |= RSYNTH_VERBOSE;
if (f0trace)
rsynth->flags |= RSYNTH_F0TRACE;
if (!file_name && argc < 2) {
say_file(rsynth, stdin);
}
else {
if (file_name) {
rsynth_pho(rsynth, file_name, dodur, input_phones);
}
if (argc > 1) {
char *s = concat_args(argc, argv);
if (s) {
say_string(rsynth, s);
free(s);
}
}
}
if (file_term)
(*file_term) ();
audio_term();
/* warn if we have clipped (or got close) converting to 16-bit */
if (verbose || clip_max > 30000) {
float v = clip_max * 2.5 / 32767;
fprintf(stderr, "Clipng @ %lu %.4g %.3g %.4gW\n",
clip_max, clip_max / 32767.0,
20 * log10(clip_max / 32767.0), v * v / 8);
}
if (have_dict)
dict_term();
rsynth_term(rsynth);
darray_free(&samples);
}
return (0);
}

View File

@ -1,39 +0,0 @@
#!/usr/local/bin/perl -w
use strict;
use blib "../Encode-sampa";
use blib "../Tkutf8";
use Encode;
use Encode::Sampa;
use Tk;
my $fixed = '-misc-fixed-medium-r-normal--15-140-75-75-c-0-iso10646-1';
my $face = (@ARGV) ? shift : ['arial unicode ms',14];
my $enc = find_encoding("sampa");
#print "$enc\n";
my $mw = MainWindow->new;
my $t = $mw->Scrolled('Text',
-font => $fixed)->pack;
sub PHONE
{
my ($e,$nm,$br,$am,$ex) = @_;
#print join(',',@_),"\n";
warn "$e vs $nm" if $e ne $nm;
my $ubr = $enc->decode($br);
my $uam = $enc->decode($am);
$uam =~ s/\x{259}`/\x{25a}/g;
$uam =~ s/\x{25C}`/\x{25d}/g;
$t->insert('end',"$nm\t$ubr\t$uam\t$ex\n");
}
our @U = '@U';
{
do "./phones.def";
}
MainLoop;

View File

@ -1 +0,0 @@
I am a speech synthesizer, and my input is conventional english text.

View File

@ -1,187 +0,0 @@
#!/usr/local/bin/perl -w
use Tk;
use Tk::Font;
use Rsynth::Elements;
%vowels = (
'0Cardinal' => {
'i' => [ 240, 2400 ],
'e' => [ 390, 2300 ],
'E' => [ 610, 1900 ],
'a' => [ 850, 1610 ],
'A' => [ 740, 940 ],
'V' => [ 600, 1170 ],
'7' => [ 460, 1310 ],
'M' => [ 300, 1390 ],
},
'1Rounded' => {
'y' => [ 235, 2100 ],
'2' => [ 370, 1900 ],
'9' => [ 585, 1710 ],
'&' => [ 820, 1530 ],
'Q' => [ 700, 760 ],
'O' => [ 500, 700 ],
'o' => [ 360, 640 ],
'u' => [ 250, 595 ],
},
'rp camenc' => {
'i' => [ 300, 2300 ], # seat head
'I' => [ 360, 2100 ], # sit hid
'e' => [ 570, 1970 ], # set head
'{' => [ 750, 1750 ], # sat had
'A' => [ 680, 1100 ], # cart hard
'Q' => [ 600, 900 ], # cot hod
'O' => [ 450, 740 ], # caught hoard
'U' => [ 380, 950 ], # full hood
'u' => [ 300, 940 ], # fool who
'V' => [ 720, 1240 ], # cut hub
'3' => [ 580, 1380 ], # curt herb
},
'rp Gimson/Wells' => {
'i' => [ 280, 2620, 3380 ], # seat head
'I' => [ 360, 2220, 2960 ], # sit hid
'e' => [ 600, 2060, 2840 ], # set head
'{' => [ 800, 1760, 2500 ], # sat had
'V' => [ 760, 1320, 2500 ], # cut hub
'A' => [ 740, 1180, 2640 ], # cart hard
'Q' => [ 560, 920, 2560 ], # cot hod
'O' => [ 480, 760, 2620 ], # caught hoard
'U' => [ 380, 940, 2300 ], # full hood
'u' => [ 320, 920, 2200 ], # fool who
'3' => [ 560, 1480, 2520 ], # curt herb
},
'am Ladefoged' => {
'i' => [ 280, 2250, 2890 ], # seat head
'I' => [ 400, 1920, 2560 ], # sit hid
'E' => [ 550, 1770, 2490 ], # curt herb
'{' => [ 690, 1660, 2490 ], # sat had
'A' => [ 710, 1100, 2540 ], # cart hard
'O' => [ 590, 880, 2540 ], # caught hoard
'U' => [ 450, 1030, 2380 ], # full hood
'u' => [ 310, 870, 2250 ], # fool who
},
'rsynth' => {
'@' => [490,1480,2500],
'a' => [790,1330,2500],
'A' => [790,990,2500],
'Q' => [610,880,2500],
'2' => [400,1960,2200],
'3' => [580,1420,2500],
'u' => [250,880,2200],
'U' => [370,1000,2500],
'e' => [640,2020,2500],
'V' => [700,1360,2500],
'y' => [250,2100,2700],
'i' => [250,2320,3200],
'I' => [400,2080,2560],
'{' => [790,1780,2500],
'O' => [490,820,2500],
'o' => [370,700,2200],
},
);
=for jill
'jill' => {
'i' => [253, 2692, 3806],
'y' => [397, 2219, 2888],
'M' => [416, 1478, 2911],
'u' => [286, 618, 2274],
'A' => [698, 980, 3082],
'Q' => [651, 896, 3040],
'a' => [1240, 1535, 2989],
'&' => [740, 1371, 3006],
'E' => [945, 1675, 2448],
'e' => [395, 2698, 3052],
'{' => [879, 1473, 3414],
},
=for john
'john' => {
'i' => [269, 2095, 3782],
'y' => [228, 1826, 2188],
'M' => [280, 1126, 2082],
'u' => [220, 530, 2080],
'A' => [524, 909, 2664],
'Q' => [553, 875, 2572],
'a' => [659, 1315, 2509], #[daIk
'&' => [715, 1293, 1778],
'E' => [727, 1671, 2314],
'e' => [425, 2070, 2701],
'{' => [961, 1703, 2395],
},
=cut
read_elements();
delete $vowels{'rsynth'};
foreach my $e (values %elem)
{
if ($e->{features}{vwl})
{
my $ch = $e->{unicode};
utf8::decode($ch);
$vowels{'rsynth'}{$ch} = [$e->{f1}[0],$e->{f2}[0]];
}
else
{
warn "Skip ".$e->{sampa}.' '.join('|',keys %{$e->{features}})."\n";
}
}
my $mw = MainWindow->new;
$mw->menu;
my $IPA = $mw->Font(family => 'Gentium',
point => 140, slant => 'r',
weight => 'medium');
my $t = $mw->Text(-width => 15)->pack(-side => 'right');
my $c = $mw->Scrolled('Canvas')->pack(-expand => 1, -fill => 'both');
my @colours = qw(black #008080 green orange red blue #800080 brown);
my $i = 0;
foreach $name (sort keys %vowels)
{
my $hash = $vowels{$name};
my $colour = $colours[$i++];
$t->tagConfigure($colour,-foreground => $colour);
$t->insert('end',"$name\n",[$colour]);
foreach $v (sort keys %$hash)
{
my ($f1,$f2) = @{$hash->{$v}};
my $x = (3000-($f2-$f1))/6;
my $y = ($f1)/3;
# my $x = -log($f2-$f1)*100;
# my $y = log($f1)*100;
$c->createText($x, $y,
# -anchor => 'center', -justify => 'center',
-font => $IPA,
-fill => $colour, -text => $v);
}
}
print join(',',$c->bbox('all')),"\n";
my ($minx,$miny,$maxx,$maxy) = $c->bbox('all');
$c->configure(-width => $maxx - $minx, -height => $maxy-$miny);
$c->configure(-scrollregion => [$c->bbox('all')]);
MainLoop;

View File

@ -1,82 +0,0 @@
#!/usr/local/bin/perl -w
use strict;
use File::Temp qw(tempfile);
my $file = shift;
my $match = @ARGV ? shift : '^f';
open(my $dat,$file) || die "Cannot open $file:$!";
my @labels;
my $sym;
my $ymin = 75;
my $ymax = 95;
SCAN:
while (<$dat>)
{
if (s/^\s*#\s*//)
{
s/\s+$//;
my @lab = split(/\s+/,$_);
push(@labels,[@lab]);
# warn "Possible labels:@lab\n";
$sym = $lab[0] if @lab == 1;
}
else
{
# warn "Data:$_";
s/^\s+//;
s/\s+$//;
my @data = split(/\s+/,$_);
foreach my $lab (@labels)
{
if (@$lab == @data)
{
@labels = @$lab;
last SCAN;
}
}
die "$file:$.:No labels match @data\n";
}
}
my ($fh,$path) = tempfile();
my $lx = 0;
my $x = 0;
my $yp = $ymin;
while (<$dat>)
{
if (/^\s*#/)
{
if (/^\s*#\s+(\S+)\s*$/ && $1 ne $sym)
{
my $xp = ($x+$lx)/2;
printf $fh qq[set label "$sym" at %g,%g center rotate \n],$xp,$yp;
$lx = $x;
$sym = $1;
$yp += 5;
$yp = $ymin if $yp > $ymax;
}
}
else
{
$x++;
}
}
warn "Labels: @labels\n";
print $fh "set data style line\n";
my $i = 1;
my $sep = 'plot';
while (@labels)
{
my $lab = shift(@labels);
if ($lab =~ /$match/o)
{
print $fh qq[$sep "$file" using 0:$i title "$lab"];
$sep = ",\\\n ";
}
$i++;
}
print $fh "\n";
close($fh);
system('gnuplot',-title => "$file /$match/", '-persist',$path);