$option_lang = "AmE"; if ($option_lang eq "AmE") { %phone_map = ( p => 'p', b => 'b', th => 'T', t => 't', dh => 'D', d => 'd', x => 'k_h', k => 'k', m => 'm', n => 'n', l => 'l', r => 'r', f => 'f', v => 'v', sh => 'S', s => 's', zh => 'Z', z => 'z', hh => 'h', wh => 'w', w => 'w', ch => 'tS', g => 'g', jh => 'dZ', "9" => 'N', y => 'j', iy => 'i', aa => 'A', ao => 'O', # what? uw => 'u', er => 'r=', ih => 'I', eh => 'E', ae => '{', ah => 'V', uh => 'U', ey => 'EI', ay => 'AI', oy => 'OI', ow => '@U', aw => 'aU', ); } elsif ($option_lang eq "BrE") { %phone_map = ( p => 'p', b => 'b', th => 'T', t => 't', dh => 'D', d => 'd', kh => 'k', k => 'k', m => 'm', n => 'n', l => 'l', r => 'r', f => 'f', v => 'v', sh => 'S', s => 's', zh => 'Z', z => 'z', hh => 'h', wh => 'w', w => 'w', ch => 'tS', g => 'g', jh => 'dZ', "9" => 'N', y => 'j', iy => 'i:', aa => 'A:', ao => 'Q', # what? uw => 'u:', er => '3:', ih => 'I', eh => 'e', ae => '{', ah => 'V', uh => 'U', ey => 'eI', ay => 'aI', oy => 'OI', ow => 'O:', # '@U', aw => 'aU', ); }; @ph = sort {length($b) <=> length($a)} keys %phone_map; # Read words written in phoneme alphabet, # break into phonemes with stresses while ($line = <>) { chomp; $stress = 0; for ($i = 0; $i < length($line);) { if (substr($line, $i, 1) eq ".") { $stress = 0; } elsif (substr($line, $i, 1) eq "'") { $stress = 2; } elsif (substr($line, $i, 1) eq "+") { $stress = 3; } elsif (substr($line, $i, 1) eq ",") { $stress = 1; } elsif (substr($line, $i, 1) eq " ") { $stress = 0; } elsif (substr($line, $i, 1) eq "|") { $stress = 0; push @phones, "_"; push @phon, ""; push @stresses, $stress; $i++; next; } $l = 1; for $ph (@ph) { $l = length($ph); if (substr($line, $i, $l) eq $ph) { # push @phones, $ph; push @phones, $phone_map{$ph}; push @phon, $ph; push @stresses, $stress; last; } else { $l = 1; } } $i += $l; } } print ";;T=1.0\n"; $f0 = 100; $p1 = 1.03; $p2 = 1.09; for $i (0 .. $#phones) { if ($stresses[$i] == 0) { $dur = 75; $freq = $f0; } elsif ($stresses[$i] == 1) { $dur = 150; $freq = $f0 * $p1; } elsif ($stresses[$i] == 2) { $dur = 200; $freq = $f0 * $p2; } elsif ($stresses[$i] == 3) { $dur = 250; $freq = $f0; } if ($phones[$i] eq "_") { $dur = 300; } if ($phon[$i] eq "x") { $dur = 100; $freq = $f0; } elsif ($phon[$i] && $phon[$i] !~ /[aeiou]/) { $dur = 75; $freq = $f0; } print "$phones[$i] $dur 5 $freq\n"; }