英文语音基于音素估算字幕时间实例页面
回到相关文章 »效果:
朗读内容是:
各分句朗读时间范围:
试听
字幕显示
//zxx: 完整交互代码参见页面源代码
代码:
核心JS代码:
// s 参数指英文单词
function getPhonemeCount(s) {
let totalSyllables = 0;
// qu to tq
s = s.replace(/qu/g, 'qw');
// replace endings
s = s.replace(/(es$)|(que$)|(gue$)/g, '');
s = s.replace(/^re/, 'ren');
s = s.replace(/^gua/, 'ga');
s = s.replace(/([aeiou])(l+e$)/g, '$1');
let syllables = (s.match(/([bcdfghjklmnpqrstvwxyz])(l+e$)/g) || []).length;
totalSyllables += syllables;
s = s.replace(/([bcdfghjklmnpqrstvwxyz])(l+e$)/g, '$1');
s = s.replace(/([aeiou])(ed$)/g, '$1');
syllables = (s.match(/([bcdfghjklmnpqrstvwxyz])(ed$)/g) || []).length;
totalSyllables += syllables;
s = s.replace(/([bcdfghjklmnpqrstvwxyz])(ed$)/g, '$1');
const endsp = /(ly$)|(ful$)|(ness$)|(ing$)|(est$)|(er$)|(ent$)|(ence$)/g;
syllables = (s.match(endsp) || []).length;
totalSyllables += syllables;
s = s.replace(endsp, '');
syllables = (s.match(endsp) || []).length;
totalSyllables += syllables;
s = s.replace(endsp, '');
s = s.replace(/(^y)([aeiou][aeiou]*)/, '$2');
s = s.replace(/([aeiou])(y)/g, '$1t');
s = s.replace(/aa+/g, 'a');
s = s.replace(/ee+/g, 'e');
s = s.replace(/ii+/g, 'i');
s = s.replace(/oo+/g, 'o');
s = s.replace(/uu+/g, 'u');
// Dipthongs
const dipthongs = /(eau)|(iou)|(are)|(ai)|(au)|(ea)|(ei)|(eu)|(ie)|(io)|(oa)|(oe)|(oi)|(ou)|(ue)|(ui)/g;
syllables = (s.match(dipthongs) || []).length;
totalSyllables += syllables;
s = s.replace(dipthongs, '');
// Remove silent 'e' if length is greater than 3
if (s.length > 3) {
s = s.replace(/([bcdfghjklmnpqrstvwxyz])(e$)/g, '$1');
}
// Count vowels
syllables = (s.match(/[aeiouy]/g) || []).length;
totalSyllables += syllables;
return totalSyllables;
}