internal void PostProcess(ConvertParameter single)
 {
     //set all the objects is converted
     ProcessConvert(single);
     //Set the object is multiObject or not
     ProcessMulti(single);
 }
Exemple #2
0
        public void AllocatePosition(ConvertParameter single)
        {
            var availLine = ScanAvailableList();

            //開始分派線線
            for (var i = 0; i < single.ContainerConvertParameter.ListObjectContainer.Count; i++)
            {
                //目前優先順序
                var decideLinePriprity = GetRandNumber(single, i) % availLine;
                var line = FindLineIndexFromPriority(decideLinePriprity);
                single.ContainerConvertParameter.ListObjectContainer[i].Position = LinePositionDefinition.GetPosition(line);
                //被佔用了
                _listLineRemainCount[line] = _lineOccupancyCount;
                availLine--;
            }

            //把上一回的全部--;
            for (var i = 0; i < _listLineRemainCount.Count; i++)
            {
                if (_listLineRemainCount[i] > 0)
                {
                    _listLineRemainCount[i]--;
                }
            }
        }
        internal void ProcessPosition(ConvertParameter single)
        {
            //同一群絁E�E皁E��件位置
            foreach (var singleTupleHitObjects in single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter)
            {
                if (single.ContainerConvertParameter.LayoutNumber == 1) //如果layout只有一個就沒什麼好決定亁E
                {
                    singleTupleHitObjects.ListBaseHitObject[0].ContainerIndex = 0;
                    singleTupleHitObjects.ListBaseHitObject[0].LayoutIndex    = 0;
                }
                else //兩個以上layout
                {
                    for (var i = 0; i < singleTupleHitObjects.ListBaseHitObject.Count; i++)
                    {
                        //目前在哪一個container 裡面皁E哪個index裡面
                        var layoutindex = GetRandomValue(singleTupleHitObjects, i) % single.ContainerConvertParameter.LayoutNumber;

                        var remain = layoutindex;

                        //取得container位置和對應皁Eayoutindex
                        for (var j = 0; j < single.ContainerConvertParameter.ContainerNumber; j++)
                        {
                            var layoutNumberinSingleContainer = single.ContainerConvertParameter.ListObjectContainer[i].ContainerLayerList.Count;
                            if (remain < layoutNumberinSingleContainer)
                            {
                                singleTupleHitObjects.ListBaseHitObject[i].ContainerIndex = j;
                                singleTupleHitObjects.ListBaseHitObject[i].LayoutIndex    = remain;
                            }
                            remain = remain - j;
                        }
                    }
                }
            }
        }
Exemple #4
0
        private RpContainerLine GenerateSingleLayout(ConvertParameter single, RpContainerLineGroup container)
        {
            var objectContainerLayer = new RpContainerLine(container);

            objectContainerLayer.StartTime = single.SliceConvertParameter.StartTime;
            objectContainerLayer.EndTime   = single.SliceConvertParameter.EndTime;
            return(objectContainerLayer);
        }
        public containerConvertParameter GetParameter(ConvertParameter parameter)
        {
            var output = new containerConvertParameter();

            output.ContainerNumber = ContainerNumber(parameter);
            output.LayoutNumber    = LayoutNumber(output, parameter);
            return(output);
        }
 internal void PostProcess(ConvertParameter single)
 {
     //follow the coop on the layout HotObject locate in
     ProcessCoop(single);
     //set all the objects is converted
     ProcessConvert(single);
     //Set the object is multiObject or not
     ProcessMulti(single);
 }
Exemple #7
0
 /// <summary>
 ///     all the layout will have non-coop
 /// </summary>
 private void GenerateNonCoop(ConvertParameter single)
 {
     foreach (var sligleContainer in single.ContainerConvertParameter.ListObjectContainer)
     {
         foreach (var layout in sligleContainer.ContainerLayerList)
         {
             layout.Coop = RpBaseHitObjectType.Coop.Both;
         }
     }
 }
