| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693 | 
phoneme @
  vowel starttype #@ endtype #@
  unstressed
  length 60
  FMT(vowel/@_3)
endphoneme
phoneme @-   //  very short schwa
  vowel starttype #@  endtype #@
  unstressed nonsyllabic
  ipa ə
  IF nextPhW(*) OR nextPhW(r) THEN
    ipa NULL   // @-* is used to make 'r'
  ENDIF
  length 40
  FMT(vowel/@-)
endphoneme
// ToDo: change [@] to [a#] if adjacent to [r] or [R]
phoneme 3
  vowel starttype #a endtype #a
  unstressed
  length 40
  FMT(vowel/a#_3)
endphoneme
// PB sort of schwa [ɐ] (0250+032F)
// "spurgt" [sp'o3-d] – ipa [spˈoɐ̯d]
phoneme 3-    // used for 'r' after a vowel (to create a diphthong)
  liquid
  lengthmod 7
  ipa ɐ̯
    FMT(r/a_)
endphoneme
phoneme i
  vowel starttype #i endtype #i
  length 150
//  IfNextVowelAppend(;)
IF nextPhW(isNotVowel) AND NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@-) THEN
   glstop
   length 90
ENDIF
// PB "tie", "stige", "krige" vowel + vowel: extra length
// What is causing this very short [i] in words with final [@-]?
// NOT "galleriet" [g,?&lVR'i@-D] NOT "krigen" [kR'i@-n]
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) AND NOT next2PhW(D) AND NOT next2PhW(n) THEN
	length 240
ENDIF
// "siden"
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(@-) AND nextPhW(D) THEN
	length 150
ENDIF
// "lise"
IF nextPhW(isNotVowel) AND nextVowel(@-) OR nextVowel(@) THEN
	length 150
ENDIF
// PB "Bishop"
IF nextPhW(S) AND next2PhW(V) THEN
	length 90
ENDIF
// "pjækkeri", "røveri"
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
	length 90
ENDIF
// "vilje"
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
	length 90
ENDIF
  FMT(vowel/i_4)
endphoneme
// PB Experimental glottal i
// sviret vs. svirret
phoneme ?i
  vowel starttype #i endtype #i
  length 90
  IfNextVowelAppend(;)
  FMT(vowel/i_4)
endphoneme
// PB English i - Tim
phoneme I
  vowel  starttype #i  endtype #i
  length 130
  IfNextVowelAppend(;)
  FMT(vowel/ii_2)
endphoneme
phoneme e
  vowel starttype #e endtype #e
  length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
      length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
// "delte", "mante", "evig" [evi]
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(@) OR nextVowel(@-) THEN
	length 150
ENDIF
// "prinsen" - TEST
IF nextPhW(n) AND next2PhW(s) THEN
	length 90
ENDIF
// "slesk", "sleske" short vowel
IF nextPhW(s) AND next2PhW(t) AND nextVowel(@-) THEN
	length 90
  ELIF nextPhW(s) AND next2PhW(k) AND nextVowel(@-) THEN
	length 90
// "skriften" - very broad: short before 2 consonants
  ELIF nextPhW(isNotVowel) AND next2PhW(isNotVowel) AND nextVowel(@-) THEN
	length 90
ENDIF
// PB "ring", "ringe"
IF nextPhW(N) THEN
	length 90
ENDIF
// PB "enig", "enige", "evig"
IF nextPhW(isNotVowel) AND next2PhW(i) THEN
	length 150
ENDIF
// "labyrinter" , "labyrinten" - short followed by 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
	length 60
ENDIF
  FMT(vowel/e)
endphoneme
// PB glottal e
// "skille" vs. "skele", "pille" vs. "pile"
phoneme ?e
  vowel starttype #e endtype #e
  length 90
  FMT(vowel/e)
endphoneme
phoneme E
  vowel starttype #e endtype #e
  length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
// example?
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 50
ENDIF
// "værelse", "breve"
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(@-) THEN
	length 150
ENDIF
// "fest", "feste" short vowel
IF nextPhW(s) AND next2PhW(t) AND nextVowel(@-) THEN
	length 90
  ELIF nextPhW(s) AND next2PhW(k) AND nextVowel(@-) THEN
	length 90
// PB knægten
	ELIF nextPhW(g) AND next2PhW(t) AND nextVowel(@-) THEN
	length 90
