PHP, 3311 bytes, 301/400 Golfed: define(VO,[ieh,ah,aa,äh,eh,ee,ie,ih,oh,oo,öh,uh,üh,au,eu,äu,ei,ai,ey,ay,a,e,i,o,u,A,O,U,y]);define(CO,[tzsch,dsch,tsch,zsch,sch,chs,ch,ck,dt,ng,nk,pf,ph,qu,ss,th,tz,b,c,d,f,g,h,j,k,l,m,n,p,r,s,S,t,v,w,x,z]);$b=$e=[];function iv($a){return in_array($a,VO);}function in($a){return!iv($a);}function i(string $str){return strtr($str,[S=>ʃ,Z=>ʒ,K=>ç,G=>ɡ,g=>ɡ,N=>ŋ,Q=>'ː',W=>ˈ,B=>'̯',R=>ʁ,A=>ɐ,E=>ɛ,O=>œ,I=>ɪ,Y=>ʏ,U=>ʊ,c=>ɔ,C=>ə,D=>ø]);}function b($a){global$b;return in_array($a,$b);}function e($a){global$e;return in_array($a,$e);}function l(string$w){$o=[];while($w)foreach(array_merge(CO,VO)as$c){$l=strlen($c);if(substr($w,0,$l)==$c){$o[]=$c;$w=substr($w,$l);break;}}return$o;}function s(array$w){global$b,$e;$s=[];$l=count($w);for($o=$t=$i=0;$i<$l;$i++){$c=$w[$i];$p=$i?$w[$i-1]:0;$n=$i==$l-1?0:$w[$i+1];if(!$n||!(in($c)&&$c==$n&&in($w[$i+2])))$s[$o][]=$c;if($p&&((!$n&&iv($c)&&in($p))||(in($n)&&iv($w[$i+2]))))$s[++$o]=[];}if($s[count($s)-1]==[])array_pop($s);foreach($s as$z){$b[]=$t;$t+=count($z);$e[]=$t;}return$s;}function pronounce(string $w){$w=strtr(strtolower(strtr($w,[ß=>5,Ä=>4,ä=>4,Ö=>0,ö=>0,Ü=>6,ü=>6])),[5=>S,4=>A,0=>O,6=>U]);$s=s(l($w));foreach(["sie+ziQ","du+duQ","die+diQ","der+deQAB","zu+tsuQ","wir+viQAB","mir+miQAB","den+deQn","dass+das","er+eQAB","so+zoQ","war+vaQAB","für+fyQAB","ja+jaQ","wie+viQ","dir+diQAB","nur+nuQAB","dem+deQm","ihn+iQn","auch+aUBx","ihr+iQAB","da+daQ","schon+ʃoQn","wenn+vEn","mal+maQl","gut+guQt","nach+naQx","will+vIl","muss+mUs","hab+haQp","vor+foQAB","ihm+miQm","tun+tuQn"]as$g)if(strstr($g,'+',true)==$w)return i(substr($g,strlen($w)+1));$o='';$P=false;if(count($s)>1)switch(join($s[0])){case ver:$o=fEAB;break;case da;$o=da;break;case ge;$o=gC;break;}if(strlen($o)){array_shift($s);$P=true;}if($P||count($s)==2)$o.=W;elseif(count($s)>2)$d=1&&$h=(int)count($s)/2;$w=array_merge(...$s);$B=$S=$V=$Z=0;foreach($w as$l){if($S){$S--;continue;}$n=$w[$B+1];$p=$w[$B-1];$f='';if(b($B))$Z++;if($l==d&&!$n)$f=t;if($l==b&&(!$n||$n==t))$f=p;if($l==g&&(!$n||$n==t))$f=(!$n&&$p==i)?K:k;if($l==c)$f=($n==A||$n==e||$n==i)?ts:k;if($l==ch)$f=($p==a||$p==o||$p==u)?x:K;if($l==chs||$l==x)$f=ks;if($l==ck)$f=k;if($l==dsch)$f=dZ;if($l==dt||$l==th)$f=t;if($l==ph||$l==v)$f=f;if(!$f&&$l==g)$f=G;if($l==h)$f=iv($n)?h:'';if($l==ng)$f=N;if($l==nk)$f=Nk;if($l==qu)$f=kv;if($l==r)$f=(!iv($n)&&!$n==t)?AB:R;if($l==s){if(!$p&&($n==p||$n==t))$f=S;elseif(iv($n))$f=z;else$f=s;}if($l==sch)$f=S;if($l==ss||$l==S)$f=s;if($l==tsch||$l==tzsch||$l==zsch)$f=tS;if($l==tz||$l==z)$f=ts;if($l==w)$f=v;$lv=0;if(iv($l)){if(strlen($l)>1){if($l==au)$f=aUB;elseif($l==eu||$l==äu)$f=cYB;elseif(in_array($l,[ai,ei,ey,ay]))$f=aIB;else$lv=1;}else{if(in($n)&&((!$w[$B+2]&&$n!=n)||iv($w[$B+2])))$lv=1;if($l==e){if(!$n)$lv=0;if(!$w[$B+2]){if($n==r){$f=A;$S=1;$lv=0;}if($n==m||$n==l)$f=C;}}elseif($n==ch)$lv=0;if(e($B))$lv=0;}if($Z==0)$lv=1;if($lv&&!$f){if($l[0]==O)$f=D;if($l[0]==U)$f=y;if($l[0]==A)$f=E;if(!$f)$f=$l[0];$f.=Q;}elseif(!$f){if($l==e)$f=(!$n||(!$w[$B+2]&&($n==n||$n==s)))?C:E;if($l==A)$f=E;if($l==i)$f=I;if($l==o)$f=c;if($l==O)$f=O;if($l==u)$f=U;if($l==U||$l==y)$f=Y;if(!$f)$f=$l;}$V++;}if(!$f)$f=$l;if($d&&$Z==$h)$f.=W;$o.=$f;$B++;}if(strpos($o,W)===false&&$V>1)$o=W.$o;for($j=0;$j<strlen($o);$j++)if($o[$j]==$o[$j+1])$o=substr($o,0,$j).substr($o,$j+1);return i($o);} Ungolfed: define(VO, [ieh, ah, aa, äh, eh, ee, ie, ih, oh, oo, öh, uh, üh, au, eu, äu, ei, ai, ey, ay, a, e, i, o, u, A, O, U, y]); define(CO, [tzsch, dsch, tsch, zsch, sch, chs, ch, ck, dt, ng, nk, pf, ph, qu, ss, th, tz, b, c, d, f, g, h, j, k, l, m, n, p, r, s, S, t, v, w, x, z]); $b = $e = []; function iv($a) { return in_array($a, VO); } function in($a) { return !iv($a); } function i(string $str) { return strtr($str, [S => ʃ, Z => ʒ, K => ç, G => ɡ, g => ɡ, N => ŋ, Q => 'ː', W => ˈ, B => '̯', R => ʁ, A => ɐ, E => ɛ, O => œ, I => ɪ, Y => ʏ, U => ʊ, c => ɔ, C => ə, D => ø]); } function b($a) { global$b; return in_array($a, $b); } function e($a) { global$e; return in_array($a, $e); } function l(string$w) { $o = []; while ($w) foreach (array_merge(CO, VO)as $c) { $l = strlen($c); if (substr($w, 0, $l) == $c) { $o[] = $c; $w = substr($w, $l); break; } }return$o; } function s(array$w) { global$b, $e; $s = []; $l = count($w); for ($o = $t = $i = 0; $i < $l; $i++) { $c = $w[$i]; $p = $i ? $w[$i - 1] : 0; $n = $i == $l - 1 ? 0 : $w[$i + 1]; if (!$n || !(in($c) && $c == $n && in($w[$i + 2]))) $s[$o][] = $c;if ($p && ((!$n && iv($c) && in($p)) || (in($n) && iv($w[$i + 2])))) $s[++$o] = []; }if ($s[count($s) - 1] == []) array_pop($s);foreach ($s as $z) { $b[] = $t; $t += count($z); $e[] = $t; }return$s; } function pronounce(string $w) { $w = strtr(strtolower(strtr($w, [ß => 5, Ä => 4, ä => 4, Ö => 0, ö => 0, Ü => 6, ü => 6])), [5 => S, 4 => A, 0 => O, 6 => U]); $s = s(l($w)); foreach (["sie+ziQ", "du+duQ", "die+diQ", "der+deQAB", "zu+tsuQ", "wir+viQAB", "mir+miQAB", "den+deQn", "dass+das", "er+eQAB", "so+zoQ", "war+vaQAB", "für+fyQAB", "ja+jaQ", "wie+viQ", "dir+diQAB", "nur+nuQAB", "dem+deQm", "ihn+iQn", "auch+aUBx", "ihr+iQAB", "da+daQ", "schon+ʃoQn", "wenn+vEn", "mal+maQl", "gut+guQt", "nach+naQx", "will+vIl", "muss+mUs", "hab+haQp", "vor+foQAB", "ihm+miQm", "tun+tuQn"]as $g) if (strstr($g, '+', true) == $w) return i(substr($g, strlen($w) + 1));$o = ''; $P = false; if (count($s) > 1) switch (join($s[0])) { case ver:$o = fEAB; break; case da; $o = da; break; case ge; $o = gC; break; }if (strlen($o)) { array_shift($s); $P = true; }if ($P || count($s) == 2) $o .= W;elseif (count($s) > 2) $d = 1 && $h = (int) count($s) / 2;$w = array_merge(...$s); $B = $S = $V = $Z = 0; foreach ($w as $l) { if ($S) { $S--; continue; }$n = $w[$B + 1]; $p = $w[$B - 1]; $f = ''; if (b($B)) $Z++;if ($l == d && !$n) $f = t;if ($l == b && (!$n || $n == t)) $f = p;if ($l == g && (!$n || $n == t)) $f = (!$n && $p == i) ? K : k;if ($l == c) $f = ($n == A || $n == e || $n == i) ? ts : k;if ($l == ch) $f = ($p == a || $p == o || $p == u) ? x : K;if ($l == chs || $l == x) $f = ks;if ($l == ck) $f = k;if ($l == dsch) $f = dZ;if ($l == dt || $l == th) $f = t;if ($l == ph || $l == v) $f = f;if (!$f && $l == g) $f = G;if ($l == h) $f = iv($n) ? h : '';if ($l == ng) $f = N;if ($l == nk) $f = Nk;if ($l == qu) $f = kv;if ($l == r) $f = (!iv($n) && !$n == t) ? AB : R;if ($l == s) { if (!$p && ($n == p || $n == t)) $f = S;elseif (iv($n)) $f = z; else$f = s; }if ($l == sch) $f = S;if ($l == ss || $l == S) $f = s;if ($l == tsch || $l == tzsch || $l == zsch) $f = tS;if ($l == tz || $l == z) $f = ts;if ($l == w) $f = v;$lv = 0; if (iv($l)) { if (strlen($l) > 1) { if ($l == au) $f = aUB;elseif ($l == eu || $l == äu) $f = cYB;elseif (in_array($l, [ai, ei, ey, ay])) $f = aIB; else$lv = 1; }else { if (in($n) && ((!$w[$B + 2] && $n != n) || iv($w[$B + 2]))) $lv = 1;if ($l == e) { if (!$n) $lv = 0;if (!$w[$B + 2]) { if ($n == r) { $f = A; $S = 1; $lv = 0; }if ($n == m || $n == l) $f = C; } }elseif ($n == ch) $lv = 0;if (e($B)) $lv = 0; }if ($Z == 0) $lv = 1;if ($lv && !$f) { if ($l[0] == O) $f = D;if ($l[0] == U) $f = y;if ($l[0] == A) $f = E;if (!$f) $f = $l[0];$f .= Q; }elseif (!$f) { if ($l == e) $f = (!$n || (!$w[$B + 2] && ($n == n || $n == s))) ? C : E;if ($l == A) $f = E;if ($l == i) $f = I;if ($l == o) $f = c;if ($l == O) $f = O;if ($l == u) $f = U;if ($l == U || $l == y) $f = Y;if (!$f) $f = $l; }$V++; }if (!$f) $f = $l;if ($d && $Z == $h) $f .= W;$o .= $f; $B++; }if (strpos($o, W) === false && $V > 1) $o = W . $o;for ($j = 0; $j < strlen($o); $j++) if ($o[$j] == $o[$j + 1]) $o = substr($o, 0, $j) . substr($o, $j + 1);return i($o); }