55using System . Text ;
66using System . Text . RegularExpressions ;
77using System . Threading . Tasks ;
8+ using hyjiacan . py4n ;
89using MusicLyricApp . Api . Translate ;
910using MusicLyricApp . Bean ;
1011using MusicLyricApp . Exception ;
@@ -19,6 +20,8 @@ public abstract class LyricUtils
1920 {
2021 private static readonly Regex VerbatimRegex = new Regex ( @"\(\d+,\d+\)" ) ;
2122
23+ private const PinyinFormat PinyinDefineFormat = PinyinFormat . WITH_TONE_MARK | PinyinFormat . LOWERCASE | PinyinFormat . WITH_U_UNICODE ;
24+
2225 /// <summary>
2326 /// 获取输出结果
2427 /// </summary>
@@ -34,7 +37,7 @@ public static async Task<List<string>> GetOutputContent(LyricVo lyricVo, SearchI
3437
3538 var voListList = await FormatLyric ( lyricVo . Lyric , lyricVo . TranslateLyric , searchInfo ) ;
3639
37- if ( searchInfo . SettingBean . Param . EnableVerbatimLyric )
40+ if ( lyricVo . SearchSource == SearchSourceEnum . QQ_MUSIC && searchInfo . SettingBean . Param . EnableVerbatimLyric )
3841 {
3942 for ( var i = 0 ; i < voListList . Count ; i ++ )
4043 {
@@ -386,6 +389,12 @@ public static async Task<List<List<LyricLineVo>>> DealTranslateLyric(List<LyricL
386389 result . Add ( await RomajiUtils . ToRomaji ( originList , transConfig . RomajiModeEnum , transConfig . RomajiSystemEnum ) ) ;
387390 }
388391 break ;
392+ case LyricsTypeEnum . PINYIN :
393+ if ( originLanguage == LanguageEnum . CHINESE )
394+ {
395+ result . Add ( await ToPinyin ( originList , transConfig . LostRule ) ) ;
396+ }
397+ break ;
389398 case LyricsTypeEnum . CHINESE :
390399 case LyricsTypeEnum . ENGLISH :
391400 // 输出语言和原始歌词语言只有不同时,才翻译
@@ -547,6 +556,36 @@ private static List<LyricLineVo> ResolveTransLyricDigitDeviationAndLost(List<Lyr
547556 return transList ;
548557 }
549558
559+ private static Task < List < LyricLineVo > > ToPinyin ( List < LyricLineVo > inputList , TransLyricLostRuleEnum lostRule )
560+ {
561+ var resultList = new List < LyricLineVo > ( ) ;
562+
563+ foreach ( var vo in inputList )
564+ {
565+ string content ;
566+
567+ if ( vo . IsIllegalContent ( ) )
568+ {
569+ if ( lostRule == TransLyricLostRuleEnum . IGNORE )
570+ {
571+ continue ;
572+ }
573+ else
574+ {
575+ content = "" ;
576+ }
577+ }
578+ else
579+ {
580+ content = Pinyin4Net . GetPinyin ( vo . Content , PinyinDefineFormat ) ;
581+ }
582+
583+ resultList . Add ( new LyricLineVo ( content , vo . Timestamp ) ) ;
584+ }
585+
586+ return Task . FromResult ( resultList ) ;
587+ }
588+
550589 /**
551590 * 歌词排序函数
552591 */
0 commit comments