public MainWindow()
 {
     InitializeComponent();
     rand       = new Random();
     utauPlugin = new UtauPlugin(args[1]);
     utauPlugin.Input();
 }
Beispiel #2
0
        void InitWorkspace()
        {
            utauPlugin.Input();
            List <Note> notes     = utauPlugin.note;
            WrapPanel   wrapPanel = new WrapPanel()
            {
                Margin = new Thickness(0, 3, 0, 3)
            };

            workspace.Children.Add(wrapPanel);
            int i = utauPlugin.hasPrev ? 1 : 0;
            int j = utauPlugin.hasNext ? 1 : 0;

            for (; i < notes.Count - j; i++)
            {
                Note note = notes[i];
                if (note.GetLyric() == "R")
                {
                    if (wrapPanel.Children.Count != 0)
                    {
                        wrapPanel = new WrapPanel()
                        {
                            Margin = new Thickness(0, 3, 0, 3)
                        };
                        workspace.Children.Add(wrapPanel);
                    }
                    continue;
                }
                Button button = LyricButtonFactory(note);
                wrapPanel.Children.Add(button);
                lyricButtons.Add(button);
            }
            Index = 0;
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            int            startTime      = 0;
            int            endTime        = 0;
            String         filePath       = "test.lab";

            openFileDialog.Filter          = "ラベルファイル(*.lab)|*.lab";
            openFileDialog.Title           = "保存するファイル名";
            openFileDialog.CheckFileExists = false;

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                filePath = openFileDialog.FileName;
            }
            else
            {
                Application.Exit();
            }


            UtauPlugin utauPlugin = new UtauPlugin(args[0]);

            utauPlugin.Input();
            StreamWriter writer = new StreamWriter(filePath, false);

            foreach (Note note in utauPlugin.note)
            {
                endTime = startTime + note.GetMsLength();
                writer.WriteLine(startTime.ToString() + "0000 " + endTime.ToString() + "0000 " + GetVowel(note.GetLyric()));
                startTime = endTime;
            }
            writer.Close();
        }
 public MainWindow()
 {
     InitializeComponent();
     dirPath = "";
     FC      = new FileCheck();
     if (args.Length >= 2)
     {
         utauPlugin = new UtauPlugin(args[1]);
         utauPlugin.Input();
         SetDirPath(utauPlugin.VoiceDir);
         voiceDirBox.Visibility = System.Windows.Visibility.Hidden;
     }
 }
        static void Main(string[] args)
        {
            UtauPlugin utauPlugin = new UtauPlugin(args[0]);

            utauPlugin.Input();

            foreach (Note note in utauPlugin.note)
            {
                string noteLyric = note.GetLyric();

                Regex findConsonantTransition = new Regex("([mrln])([ ])(.*)");

                Regex catchNasalTransition = new Regex("ng([ ])(.*)");

                bool isConsonantTransition = findConsonantTransition.IsMatch(noteLyric);

                bool isNasalTransition = catchNasalTransition.IsMatch(noteLyric);

                if (isConsonantTransition == true)
                {
                    string currentFlags = note.GetFlags();

                    string flags = currentFlags + "P0";

                    note.SetFlags(flags);
                }

                if (isNasalTransition == true)
                {
                    string currentFlags = note.GetFlags();

                    string flags = currentFlags + "P0";

                    note.SetFlags(flags);
                }
            }

            utauPlugin.Output();
        }
        private void Connect()
        {
            //载入插件
            plugin.Input();
            List <Note> notes = plugin.note;
            //根据有无Prev来决定从第几个音符开始取
            int i = plugin.hasPrev ? 1 : 0;
            int j = plugin.hasNext ? 1 : 0;

            //只有选择了两个音符时才会运行程序
            if (notes.Count != i + j + 2)
            {
                txt_message.Text = "请选择两个音符";
                return;
            }
            //取出前两个音符用于拼字
            note1 = notes[i];
            note2 = notes[i + 1];
            //使用的音符不能含有休止符
            if (note1.GetLyric() == "R" || note2.GetLyric() == "R" || note1.GetLyric() == "" || note2.GetLyric() == "")
            {
                txt_message.Text = "请不要选择休止符";
                return;
            }
            //缩短音符得到R后Modulation(移调)默认为空声音会很奇怪,这里自动设置一下
            note1.SetMod(note1.GetMod());
            note2.SetMod(note2.GetMod());
            //得到第二个音的先行
            //通常先行会完全覆盖辅音
            //使用包络线遮蔽先行即可仅发出元音
            //如果音源oto设置不准确,也提供了自定义遮蔽长度的选择
            float discardedLength = note2.GetAtPre();

            //得到音符的包络线
            note1.InitEnvelope(note1.GetEnvelope());
            note2.InitEnvelope(note2.GetEnvelope());
            Envelope envelope1 = note1.envelope;
            Envelope envelope2 = note2.envelope;

            try
            {
                //如果第二个音符前端已使用包络线p1遮蔽,则无视oto中先行的设置,直接丢弃p1之前的声音
                float p1_note2 = envelope2.GetP(1);
                if (p1_note2 > 0)
                {
                    discardedLength = p1_note2;
                }
                //如果第二个音符已设置p2即认为手动设置了重叠长度
                float p2_note2 = envelope2.GetP(2);
                if (p2_note2 > 5)
                {
                    overlap = p2_note2;
                }
            }
            catch
            {
                txt_message.Text = "获取第二个音符的包络线失败,请重置后再使用";
                return;
            }
            //设置第一个音符的P3和第二个音符的P2为重叠长度(应用淡入淡出)
            envelope1.SetP(overlap, 3);
            envelope2.SetP(overlap, 2);
            //设置第二个音符的P1为遮蔽长度(遮蔽第二个音符的辅音)
            envelope2.SetP(discardedLength, 1);
            //设置第二个音符重叠为遮蔽长度与两音预计重叠长度之和
            note2.SetOve(discardedLength + overlap);
            //设置第一个音长,第二个音拉长到总长度不变

            int l = note1.GetLength() + note2.GetLength();

            if (length1 > note1.GetLength())
            {
                length1 = note1.GetLength();
            }
            note1.SetLength(length1);
            note2.SetLength(l - length1);
            //将第二个音发音开始的位置对齐到第一个音符的开始位置(遮蔽第一个音符的元音)
            note2.SetPre(discardedLength + length1);
            //保存更改
            plugin.Output();
            Application.Current.Shutdown();
        }