// "femten", "tænker" - very broad: short before 2 consonants
	ELIF nextPhW(isNotVowel) AND next2PhW(isNotVowel) AND nextVowel(@-) OR nextVowel(V)THEN
	length 90
// PB "kærlig" [k'Erli]- a bit longer because og the missing [ɐ] [ˈkæɐ̯li]
	ELIF nextPhW(r) AND next2PhW(isNotVowel) AND nextVowel(i) THEN
	length 130
ENDIF
// "ære", "kærester", "ærefrygt" - longer E
IF nextPhW(V) THEN
	length 180
ENDIF
  FMT(vowel/e_mid2)
endphoneme
// PB Experimental glottal E
// "læsse" vs. "læse"
phoneme ?E
  vowel starttype #e endtype #e
  length 90
// PB "færre" [f'?EV] - a bit longer because og the missing [ɐ] [ˈfæɐ̯ʌ]
// Changed now [f'?E3-V] but it won't do any harm
IF nextPhW(V) THEN
	length 120
ENDIF
  FMT(vowel/e_mid2)
endphoneme
phoneme &
  vowel starttype #e endtype #e
  length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
// PB "sable", "sabler", "anede", "David"
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(i) OR nextVowel(@-) THEN
	length 150
ENDIF
// "stadig" [st&Di]
IF nextVowel(i) AND nextVowel(isFinalVowel) AND nextVowel(isWordEnd) THEN
	length 180
// "stadigt" [st&Dit]
	ELIF nextVowel(i) AND nextVowel(isFinalVowel) AND next2PhW(t) THEN
	length 180
// "latin" [l&t'in]
	ELIF nextVowel(i) AND nextVowel(isFinalVowel) AND NOT next2PhW(t) THEN
	length 90
ENDIF
// "ae", "aer", "dagen" vowel + vowel: extra length
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 240
ENDIF
// "Alfie", "alfer" - short before 2 consonants
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
	length 90
ENDIF
// "Omaha"
IF thisPh(isWordEnd) THEN
	length 90
ENDIF
  FMT(vowel/ee_2)
endphoneme
// PB Experimental glottal a
// e.g. the last a in "staldkarl"
// "sale" vs. "sal"
phoneme ?&
  vowel starttype #e endtype #e
   length 90
  FMT(vowel/ee_2)
endphoneme
// PB added for the æ in "dræbt"
phoneme &#
  vowel starttype  #e endtype #e
    length 120
	IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
	FMT(vowel/&)
endphoneme
// PB short &#
// "revl" vs. "tremme"
phoneme ?&#
  vowel starttype  #e endtype #e
    length 90
		FMT(vowel/&)
endphoneme
phoneme a
  vowel starttype #a endtype #a
  length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
	length 150
ENDIF
  FMT(vowel/a_2)
endphoneme
// PB short (glottal) a
// "bragt"
phoneme ?a
  vowel starttype #a endtype #a
  length 90
  FMT(vowel/a_2)
endphoneme
phoneme A
  vowel starttype #a endtype #a
  length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
	length 150
ENDIF
// "far", "bastard" - a bit longer followed by [r]
IF nextPhW(r) THEN
	length 120
ENDIF
  FMT(vowel/a_3)
endphoneme
// PB glottal a
// "drab" vs. "drabelig"
phoneme ?A
  vowel starttype #a endtype #a
  length 90
// "straffeattest", "straffe" - a bit longer after R
IF prevPhW(R) AND nextPhW(isNotVowel) THEN
	length 120
ENDIF
  FMT(vowel/a_3)
endphoneme
phoneme u
  vowel starttype #u endtype #u
  length 150
// Short vowel followed by consonant and NOT consonant + 3 or V or @
// "blus" vs. "bluse" and "bluser"
  IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
  ENDIF
// "hue", "suge", "uge"  
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
// extra length followed by 3 or V or @
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 240
ENDIF
// "umulig"
IF nextVowel(i) AND nextVowel(isFinalVowel) AND nextVowel(isWordEnd) THEN
  length 180
ENDIF
  FMT(vowel/u_bck)
endphoneme
// PB glottal u
// "tude" vs. "tuden" - [tuD3] [t?uD@n]
phoneme ?u
  vowel starttype #u endtype #u
  length 90
  FMT(vowel/u_bck)
