convert method
Convert Japanese text to Kokoro phonemes.
Implementation
String convert(String text) {
if (text.trim().isEmpty) return '';
final tokens = _mecab.parse(text);
final buf = StringBuffer();
for (var i = 0; i < tokens.length; i++) {
final token = tokens[i];
final surface = token.surface;
// Check if it's punctuation.
final punct = _mapPunctuation(surface);
if (punct != null) {
if (buf.isNotEmpty &&
punct.isNotEmpty &&
_isPunctStop(punct) &&
!_endsWithSpace(buf)) {
// No space before punctuation.
} else if (punct.isNotEmpty &&
_isPunctStart(punct) &&
buf.isNotEmpty &&
!_endsWithSpace(buf)) {
buf.write(' ');
}
buf.write(punct);
if (punct.isNotEmpty && _isPunctStop(punct)) buf.write(' ');
continue;
}
// ASCII passthrough.
if (_isAscii(surface)) {
if (buf.isNotEmpty && !_endsWithSpace(buf)) buf.write(' ');
buf.write(surface);
continue;
}
// Get reading from MeCab.
final reading = token.pronunciation.isNotEmpty
? token.pronunciation
: token.reading;
if (reading.isEmpty) continue;
// Convert katakana reading to hiragana.
final hira = _katakanaToHiragana(reading);
// Convert hiragana to phonemes.
final phonemes = _hiraganaToPhonemes(hira);
if (phonemes.isEmpty) continue;
// Add word boundary space.
if (buf.isNotEmpty && !_endsWithSpace(buf) && !_endsWithPunct(buf)) {
buf.write(' ');
}
buf.write(phonemes);
}
return buf.toString().replaceAll(RegExp(r'\s+'), ' ').trim();
}