《分韻撮要》音系與中古音對應關係
目錄
- 目的
- 音系與擬音
- 聲母
- 韻母
- 聲調
- 對應關係
- 聲母
- 韻母
- 聲調
- 程式碼實現
目的
本文得出《分韻撮要》音系與中古音的對應關係,以便與現代粵語與中古音的對應關係對比,從而系統性地把握粵語的演變規律。
音系與擬音
本文依照的《分韻撮要》版本為 1782 年的《江湖尺牘分韻撮要合集》,聲母與聲調的劃分依照韻典網,擬音參考了羅言發《澳門粵語音系的歷史變遷及其成因》(2013),並在不影響音系的前提下作了少量修改。
聲母
幫 b /p/ | 滂 p /pʰ/ | 非 f /f/ | 明 m /m/ |
端 d /t/ | 透 t /tʰ/ | 來 l /l/ | 泥 n /n/ |
見 g /k/ | 溪 k /kʰ/ | 曉 h /h/ | 我 ng /ŋ/ |
古 gw /kʷ/ | 困 kw /kʷʰ/ | ||
精 z /ts/ | 清 c /tsʰ/ | 心 s /s/ | |
照 zh /tʃ/ | 穿 ch /tʃʰ/ | 審 sh /ʃ/ | |
亞 ∅ | 以 j /j/ | 云 w /w/ | 日 nj /ɲ/ |
註:韻典網所立古、困二母,與諸 yu /yː/、鴛 yun /yːn/ 二韻拼合時,本文分別擬為 g /k/ 與 k /kʰ/。由於諸、鴛二韻不與見、溪二母相拼,這樣做在音系上是等價的。
韻母
/aː/ | /ɐ/ | /ɛː/ | /ɔː/ | /o/ | /œː/ | /ɵ/ | /iː/ | /ɿː/ | /uː/ | /yː/ |
---|---|---|---|---|---|---|---|---|---|---|
家 aa /aː/ | 遮 e /ɛː/ | 科 o /ɔː/ | 幾 i /iː/ | 師 ii /ɿː/ | 孤 u /uː/ | 諸 yu /yː/ | ||||
皆 aai /aːj/ | 威 ai /ɐj/ | 栽 oi /ɔːj/ | 雖 eoi /ɵɥ/ | 魁 ui /uːj/ | ||||||
交 aau /aːw/ | 修 au /ɐw/ | 朝 iu /iːw/ | ||||||||
緘 aam /aːm/ | 金 am /ɐm/ | 甘 om /ɔːm/ | 兼 im /iːm/ | |||||||
翻 aan /aːn/ | 賓 an /ɐn/ | 干 on /ɔːn/ | 津 eon /ɵn/ | 先 in /iːn/ | 官 un /uːn/ | 鴛 yun /yːn/ | ||||
彭 aang /aːŋ/ | 登 ang /ɐŋ/ | (石) eng /ɛːŋ/ | 剛 ong /ɔːŋ/ | 東 ung /oŋ/ | 張 oeng /œːŋ/ | 英 ing /iːŋ/ |
註:
- 入聲韻與陽聲韻相配,為節省篇幅,未在表中列出。
- 吾韻擬音 ng /ŋ/,無韻母,未在表中列出。
- 有研究認為,跖、尺、石三個小韻為寄入英韻的 ek /ɛːk/ 韻母。但由於字少,無論是否考慮,均不會對歸納對應關係產生影響。
聲調
聲調 | 聲調符號 |
---|---|
陰平 | 1 |
陰上 | 2 |
陰去 | 3 |
陽平 | 4 |
陽上 | 5 |
陽去 | 6 |
陰入 | 1 |
陽入 | 6 |
註:此處將陰入一律設為 1,不影響音系。
對應關係
歸納得出《分韻撮要》音系與中古音的對應關係如下。
聲母
聲紐 | 對應聲母 |
---|---|
幫母 | 輕脣韻 f 其餘 b |
滂母 | 輕脣韻 f 其餘 p |
並母 | 輕脣韻 f 平聲 p 其餘 b |
明母 | m |
端母 | d |
透母 | t |
定母 | 平聲 t 其餘 d |
泥母 | n |
來母 | l |
知母 | zh |
徹母 | ch |
澄母 | 平聲 ch 其餘 zh |
孃母 | n |
精母 | z |
清母 | c |
從母 | 平聲 c 其餘 z |
心母 | s |
邪母 | 平聲 c 其餘 z |
莊母 二等 | zh |
初母 二等 | ch |
崇母 二等 | 平聲 ch 其餘 zh |
生母 二等 | sh |
俟母 二等 | 平聲 ch 其餘 zh |
莊母 三等 | z |
初母 三等 | c |
崇母 三等 | 平聲 c 其餘 z |
生母 三等 | s |
俟母 三等 | 平聲 c 其餘 z |
章母 | zh |
昌母 | ch |
常母 | sh |
書母 | sh |
船母 | sh |
日母 | nj |
見母 | g |
溪母 | h |
羣母 | 平聲 k 其餘 g |
疑母 | 細音 nj 其餘 ng |
曉母 | h |
匣母 | 合口或模韻(非 yu 前 w 其餘 j)其餘 h |
影云以母 | 三四等(非 yu 前 w 其餘 j)其餘 ∅ |
註:
- 莊組三等的平翹音對應關係不明確。
- 粵語全濁清化的規律是「平上送、去入不送」,但此處只針對文讀音,全濁上聲變去聲,因此按照「平送仄不送」處理。
- 牙喉音合口字的變化詳見下文。
韻母
註:請於此處查看。
聲調
聲調 | 聲調符號 | 對應中古聲調 |
---|---|---|
陰平 | 1 | 平聲(清) |
陰上 | 2 | 上聲(清) |
陰去 | 3 | 去聲(清) |
陽平 | 4 | 平聲(濁) |
陽上 | 5 | 上聲(次濁) |
陽去 | 6 | 上聲(全濁)、去聲(濁) |
陰入 | 1 | 入聲(清) |
陽入 | 6 | 入聲(濁) |
程式碼實現
/* 推導《分韻撮要》音系
* https://ayaka.shn.hk/fanwan/
*
* 説明
* 以下內容為生成推導《分韻撮要》音系的函數體
* 函數接受音韻地位,返回對應的推導《分韻撮要》音系發音
*/
const is = (x) => 音韻地位.屬於(x);
function 聲母規則() {
if (is('幫母')) {
if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f';
return 'b';
}
if (is('滂母')) {
if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f';
return 'p';
}
if (is('並母')) {
if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f';
return is('平聲') ? 'p' : 'b';
}
if (is('明母')) return 'm';
if (is('端母')) return 'd';
if (is('透母')) return 't';
if (is('定母')) return is('平聲') ? 't' : 'd';
if (is('泥母')) return 'n';
if (is('來母')) return 'l';
if (is('知母')) return 'zh';
if (is('徹母')) return 'ch';
if (is('澄母')) return is('平聲') ? 'ch' : 'zh';
if (is('孃母')) return 'n';
if (is('精母')) return 'z';
if (is('清母')) return 'c';
if (is('從母')) return is('平聲') ? 'c' : 'z';
if (is('心母')) return 's';
if (is('邪母')) return is('平聲') ? 'c' : 'z'; // 塞擦音多於擦音
if (is('莊母 二等')) return 'zh';
if (is('初母 二等')) return 'ch';
if (is('崇母 二等')) return is('平聲') ? 'ch' : 'zh';
if (is('生母 二等')) return 'sh';
if (is('俟母 二等')) return is('平聲') ? 'ch' : 'zh';
// 莊組三等平翹音規律不明確
if (is('莊母')) return 'z';
if (is('初母')) return 'c';
if (is('崇母')) return is('平聲') ? 'c' : 'z';
if (is('生母')) return 's';
if (is('俟母')) return is('平聲') ? 'c' : 'z';
if (is('章母')) return 'zh';
if (is('昌母')) return 'ch';
if (is('常母')) return 'sh'; // 擦音多於塞擦音
if (is('書母')) return 'sh';
if (is('船母')) return 'sh';
if (is('日母')) return 'nj';
if (is('見母')) return 'g';
if (is('溪母')) return 'h'; // 多數擦化
if (is('羣母')) return is('平聲') ? 'k' : 'g';
if (is('疑母')) return 'ng'; // ng 拼細音時為 nj,詳後
if (is('曉母')) return 'h';
if (is('匣母')) {
if (is('合口 或 模韻')) return 'j'; // 非 yu 前為 w,詳後
return 'h';
}
if (is('影云以母')) {
if (is('三四等')) return 'j'; // 非 yu 前為 w,詳後
return '';
}
throw new Error('無聲母規則');
}
function 韻母規則() {
// 通攝
if (is('東冬鍾韻')) return 'ung';
// 江攝
if (is('江韻 幫組')) return 'ong';
if (is('江韻 舌齒音')) return 'oeng';
if (is('江韻 牙喉音')) return 'ong';
// 止攝
if (is('支脂之微韻 幫組')) return 'i';
if (is('支脂之微韻 開口')) return 'i'; // i 在 z/c/s 前為 ii,詳後
if (is('支脂之微韻 合口 舌齒音')) return 'eoi';
if (is('支脂之微韻 合口 牙喉音')) return 'ai';
// 遇攝
if (is('魚虞韻 幫組')) return 'u';
if (is('魚虞韻 莊組')) return 'o';
if (is('魚虞韻')) return 'yu';
if (is('模韻 疑母')) return '';
if (is('模韻')) return 'u';
// 蟹攝
if (is('齊韻')) return 'ai';
if (is('祭韻 幫組')) return 'ai';
if (is('祭韻 開口')) return 'ai';
if (is('祭韻 合口 舌齒音')) return 'eoi';
if (is('祭韻 合口 以母')) return 'eoi';
if (is('祭韻 合口 牙喉音')) return 'ai';
if (is('泰韻 幫組')) return 'ui';
if (is('泰韻 開口 端組')) return 'aai';
if (is('泰韻 開口 來母')) return 'aai';
if (is('泰韻 開口 精組')) return 'oi';
if (is('泰韻 開口 牙喉音')) return 'oi';
if (is('泰韻 合口 舌齒音')) return 'eoi';
if (is('泰韻 合口 疑母')) return 'oi';
if (is('泰韻 合口 牙喉音')) return 'ui';
if (is('佳皆夬韻')) return 'aai';
if (is('灰韻 疑母')) return 'oi';
if (is('灰韻')) return 'ui';
if (is('咍韻')) return 'oi';
if (is('廢韻')) return 'ai';
// 臻攝
if (is('眞韻 幫組')) return 'an';
if (is('眞韻 開口')) return 'an';
if (is('眞韻 合口 舌齒音')) return 'eon';
if (is('眞韻 合口 牙喉音')) return 'an';
if (is('臻文欣韻')) return 'an';
if (is('元韻 幫組')) return 'aan';
if (is('元韻 開口')) return 'in';
if (is('元韻 合口')) return 'yun';
if (is('魂韻 幫組')) return 'un';
if (is('魂韻 端組')) return 'eon';
if (is('魂韻 來母')) return 'eon';
if (is('魂韻 精組')) return 'yun';
if (is('魂韻 牙喉音')) return 'an';
if (is('痕韻')) return 'an';
// 山攝
if (is('寒韻 幫組')) return 'un';
if (is('寒韻 開口 舌齒音')) return 'aan';
if (is('寒韻 開口 牙喉音')) return 'on';
if (is('寒韻 合口 舌齒音')) return 'yun';
if (is('寒韻 合口 牙喉音')) return 'un';
if (is('刪山韻')) return 'aan';
if (is('仙先韻 幫組')) return 'in';
if (is('仙先韻 開口')) return 'in';
if (is('仙先韻 合口')) return 'yun';
// 效攝
if (is('蕭宵韻')) return 'iu';
if (is('肴韻')) return 'aau';
if (is('豪韻')) return 'u';
// 果攝
if (is('歌韻 一等')) return 'o';
if (is('歌韻 三等')) return 'e';
// 假攝
if (is('麻韻 二等')) return 'aa';
if (is('麻韻 三等')) return 'e';
// 宕攝
if (is('陽韻 幫組')) return 'ong';
if (is('陽韻 開口 莊組')) return 'ong';
if (is('陽韻 開口')) return 'oeng';
if (is('陽韻 合口')) return 'ong';
if (is('唐韻')) return 'ong';
// 梗攝
if (is('庚韻 二等')) return 'ang';
if (is('庚韻 三等')) return 'ing';
if (is('耕韻')) return 'ang';
if (is('清青韻')) return 'ing';
// 曾攝
if (is('蒸韻')) return 'ing';
if (is('登韻')) return 'ang';
// 流攝
if (is('尤侯幽韻')) return 'au';
// 深攝
if (is('侵韻')) return 'am'; // m 韻尾在聲母為脣音時為 n,詳後,下同
// 咸攝
if (is('覃韻 舌齒音')) return 'aam';
if (is('覃韻 牙喉音')) return 'om';
if (is('談韻 幫組')) return 'aam';
if (is('談韻 舌齒音')) return 'aam';
if (is('談韻 牙喉音')) return 'om';
if (is('鹽添嚴韻')) return 'im';
if (is('咸銜凡韻')) return 'aam';
throw new Error('無韻母規則');
}
function 聲調規則() {
if (is('全清 或 次清')) {
if (is('平聲')) return '1'; // 陰平
if (is('上聲')) return '2'; // 陰上
if (is('去聲')) return '3'; // 陰去
if (is('入聲')) return '1'; // 陰入
} else {
if (is('平聲')) return '4'; // 陽平
if (is('全濁 上聲')) return '6'; // 陽去,全濁上變去
if (is('上聲')) return '5'; // 陽上
if (is('去聲')) return '6'; // 陽去
if (is('入聲')) return '6'; // 陽入
}
throw new Error('無聲調規則');
}
let 聲母 = 聲母規則();
let 韻母 = 韻母規則();
let 聲調 = 聲調規則();
if (is('合口 或 模韻') && !韻母.startsWith('yu')) { // 合口字
if (聲母 === 'g') 聲母 = 'gw';
else if (聲母 === 'k') 聲母 = 'kw';
else if (聲母 === 'h' && !韻母.startsWith('i')) 聲母 = 'f';
else if (聲母 === 'j') 聲母 = 'w';
else if (聲母 === '') 聲母 = 'w';
}
// i 在 z/c/s 前為 ii
if (['z', 'c', 's'].includes(聲母) && 韻母 === 'i') 韻母 = 'ii';
// ng 拼細音時為 nj
const is細音 = ['eo', 'i', 'oe', 'u', 'yu'].some((x) => 韻母.startsWith(x));
if (聲母 === 'ng' && is細音) 聲母 = 'nj';
// m 韻尾在聲母為脣音時為 n
if (is('幫組') && 韻母.endsWith('m')) 韻母 = 韻母.slice(0, -1) + 'n';
if (is('入聲')) {
if (韻母.endsWith('m')) 韻母 = 韻母.slice(0, -1) + 'p';
else if (韻母.endsWith('n')) 韻母 = 韻母.slice(0, -1) + 't';
else if (韻母.endsWith('ng')) 韻母 = 韻母.slice(0, -2) + 'k';
}
return 聲母 + 韻母 + 聲調;
编辑于 2022-04-20 15:20