Exemple #8
0
        private RpContainerLineGroup GenerateSingleContainer(ConvertParameter single)
        {
            var objectContainer = new RpContainerLineGroup(single.SliceConvertParameter.StartTime);

            objectContainer.StartTime = single.SliceConvertParameter.StartTime;
            objectContainer.EndTime   = single.SliceConvertParameter.EndTime;
            objectContainer.BPM       = single.SliceConvertParameter.BPM;
            objectContainer.Velocity  = single.SliceConvertParameter.Volocity;
            return(objectContainer);
        }
 /// <summary>
 ///     the object is convert from other beatmap or RP beatmap
 /// </summary>
 /// <param name="single"></param>
 private void ProcessConvert(ConvertParameter single)
 {
     //同一群絁E�E皁E��件位置
     foreach (var singleTupleHitObjects in single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter)
     {
         foreach (var singleObject in singleTupleHitObjects.ListBaseHitObject)
         {
             singleObject.Convert = RpBaseObjectType.Convert.Convert;
         }
     }
 }
 /// <summary>
 ///     the object is convert from other beatmap or RP beatmap
 /// </summary>
 /// <param name="single"></param>
 private void ProcessConvert(ConvertParameter single)
 {
     //蜷御ク�鄒、邨・・スE・スE逧・・スE・ス・スE・ス莉カ菴咲スョ
     foreach (var singleTupleHitObjects in single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter)
     {
         foreach (var singleObject in singleTupleHitObjects.ListBaseHitObject)
         {
             singleObject.Convert = Convert.Convert;
         }
     }
 }
 /// <summary>
 ///     Process coop
 /// </summary>
 /// <param name="single"></param>
 private void ProcessCoop(ConvertParameter single)
 {
     //同一群絁E�E皁E��件位置
     foreach (var singleTupleHitObjects in single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter)
     {
         foreach (var singleObject in singleTupleHitObjects.ListBaseHitObject)
         {
             var containerIndex = singleObject.ContainerIndex;
             var layoutIndex    = singleObject.LayoutIndex;
             singleObject.Coop = single.ContainerConvertParameter.ListObjectContainer[containerIndex].ContainerLayerList[layoutIndex].Coop;
         }
     }
 }
Exemple #12
0
        /// <summary>
        ///     use startTime and Endtime to grab the object and return ComvertParameter
        ///     And calculate number of Container and Layout
        /// </summary>
        /// <param name="startIndex"></param>
        /// <param name="endIndex"></param>
        /// <returns></returns>
        private ConvertParameter SlicingSingle(int startIndex, int endIndex, float volicity)
        {
            var single = new ConvertParameter();

            //Get Physical Refrence Object
            single.ListRefrenceObject = _originalBeatmap.HitObjects.GetRange(startIndex, endIndex - startIndex);

            //難度
            single.Difficulty = _diffStar;

            //Generate Parameter
            single.SliceConvertParameter = GetSliceConvertParameterResult(single, volicity);
            return(single);
        }
Exemple #13
0
        public List <SingleHitObjectConvertParameter> GeneratorListHitObject(ConvertParameter single)
        {
            foreach (var singleHitObject in single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter)
            {
                var singleHitObjects = new List <BaseRpHitableObject>();
                for (var i = 0; i < singleHitObject.MultiNumber; i++)
                {
                    singleHitObjects.Add(GenerateRpHitObject(singleHitObject, single));
                }
                singleHitObject.ListBaseHitObject = singleHitObjects;
            }

            return(single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter);
        }
Exemple #14
0
        public bool IsCombo(ConvertParameter single, int i)
        {
            var result = false;

            if (single.ListRefrenceObject[i].StartTime - _lastHitObjectTime < DELTA_COMBO_TIME)
            {
                result = true;
            }
            else
            {
                result = false;
            }
            _lastHitObjectTime = single.ListRefrenceObject[i].StartTime;
            return(result);
        }
Exemple #15
0
        private void Start()
        {
            MessageBox.Show(_("This process will create a copy of source UTAU DB.\n\nPlease make sure that you are not in violation of the license terms of the DB."),
                            _("Notice"),
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Exclamation);
            lock (mutex_) {
                stop_requested_ = false;
            }
            textLineBuffer.Text = "";
            buttonStart.Text    = start_button_cancel_text_;
            var starter   = new ParameterizedThreadStart(DoConvert);
            var thread    = new Thread(starter);
            var parameter = new ConvertParameter(textSourceDb.Text, textDestinationDb.Text);

            thread.Start(parameter);
        }
        private int ContainerNumber(ConvertParameter parameter)
        {
            var refHitObjectNum       = parameter.ListRefrenceObject.Count;
            var reruenContainerNumber = 1;

            //如果裡面物件越少,Container越多
            if (refHitObjectNum / 2 < parameter.Difficulty)
            {
                reruenContainerNumber = 2;
            }
            else if (refHitObjectNum < parameter.Difficulty)
            {
                reruenContainerNumber = 3;
            }

            return(reruenContainerNumber);
        }
 /// <summary>
 ///     Set the object is multiObject or not
 /// </summary>
 /// <param name="single"></param>
 private void ProcessMulti(ConvertParameter single)
 {
     //同一群絁E�E皁E��件位置
     foreach (var singleTupleHitObjects in single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter)
     {
         foreach (var singleObject in singleTupleHitObjects.ListBaseHitObject)
         {
             if (singleTupleHitObjects.ListBaseHitObject.Count > 1)
             {
                 singleObject.Multi = RpBaseHitObjectType.Multi.Multi;
             }
             else
             {
                 singleObject.Multi = RpBaseHitObjectType.Multi.SingleClick;
             }
         }
     }
 }
 /// <summary>
 ///     Set the object is multiObject or not
 /// </summary>
 /// <param name="single"></param>
 private void ProcessMulti(ConvertParameter single)
 {
     //蜷御ク�鄒、邨・・スE・スE逧・・スE・ス・スE・ス莉カ菴咲スョ
     foreach (var singleTupleHitObjects in single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter)
     {
         foreach (var singleObject in singleTupleHitObjects.ListBaseHitObject)
         {
             if (singleTupleHitObjects.ListBaseHitObject.Count > 1)
             {
                 singleObject.RpMultiHit = RpMultiHit.Multi;
             }
             else
             {
                 singleObject.RpMultiHit = RpMultiHit.SingleClick;
             }
         }
     }
 }
