Esempio n. 1
0
        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            var openDialog = new OpenFileDialog
            {
                Filter = "MP3 (*.mp3)|*.mp3|모든 파일 (*.*)|*.*"
            };

            if (openDialog.ShowDialog().Value)
            {
                var player   = new MediaPlayer();
                var provider = new LyricsProvider(player);
                var document = new LyricsDocument($@"{Path.GetDirectoryName(openDialog.FileName)}\{Path.GetFileNameWithoutExtension(openDialog.FileName)}.slr");

                player.Open(new Uri(openDialog.FileName));
                lyricsView.Provider = provider;
                lyricsView.Document = document;

                player.Play();
            }
            else
            {
                Application.Current.Shutdown();
            }
        }
Esempio n. 2
0
        private void Verification(LyricsDocument document)
        {
            // 제목 검사
            if (document.Title == null)
            {
                Write("가사의 제목 정보가 없습니다.");
            }

            // 앨범 검사
            if (document.Album == null)
            {
                Write("가사의 앨범 정보가 없습니다.");
            }

            // 연주자 검사
            if (document.Artist == null)
            {
                Write("가사의 연주자 정보가 없습니다.");
            }

            // 매핑 여부 검사
            bool existLR = false;
            bool existPR = false;
            bool existTR = false;

            foreach (LyricsSentence sentence in document.Sentences)
            {
                foreach (LyricsMapping mapping in sentence.Mappings)
                {
                    if (existLR == false && mapping.Lyrics != null)
                    {
                        existLR = true;
                    }
                    if (existPR == false && mapping.Pronounce != null)
                    {
                        existPR = true;
                    }
                    if (existTR == false && mapping.Translation != null)
                    {
                        existTR = true;
                    }
                }
            }

            // 매핑 데이터 검사
            for (int i = 0; i < document.Sentences.Count; i++)
            {
                var sentence = document.Sentences[i];

                int      lastLPosition = -1;
                int      lastPPosition = -1;
                int      lastTPosition = -1;
                TimeSpan?lastEndTime   = null;

                for (int j = 0; j < sentence.Mappings.Count; j++)
                {
                    var mapping = sentence.Mappings[j];

                    // 누락 검사
                    if (existLR && mapping.Lyrics == null)
                    {
                        Write($"{i}번 문장의 {j}번 가사 매핑이 누락되었습니다.", sentence, mapping);
                    }
                    if (existPR && mapping.Pronounce == null)
                    {
                        Write($"{i}번 문장의 {j}번 발음 매핑이 누락되었습니다.", sentence, mapping);
                    }
                    if (existTR && mapping.Translation == null)
                    {
                        Write($"{i}번 문장의 {j}번 해석 매핑이 누락되었습니다.", sentence, mapping);
                    }

                    // 시간 검사
                    if (mapping.BeginTime > mapping.EndTime)
                    {
                        Write($"{i}번 문장의 {j}번 매핑의 시작 시간이 종료 시간보다 느립니다.", sentence, mapping);
                    }
                    if (sentence.BeginTime > mapping.BeginTime)
                    {
                        Write($"{i}번 문장의 {j}번 매핑의 시작 시간이 문장의 시작 시간보다 빠릅니다.", sentence, mapping);
                    }
                    if (lastEndTime != null && mapping.BeginTime < lastEndTime)
                    {
                        Write($"{i}번 문장의 {j}번 매핑의 시작 시간이 이전 매핑의 종료 시간보다 빠릅니다.", sentence, mapping);
                    }

                    // 위치 검사
                    if (mapping.Lyrics?.Position > sentence.Lyrics?.Length - 1)
                    {
                        Write($"{i}번 문장의 {j}번 가사 매핑의 위치가 범위를 초과하였습니다.", sentence, mapping);
                    }
                    if (mapping.Pronounce?.Position > sentence.Pronounce?.Length - 1)
                    {
                        Write($"{i}번 문장의 {j}번 발음 매핑의 위치가 범위를 초과하였습니다.", sentence, mapping);
                    }
                    if (mapping.Translation?.Position > sentence.Translation?.Length - 1)
                    {
                        Write($"{i}번 문장의 {j}번 해석 매핑의 위치가 범위를 초과하였습니다.", sentence, mapping);
                    }

                    if (mapping.Lyrics?.Position < lastLPosition)
                    {
                        Write($"{i}번 문장의 {j}번 가사 매핑의 위치값이 이전 가사 매핑의 위치값보다 작습니다.", sentence, mapping);
                    }
                    if (mapping.Pronounce?.Position < lastPPosition)
                    {
                        Write($"{i}번 문장의 {j}번 발음 매핑의 위치값이 이전 발음 매핑의 위치값보다 작습니다.", sentence, mapping);
                    }
                    if (mapping.Translation?.Position < lastTPosition)
                    {
                        Write($"{i}번 문장의 {j}번 해석 매핑의 위치값이 이전 해석 매핑의 위치값보다 작습니다.", sentence, mapping);
                    }

                    lastEndTime   = mapping.EndTime;
                    lastLPosition = Math.Max(lastLPosition, mapping.Lyrics?.Position ?? -1);
                    lastPPosition = Math.Max(lastPPosition, mapping.Pronounce?.Position ?? -1);
                    lastTPosition = Math.Max(lastTPosition, mapping.Translation?.Position ?? -1);
                }

                // 매핑 완성 검사
                var lastMapping = sentence.Mappings.Last();

                if (lastMapping.Lyrics?.Position < sentence.Lyrics?.Length - 1)
                {
                    Write($"{i}번 문장의 해석이 끝까지 매핑되지 않았습니다.", sentence);
                }
                if (lastMapping.Pronounce?.Position < sentence.Pronounce?.Length - 1)
                {
                    Write($"{i}번 문장의 발음이 끝까지 매핑되지 않았습니다.", sentence);
                }
                if (lastMapping.Translation?.Position < sentence.Translation?.Length - 1)
                {
                    Write($"{i}번 문장의 해석이 끝까지 매핑되지 않았습니다.", sentence);
                }
            }
        }
Esempio n. 3
0
 public LyricsVerification(LyricsDocument document)
 {
     _Document = document;
     Verification(Document);
 }