endphoneme
phoneme o
  vowel starttype #o endtype #o
  length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
// "tro" 
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
	length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
// "modig" - long vowel after consonant + [i]
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(i) THEN
	length 150
ENDIF
  FMT(vowel/o_2)
endphoneme
// PB Short o
// "patron" vs. "kone"
phoneme ?o
  vowel starttype #o endtype #o
  length 95
  FMT(vowel/o_2)
endphoneme
phoneme O
  vowel starttype #o endtype #o
  length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
// PB "gået"
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
	length 150
ENDIF
// "rådig"
IF nextVowel(i) AND nextVowel(isFinalVowel) THEN
	length 180
ENDIF
  FMT(vowel/o_5)
endphoneme
// PB Experimental glottal O
// "toget" vs. "tåget"
phoneme ?O
  vowel starttype #o endtype #o
  length 90
  FMT(vowel/o_5)
endphoneme
phoneme V
  vowel starttype #@ endtype #@
  length 150
// "sport" [spV:t]
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPh(3) OR nextPh(V) OR nextPh(@) THEN
	length 150
ENDIF
// PB short V in "holder", "solder"
IF nextPhW(isNotVowel) AND next2Ph(V) THEN
	length 90
ENDIF
// PB "snorke", "snorker", årlig
IF next2PhW(3) OR next2PhW(V) OR next2PhW(@) OR next2PhW(i) THEN
	length 180
ENDIF
// "sove" [sVw3] - longer followed by w + 3
IF nextPhW(w) AND next2PhW(3) THEN
	length 220
ENDIF
  FMT(vowel/V_4)
endphoneme
// PB Glottal (short) å
// "forstår" vs. "kåre"
phoneme ?V
  vowel starttype #@ endtype #@
  length 100
  FMT(vowel/V_4)
endphoneme
phoneme 0
  vowel starttype #o endtype #o
  length 150
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
  FMT(vowel/oo_2)
endphoneme
// ?B short 0 "sukker"
phoneme ?0
  vowel starttype #o endtype #o
  length 90
  FMT(vowel/oo_2)
endphoneme
phoneme y
  vowel starttype #i endtype #i
// experiment: changed to short from 150
  length 150
// Short vowel followed by consonant and NOT consonant + 3 or V
// "lyd" vs. "lyde" and "lyder"
IF nextPhW(isNotVowel) AND NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@)AND NOT next2PhW(@-) THEN
   glstop
   length 90
ENDIF
// "syg" [sy]
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
	length 90
ENDIF
// "skyd"
IF thisPh(isFinalVowel) AND nextPhW(isWordEnd) AND nextPhW(isNotVowel) THEN
	length 90
ENDIF
// "dydig" [dyDi]
IF nextVowel(3) OR nextVowel(V) OR nextVowel(@) OR nextVowel(i) THEN
	length 150
ENDIF
// "syge" [sy3] vowel + vowel: extra length, but NOT "fyret" [fyVD]
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) AND NOT next2PhW(D) THEN
	length 220
ENDIF
// PB "kryster" - short y
IF nextPhW(isNotVowel) AND next2PhW(isNotVowel) THEN
	length 80
ENDIF
// PB "gryden"
  FMT(vowel/y)
endphoneme
// PB Short y
// "kylling" vs. "kyle", "krybbe" vs. "krybe"
phoneme ?y
  vowel starttype #i endtype #i
  length 70
  FMT(vowel/y)
endphoneme
phoneme Y
  vowel starttype #i endtype #i
  length 150
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
  FMT(vowel/yy)
endphoneme
phoneme W
  vowel starttype #@ endtype #@
  length 160
// Shorter vowel when followed by consonant
IF NOT next2PhW(3) AND NOT next2PhW(V) AND NOT next2PhW(@) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
// "kløe" vowel + vowel: extra length
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
	length 220
ENDIF
// "klø" short W when word ends with W
IF thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
	length 90
ENDIF
// røde" W + 1 consonant + 3 or W or @
IF next2PhW(3) OR next2PhW(V) OR next2PhW(@) THEN
	length 160
ENDIF
// PB "nødig", "nødigt", "kølige"
IF nextVowel(i) THEN
	length 160
ENDIF
// "møve" [mWw@-]
IF nextPhW(w) AND nextVowel(@-) THEN
	length 160