Exemple #19
0
        public void ProcessType(ConvertParameter single)
        {
            _singleSlideParameter = single;
            _processObjectTypeRandom.SetConvertParameter(_singleSlideParameter);
            _processComboObject.SetConvertParameter(_singleSlideParameter);
            var tupleCount = _singleSlideParameter.HitObjectConvertParameter.ListSingleHitObjectConvertParameter.Count;

            for (var i = 0; i < tupleCount; i++)
            {
                if (single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter[i].IsCombo)
                {
                    AssignComboTupleShapes(single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter[i], i); //Combo
                }
                else
                {
                    AssignNormalTupleShapes(single.HitObjectConvertParameter.ListSingleHitObjectConvertParameter[i]); //Normal
                }
            }
        }
        /// <summary>
        /// Convert pixel data to raman shift data use convert coefficient with interpolation
        /// </summary>
        /// <param name="para">Destination raman spectrum format</param>
        /// <param name="pixelFirstX">Pixel first X</param>
        /// <param name="pixelYDatas">Pixel y datas</param>
        /// <param name="outRamanXDatas">OUT: Raman x datas</param>
        /// <returns>Raman y datas</returns>
        public static double[] PiexToRaman(ConvertParameter para, int pixelFirstX, double[] pixelYDatas, out double[] outRamanXDatas)
        {
            outRamanXDatas = null;

            //X校正系数为3阶,共4个参数, Y轴校正为5阶,共6个参数
            if (para == null || para.convertCoefs == null || para.convertCoefs.Length != 4 ||
                pixelFirstX < 0 || pixelYDatas == null || pixelYDatas.Length < 5 ||
                para.ramanLastX <= para.ramanFirstX || para.ramanFirstX < 0 || para.ramanDataCount < 1)
            {
                ErrorString = "Invalid Parameters";
                return(null);
            }

            //**********  按照xRamanStep指定的步长,将pixelData中的像素光谱转换到拉曼光谱, 像素谱中的X值为0到length-1  ****/
            int xLen = pixelYDatas.Length;

            //先使用X校正后的系数将nirstRData中的X轴转换到波数
            double[] xcoef = para.convertCoefs;

            double[] tempRamanX = new double[xLen];
            for (int i = pixelFirstX; i < pixelFirstX + xLen; i++)  //像素谱的X轴数值从firstPixelX到pxielYDatas.Length-firstPixelX
            {
                double tempi = i;
                tempRamanX[i - pixelFirstX] = xcoef[0] + xcoef[1] * tempi + xcoef[2] * tempi * tempi + xcoef[3] * tempi * tempi * tempi;
            }

            //对Raman光谱重新插值
            List <double[]> datas = new List <double[]>()
            {
                tempRamanX, pixelYDatas
            };

            datas = Ai.Hong.Algorithm.PreProcessor.SplineCubicInterpolation(datas, para.ramanFirstX, para.ramanLastX, para.ramanDataCount);
            if (datas == null || datas.Count != 2)
            {
                ErrorString = Ai.Hong.Algorithm.PreProcessor.ErrorString;
                return(null);
            }

            outRamanXDatas = datas[0];
            return(datas[1]);
        }
