Пример #1
0
        private long GetTempo(MidiFile midiFile)
        {
            TempoMap tempoMap = midiFile.GetTempoMap();
            long     ticks    = 123;

            BarBeatTimeSpan barBeatTimeSpan = TimeConverter.ConvertTo <BarBeatTimeSpan>(ticks, tempoMap);
            MusicalTimeSpan musicalTimeSpan = TimeConverter.ConvertTo <MusicalTimeSpan>(ticks, tempoMap);

            return(barBeatTimeSpan.Bars);
        }
Пример #2
0
    public float MBTToBeats(Mbt mbt)
    {
        if (!_HasMidiFile())
        {
            return(mbt.beat * 4);
        }

        BarBeatTimeSpan inputSpan  = new BarBeatTimeSpan(mbt.measure, mbt.beat, mbt.tick);
        BeatTimeSpan    outputSpan = TimeConverter.ConvertTo <BeatTimeSpan>(inputSpan, _tempoMap);

        float resultBeats = (float)outputSpan.Beats + ((float)outputSpan.Ticks / _TicksPerBeat());

        return(resultBeats);
    }
Пример #3
0
    public Mbt BeatsToMBT(float beat)
    {
        if (!_HasMidiFile())
        {
            return(new Mbt(0, (int)beat, 0));
        }

        float        frac      = beat % 1.0f;
        int          beats     = (int)beat;
        int          ticks     = (int)(frac * _TicksPerBeat());
        BeatTimeSpan inputSpan = new BeatTimeSpan(beats, ticks);

        BarBeatTimeSpan outputSpan = TimeConverter.ConvertTo <BarBeatTimeSpan>(inputSpan, _tempoMap);

        return(new Mbt((int)outputSpan.Bars, (int)outputSpan.Beats, (int)outputSpan.Ticks));
    }
Пример #4
0
        static void Main(string[] args)
        {
            IEnumerable <string> globFiles = GlobClass.Glob("D:\\data\\folkdataset\\*.mid");

            Console.Write(globFiles.LongCount());
            var count = 0;

            foreach (string filename in globFiles)
            {
                var split_filename = filename.Split('\\');
                var id_filename    = split_filename[split_filename.Count() - 1];
                var midiFile       = MidiFile.Read(filename);
                var result         = new List <MidiFile>();
                var windowSize     = 4;

                for (var i = 0; ; i++)
                {
                    var startTime = new BarBeatTimeSpan(i, 0);
                    var endTime   = new BarBeatTimeSpan(i + windowSize, 0);

                    var grid     = new ArbitraryGrid(new[] { startTime, endTime });
                    var newFiles = midiFile.SplitByGrid(grid).ToList();

                    if (!newFiles.Any())
                    {
                        break;
                    }
                    else if (newFiles.Count == 1)
                    {
                        result.Add(newFiles[0]);
                    }
                    else
                    {
                        var secondNewFile = newFiles[1];
                        var tempoMap      = secondNewFile.GetTempoMap();
                        var length        = secondNewFile.GetTimedEvents().LastOrDefault()?.TimeAs <BarBeatTimeSpan>(tempoMap);

                        if (length.Bars == windowSize || (length.Bars == windowSize - 1 && length.Beats > 0 && length.Ticks > 0))
                        {
                            result.Add(secondNewFile);
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                int j = 0;
                foreach (MidiFile res in result)
                {
                    res.Write("D:\\data\\folkdataset_split_4\\" + id_filename + "_" + j + ".mid");
                    j += 1;
                    count++;
                }

                //   TODO
                if (count >= 10000)
                {
                    Console.WriteLine("Reached the alloted size");
                    return;
                }
            }
        }