ENDIF
// "børnebog"
IF nextPhW(r) AND next2PhW(n) AND nextVowel(@-) THEN
	length 150
ENDIF
  FMT(vowel/oe)
endphoneme
// PB glottal W
// "prøv" vs. "prøve"
phoneme ?W
  vowel starttype #@ endtype #@
  length 95
  FMT(vowel/oe)
endphoneme
// PB added for the ø in "røv", "røg", "øje" instead of [V3]
phoneme W#
  vowel starttype #@ endtype #@
  length 150
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2PhW(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 90
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) THEN
	length 150
ENDIF
  FMT(vowel/V)
endphoneme
// PB short W#
// "rømme"
phoneme ?W#
  vowel starttype #@ endtype #@
  length 90
    FMT(vowel/V)
endphoneme
phoneme aI
  vowel starttype #a endtype #i
  length 300
IF NOT next2Ph(3) AND NOT next2Ph(V) AND NOT next2Ph(@-) AND nextPhW(isNotVowel) THEN
   glstop
   length 150
ENDIF
IF nextPhW(3) OR nextPhW(V) OR nextPhW(@) OR nextPhW(@-) THEN
	length 300
ENDIF
// PB "drej" vs. "dreje"
IF thisPh(isWordEnd) THEN
	length 140
ENDIF
  FMT(vdiph/ai)
endphoneme
// CONSONANTS
// PB added l/3
phoneme l
  liquid
  lengthmod 7
  ChangePhoneme(l/3)
  CALL base/l
endphoneme
phoneme v        // approximant, not fricative
  import_phoneme base/v#
  voicingswitch f
endphoneme
// PB Actually a kind of schwa = [ɐ]? - "byder" [bˈyðɐʌ]
phoneme r    // used for 'r' after a vowel (to create a diphthong)
  liquid
  lengthmod 7
  ipa ɐ̯
  IF nextPhW(isVowel) AND NOT nextPhW(?V) AND NOT nextPhW(V) THEN
    ChangePhoneme(R)
  ENDIF
  FMT(r/a_)
endphoneme
phoneme R
  lengthmod 6
  liquid
  ipa ʁ
  FMT(r/aa)
endphoneme
// don't weaken consonants at end of word or before a stop
phoneme s
  vls alv frc sibilant
  voicingswitch z
  lengthmod 3
  Vowelin  f1=0  f2=1700 -300 300  f3=-100 80
  Vowelout f1=0  f2=1700 -300 250  f3=-100 80  rms=20
  IF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
    WAV(ufric/s!)
  ENDIF
  WAV(ufric/s)
endphoneme
phoneme p
  vls blb stop
  voicingswitch b
  lengthmod 7
  Vowelin  f1=0  f2=1000 -50 -100  f3=-200 80 amp=11
  Vowelout f1=0  f2=1000 -500 -350  f3=-300 80 rms=22
  IF nextPh(isPause2) THEN
    WAV(ustop/p_unasp)
  ELIF nextPh(r) THEN
    WAV(ustop/pr, 70)
  ELIF nextPh(R) OR nextPh(R2) THEN
    WAV(ustop/pr)
  ELIF nextPh(@-) THEN
    WAV(ustop/p_unasp)
  ELIF nextPh(l) THEN
    WAV(ustop/pl)
  ENDIF
  WAV(ustop/p)
endphoneme
phoneme t
  vls alv stop
  voicingswitch d
  lengthmod 7
  Vowelin f1=0  f2=1700 -300 300  f3=-100 80
  Vowelout f1=0 f2=1700 -300 250  f3=-100 80  rms=20
  IF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN
    WAV(ustop/tr)
  ENDIF
  WAV(ustop/t, 90)
endphoneme
phoneme j
  liquid palatal
  lengthmod 7
  IF nextPhW(isVowel) THEN
    NextVowelStarts
      VowelStart(j/j@)
      VowelStart(j/ja)
      VowelStart(j/je,-40)
      VowelStart(j/ji)
      VowelStart(j/jo)
      VowelStart(j/ju)
    EndSwitch
Vowelout len=70
    VowelEnding(j/xj, -30)
    IF prevPh(isPause) THEN
      FMT(j/_j)
    ENDIF
  ELSE
    // no vowel follows
    Vowelout len=70
    FMT(j/j_)
  ENDIF
endphoneme
 |