Exemple #21
0
        //parameter

        /// <summary>
        ///     Generators the object by parameter.
        /// </summary>
        internal List <RpContainerLineGroup> GetListContainer(ConvertParameter single)
        {
            var returnContainer = new List <RpContainerLineGroup>();
            var listLayout      = new List <RpContainerLine>();

            //container number
            for (var i = 0; i < single.ContainerConvertParameter.ContainerNumber; i++)
            {
                returnContainer.Add(GenerateSingleContainer(single));

                //decide this container shouble allocate number of layout
                listLayout.Add(GenerateSingleLayout(single, returnContainer[i]));

                //    container layout number;
                //TODO : adjust it later
                returnContainer[i].ListContainObject[0] = listLayout[i];
            }

            return(returnContainer);
        }
Exemple #22
0
        /// <summary>
        /// </summary>
        /// <param name="result"></param>
        /// <returns></returns>
        public SliceConvertParameter GetSliceConvertParameterResult(ConvertParameter result, float volicity)
        {
            //decide the number of container and layout
            var sliceConvertParameter = new SliceConvertParameter();

            //startTime
            sliceConvertParameter.StartTime = result.ListRefrenceObject[0].StartTime;

            //EndTime
            var    endIndex = result.ListRefrenceObject.Count - 1;
            double lastHitObjectDuration = 0;

            sliceConvertParameter.EndTime = result.ListRefrenceObject[endIndex].StartTime + lastHitObjectDuration;

            //TODO : get the BGM by startTime
            //BPM
            sliceConvertParameter.BPM      = 60000 / _originalBeatmap.ControlPointInfo.TimingPointAt(sliceConvertParameter.StartTime).BeatLength;
            sliceConvertParameter.Volocity = volicity;

            return(sliceConvertParameter);
        }
Exemple #23
0
        /// <summary>
        ///     DecideCoop
        /// </summary>
        /// <param name="single"></param>
        internal void DecideCoop(ConvertParameter single)
        {
            var layoutNumber = 0;

            //Get the number of layoutNumber;
            foreach (var sligleContainer in single.ContainerConvertParameter.ListObjectContainer)
            {
                layoutNumber = layoutNumber + sligleContainer.ContainerLayerList.Count;
            }

            //Get how many number of the HitObject
            var refCount = single.ListRefrenceObject.Count;

            //decide use coop or not
            if (refCount < _coopNumber)
            {
                GenerateCoop(single);
            }
            else
            {
                GenerateNonCoop(single);
            }
        }
Exemple #24
0
        /// <summary>
        ///     Depend on how many layout and decide the coop
        /// </summary>
        private void GenerateCoop(ConvertParameter single)
        {
            var listLayout = new List <RpContainerLine>();

            foreach (var sligleContainer in single.ContainerConvertParameter.ListObjectContainer)
            {
                listLayout.AddRange(sligleContainer.ContainerLayerList);
            }

            var additionRandomValue = GetRandomValue(single);

            for (var i = 0; i < listLayout.Count; i++)
            {
                if ((i + additionRandomValue) % 2 == 0)
                {
                    listLayout[i].Coop = RpBaseHitObjectType.Coop.LeftOnly;
                }
                else
                {
                    listLayout[i].Coop = RpBaseHitObjectType.Coop.RightOnly;
                }
            }
        }
        public HitObjectConvertParameter Analyse(ConvertParameter single)
        {
            //打擊物件的參數
            var parameter = new HitObjectConvertParameter();

            for (var i = 0; i < single.ListRefrenceObject.Count; i++)
            {
                //單一參數
                var singleParameter = new SingleHitObjectConvertParameter();
                //有無combo
                singleParameter.IsCombo = AnaylseCombo.IsCombo(single, i);
                //出現物件數量
                singleParameter.MultiNumber = AnaylseMulti.GetMultiNumber(single, i);
                //開始時間
                singleParameter.StartTime = single.ListRefrenceObject[i].StartTime;
                //結束時間
                singleParameter.EndTime = single.ListRefrenceObject[i].StartTime;
                //增加物件
                parameter.ListSingleHitObjectConvertParameter.Add(singleParameter);
            }

            return(parameter);
        }
Exemple #26
0
        public RpHitObject GenerateRpHitObject(SingleHitObjectConvertParameter singleHitObject, ConvertParameter single)
        {
            var rpHitObject = new RpHitObject(single.ContainerConvertParameter.ListObjectContainer[0].ListContainObject[0], singleHitObject.StartTime);

            //fake sample
            return(rpHitObject);
        }
