예제 #1
0
 private void _mainForm_FileOpenClick(object sender, EventArgs e)
 {
     _mainForm.trackID = 0;
     if (_mainForm.filePathes != null)
     {
         _commandManager.SelectFile(_mainForm.filePathes[_mainForm.trackID]);
     }
     info = _commandManager.ReturnData();
     _mainForm.totalSeconds = info.totalSeconds;
     _mainForm.totalMinutes = info.totalMinutes;
 }
예제 #2
0
 void _mainForm_NextTrack(object sender, EventArgs e)
 {
     if (_mainForm.trackID < _mainForm.filePathes.Length - 1)
     {
         if (_mainForm.isRandom() == true)
         {
             _mainForm.trackID = rand.Next(0, _mainForm.filePathes.Length);
         }
         else
         {
             _mainForm.trackID++;
         }
         _commandManager.SelectFile(_mainForm.filePathes[_mainForm.trackID]);
         _commandManager.Play();
         info = _commandManager.ReturnData();
         _mainForm.totalSeconds = info.totalSeconds;
         _mainForm.totalMinutes = info.totalMinutes;
     }
 }
예제 #3
0
 void _mainForm_Timer(object sender, ElapsedEventArgs e)
 {
     info = _commandManager.ReturnData();
     _mainForm.position = info.position;
     _mainForm.curSeconds = info.curSeconds;
     _mainForm.curMinutes = info.curMinutes;
 }
예제 #4
0
        public TrackInfo ReturnData()
        {
            TrackInfo info = new TrackInfo();
            if (wave != null && output != null)
            {
                TimeSpan currentTime = (output.PlaybackState == PlaybackState.Stopped) ? TimeSpan.Zero : wave.CurrentTime;

                info.position = Math.Min(100, (int)(100 * currentTime.TotalSeconds / wave.TotalTime.TotalSeconds));
                info.curSeconds = wave.CurrentTime.Seconds;
                info.curMinutes = (int)wave.CurrentTime.TotalMinutes;
                info.totalSeconds = wave.TotalTime.Minutes;
                info.totalMinutes = wave.TotalTime.Seconds;
            }
            return info;
        }
예제 #5
0
        private void makeTrackDiv()
        {
            log.Write("Track division");

            long waitCounter  = 0;
            int  endChannel   = 0;
            int  totalChannel = 0;

            TrackInfo ti = new TrackInfo();

            ti.offset = mmlInfo.dat.Count;
            track.Add(ti);

            foreach (byte b in TrackTemp)
            {
                outDatum dt = new outDatum(enmMMLType.unknown, null, null, b);
                mmlInfo.dat.Add(dt);
            }

            //PCM Data block
            foreach (KeyValuePair <enmChipType, ClsChip[]> kvp in mmlInfo.chips)
            {
                foreach (ClsChip chip in kvp.Value)
                {
                    if (chip == null)
                    {
                        continue;
                    }

                    chip.SetPCMDataBlock(null);
                }
            }

            //Set Initialize data
            foreach (KeyValuePair <enmChipType, ClsChip[]> kvp in mmlInfo.chips)
            {
                foreach (ClsChip chip in kvp.Value)
                {
                    if (chip == null)
                    {
                        continue;
                    }
                    chip.InitChip();
                }
            }

            foreach (KeyValuePair <enmChipType, ClsChip[]> kvp in mmlInfo.chips)
            {
                foreach (ClsChip chip in kvp.Value)
                {
                    if (chip == null)
                    {
                        continue;
                    }
                    totalChannel += chip.ChMax;
                }
            }

            do
            {
                log.Write("全パートコマンド解析");
                mmlInfo.AnalyzeAllPartCommand();

                log.Write("全パートのうち次のコマンドまで一番近い値を求める");
                waitCounter = mmlInfo.ComputeAllPartDistance();

                //log.Write("全パートのwaitcounterを減らす");
                //mmlInfo.DecAllPartWaitCounter(waitCounter);

                log.Write("終了パートのカウント");
                endChannel = mmlInfo.CountUpEndPart();

                if (endChannel < totalChannel)
                {
                    log.Write("全パートのwaitcounterを減らす");
                    mmlInfo.DecAllPartWaitCounter(waitCounter);
                }
            } while (endChannel < totalChannel);

            //残カット
            //if (mmlInfo.loopClock != -1 && waitCounter > 0 && waitCounter != long.MaxValue)
            //{
            //    mmlInfo.lClock -= waitCounter;
            //    mmlInfo.dSample -= (long)(mmlInfo.info.samplesPerClock * waitCounter);
            //}

            Common.SetLE32(mmlInfo.dat, (uint)(ti.offset + 0x03), (uint)(mmlInfo.dat.Count - ti.offset));
            Common.SetLE32(mmlInfo.dat, (uint)(ti.offset + 0x07), (uint)(mmlInfo.dummyCmdLoopOffset));
        }
예제 #6
0
 /// <summary>
 /// Добавляет информацию о треке в историю игрока
 /// </summary>
 public static void AddTrack(TrackInfo info)
 {
     playerHistory.TrackList.AddProduction(info, Instance.onTrackAdd);
 }