Exemple #27
0
 public int GetMultiNumber(ConvertParameter single, int i)
 {
     if (single.ContainerConvertParameter.LayoutNumber > 1)
         return CalRandomNumber(single, i) % single.ContainerConvertParameter.LayoutNumber + 1;
     return 1;
 }
 internal void SetConvertParameter(ConvertParameter singleSlideParameter)
 {
     _singleSlideParameter = singleSlideParameter;
 }
Exemple #29
0
 /// <summary>
 ///     generate readom value by something
 /// </summary>
 /// <returns></returns>
 private int GetRandomValue(ConvertParameter single)
 {
     return(single.ListRefrenceObject.Count + single.ContainerConvertParameter.ListObjectContainer.Count + 1);
 }
        /// <summary>
        /// Create intensity calibrate data(raman shift format)
        /// </summary>
        /// <param name="para">raman convert coefficient</param>
        /// <param name="standardCalCoefs">2241 standard coefs</param>
        /// <param name="pixelFirstX">First x of calibration spectrum</param>
        /// <param name="pixelYDatas">Calibratoin sepctrum y datas</param>
        /// <param name="userCalCoefs">User calibrate coefs</param>
        /// <returns>Intensity calibration datas</returns>
        public static double[] GetIntensityCalData(ConvertParameter para, double[] standardCalCoefs, int pixelFirstX, double[] pixelYDatas, double[] userCalCoefs = null)
        {
            //X校正系数为3阶,共4个参数, Y轴校正为5阶,共6个参数
            if (para == null || para.convertCoefs == null || para.convertCoefs.Length != 4 ||
                pixelFirstX < 0 || pixelYDatas == null || pixelYDatas.Length < 5 ||
                para.ramanLastX <= para.ramanFirstX || para.ramanFirstX < 0 || para.ramanDataCount < 1)
            {
                ErrorString = "Invalid Parameters";
                return(null);
            }

            if (standardCalCoefs == null || standardCalCoefs.Length < 2)
            {
                ErrorString = "Invalid Parameters";
                return(null);
            }

            if (userCalCoefs != null && userCalCoefs.Length < 2)
            {
                ErrorString = "Invalid Parameters";
                return(null);
            }

            //为了防止覆盖,需要克隆一个数组
            double[] operateYDatas = new double[pixelYDatas.Length];
            Array.Copy(pixelYDatas, operateYDatas, operateYDatas.Length);

            //用户自定义校准需要另外处理
            if (userCalCoefs != null)
            {
                //按照像素光谱的格式来拟合用户自定义系数光谱
                double[] userCalDatas = PolynomialResult(userCalCoefs, pixelFirstX, 1.0, operateYDatas.Length);
                //标准物质像素光谱 = 用户系数拟合光谱 x 替代物光谱像素
                for (int i = 0; i < operateYDatas.Length; i++)
                {
                    operateYDatas[i] *= userCalDatas[i];
                }
            }

            //将标准物质像素光谱转换为拉曼谱
            double[] ramanXDatas;
            double[] ramanYDatas = PiexToRaman(para, pixelFirstX, operateYDatas, out ramanXDatas);
            if (ramanYDatas == null)
            {
                return(null);
            }

            //标准系数拟合光谱
            double[] standardPolyDatas = PolynomialResult(standardCalCoefs, para.ramanFirstX, para.ramanXStep, para.ramanDataCount);

            //实际计算为 (Sample Measure / Sample Real ) = (2241 Measure / 2241 Real)
            //这里用2241 Real/ 2241 Measure, 出去之后直接乘上 Sample Measure,就得到Sample Real
            for (int i = 0; i < ramanYDatas.Length; i++)
            {
                ramanYDatas[i] = standardPolyDatas[i] / (ramanYDatas[i] == 0 ? 1 : ramanYDatas[i]);
            }
            double minY = ramanYDatas.Min();

            for (int i = 0; i < ramanYDatas.Length; i++)
            {
                ramanYDatas[i] = ramanYDatas[i] / minY;
            }

            return(ramanYDatas);
        }
Exemple #31
0
 private void Start()
 {
     MessageBox.Show(_("This process will create a copy of source UTAU DB.\n\nPlease make sure that you are not in violation of the license terms of the DB."),
                     _("Notice"),
                     MessageBoxButtons.OK,
                     MessageBoxIcon.Exclamation);
     lock (mutex_) {
         stop_requested_ = false;
     }
     textLineBuffer.Text = "";
     buttonStart.Text = start_button_cancel_text_;
     var starter = new ParameterizedThreadStart(DoConvert);
     var thread = new Thread(starter);
     var parameter = new ConvertParameter(textSourceDb.Text, textDestinationDb.Text);
     thread.Start(parameter);
 }