Exemplo n.º 1
0
        private void Sync()
        {
            // Fase1: Verwijderen van overbodige scores,
            //        dit zijn scores van players die niet meer in het scoreboard zitten
            foreach (Score score in this.AccumulatedScores)
            {
                var player = score.Player;
                if (!this.Players.Contains(player))
                {
                    // verwijder participants die al een statistic hebben
                    score.Delete();
                }
            }

            // Fase2: creeer score voor de players die nog geen score hebben
            foreach (Person player in this.Players)
            {
                var scores = this.AccumulatedScores.ToArray();
                var score  = scores.FirstOrDefault(v => v.Player == player);

                if (score == null)
                {
                    score = new ScoreBuilder(this.strategy.Session).Build();
                    ((ScoreDerivedRoles)score).Player = player;

                    this.AddAccumulatedScore(score);
                }
            }
        }
Exemplo n.º 2
0
        public IActionResult FilterData([FromBody] FilterRequest request)
        {
            try
            {
                var validateResult = ValidateRequest(request.Data);

                if (validateResult != null)
                {
                    return(validateResult);
                }

                BaseResponse response     = new BaseResponse();
                ScoreBuilder scoreBuilder = new ScoreBuilder();

                bool isDatePresent     = false;
                bool isGroupPresent    = false;
                bool isTeamNamePresent = false;

                DateTime dateFrom = new DateTime();
                DateTime dateTo   = new DateTime();

                if (!string.IsNullOrEmpty(request.DateFrom) && !string.IsNullOrEmpty(request.DateTo))
                {
                    isDatePresent = true;

                    dateFrom = DateTime.Parse(request.DateFrom);
                    dateTo   = DateTime.Parse(request.DateTo);

                    if (dateFrom > dateTo)
                    {
                        response.Success         = false;
                        response.ExceptionObject = new Exception("DateFrom can't have greater value than DateTo.");
                        return(BadRequest(response));
                    }
                }

                if (!string.IsNullOrEmpty(request.Group))
                {
                    isGroupPresent = true;
                }

                if (!string.IsNullOrEmpty(request.TeamName))
                {
                    isTeamNamePresent = true;
                }

                GroupScoreCounter groupScoreCounter = new GroupScoreCounter(scoreBuilder.BuildScores(request.Data));

                var result = groupScoreCounter.FilterData(dateFrom, dateTo, request.Group, request.TeamName, isDatePresent,
                                                          isGroupPresent, isTeamNamePresent);

                response.Success = true;
                response.Result  = result;
                return(Ok(response));
            }
            catch (Exception e)
            {
                return(BadRequest(e));
            }
        }
Exemplo n.º 3
0
        private void Sync()
        {
            // Phase1: Removing unnecessary scores, these are scores from players who are no longer in the scoreboard
            foreach (Score score in this.AccumulatedScores)
            {
                var player = score.Player;
                if (!this.Players.Contains(player))
                {
                    // Remove participants who already have a statistic
                    score.Delete();
                }
            }

            // Phase2: Create score for the players who don't have a score yet
            foreach (Person player in this.Players)
            {
                var scores = this.AccumulatedScores.ToArray();
                var score  = scores.FirstOrDefault(v => v.Player == player);

                if (score == null)
                {
                    score = new ScoreBuilder(this.strategy.Session).Build();
                    ((ScoreDerivedRoles)score).Player = player;

                    this.AddAccumulatedScore(score);
                }
            }
        }
Exemplo n.º 4
0
        public MusicModule()
        {
            var metrics = new StavesMetrics(halfSpace: 8.0, staffLineThickness: 1.5);

            //var layout = CreateTestLayoutEngine(metrics);
            Layout       = CreateLayoutEngine(metrics);
            ScoreBuilder = CreateScoreBuilder();
        }
Exemplo n.º 5
0
 public DrillViewModel(
     MusicDrawingBuilder musicDrawingBuilder,
     DrillQuiz drillQuiz,
     ScoreBuilder scoreBuilder,
     ScoreLayoutAlgorithm layout)
 {
     MusicDrawingBuilder = musicDrawingBuilder;
     DrillQuiz           = drillQuiz;
     ScoreBuilder        = scoreBuilder;
     Layout = layout;
 }
Exemplo n.º 6
0
        private Task[] ExecSortedSetAdd(Guid eventId, AuditEvent auditEvent)
        {
            if (ScoreBuilder == null)
            {
                throw new ArgumentException("The score builder was not provided");
            }
            var score = ScoreBuilder.Invoke(auditEvent);

            auditEvent.CustomFields[RedisEventIdField] = eventId;
            var tasks = new List <Task>();
            var key   = GetKey(auditEvent);
            var value = GetValue(auditEvent);
            var batch = GetDatabase(auditEvent).CreateBatch();

            tasks.Add(batch.SortedSetAddAsync(key, value, score));
            if (TimeToLive.HasValue)
            {
                tasks.Add(batch.KeyExpireAsync(key, TimeToLive));
            }
            // trim by scores
            if (MinScoreBuilder != null)
            {
                double stop    = MinScoreBuilder.Invoke(auditEvent);
                var    exclude = MinScoreExclusive ? Exclude.None : Exclude.Stop;
                tasks.Add(batch.SortedSetRemoveRangeByScoreAsync(key, double.NegativeInfinity, stop, exclude));
            }
            if (MaxScoreBuilder != null)
            {
                double start   = MaxScoreBuilder.Invoke(auditEvent);
                var    exclude = MaxScoreExclusive ? Exclude.None : Exclude.Start;
                tasks.Add(batch.SortedSetRemoveRangeByScoreAsync(key, start, double.PositiveInfinity, exclude));
            }
            // trim by ranks
            if (MaxRankBuilder != null)
            {
                long max = MaxRankBuilder.Invoke(auditEvent);
                if (max > 0)
                {
                    tasks.Add(batch.SortedSetRemoveRangeByRankAsync(key, 0, -(max + 1)));
                }
                else
                {
                    tasks.Add(batch.SortedSetRemoveRangeByRankAsync(key, -max, -1));
                }
            }
            OnBatchExecuting(batch, tasks, auditEvent);
            batch.Execute();
            return(tasks.ToArray());
        }
Exemplo n.º 7
0
        public TestScores(ScoreBuilder scoreBuilder)
        {
            ScoreBuilder          = scoreBuilder;
            SimpleTestPhraseScore = ScoreBuilder.FromMelodicPhrase(SimpleTestPhrase);
            EightNotePhraseScore  = ScoreBuilder.FromMelodicPhrase(EighthNotePhrase);
            var chordPhrase = ChordsPhrase.Select(chords => (chords, Duration.Quarter));

            ChordPhraseScore = ScoreBuilder.FromChordsPhrase(chordPhrase);
            Scores           = new Dictionary <string, IReadOnlyDictionary <Beat, BeatGroup> >
            {
                { "simple-test-phrase", SimpleTestPhraseScore },
                { "eight-note-phrase", EightNotePhraseScore },
                { "diatonic-chord-phrase", ChordPhraseScore }
            };
        }
Exemplo n.º 8
0
        public async Task <IActionResult> AddNewOrUpdateScores([FromBody] GroupScoresRequest request)
        {
            BaseResponse response = new BaseResponse();

            if (!ModelState.IsValid)
            {
                response.Success         = false;
                response.ExceptionObject = new Exception(NotValidRequest, new Exception(ModelState.Values.First().Errors.First().ErrorMessage));
                return(BadRequest(response));
            }

            try
            {
                ScoresDatabase scoresDatabase = new ScoresDatabase(_context);

                var validateResult = ValidateRequest(request.Data);

                if (validateResult != null)
                {
                    return(validateResult);
                }

                ScoreBuilder scoreBuilder = new ScoreBuilder();

                scoresDatabase.AddNewOrUpdateScores(scoreBuilder.BuildScores(request.Data));
                await _context.SaveChangesAsync();

                var scores = scoresDatabase.GetAllFromTheTableScore().ToList();

                if (scores.Any())
                {
                    GroupScoreCounter groupScoreCounter = new GroupScoreCounter(scores);
                    IDictionary <string, IDictionary <string, int> > groupResults =
                        groupScoreCounter.SortListAccordingGroup(request.RetrieveGroups);

                    response.Result = groupResults;
                }

                response.Success = true;
                return(Ok(response));
            }
            catch (Exception e)
            {
                response.Success         = false;
                response.ExceptionObject = e;
                return(BadRequest(response));
            }
        }
Exemplo n.º 9
0
        private void Sync()
        {
            if (this.ExistScoreboardWhereGame)
            {
                var players = new List <Person>(this.ScoreboardWhereGame.Players);

                // Fase1: Verwijderen van overbodige statistics en
                //        bijhouden van participants zonder statistics
                foreach (Score score in this.Scores)
                {
                    var player = score.Player;
                    if (players.Contains(player))
                    {
                        // verwijder participants die al een statistic hebben
                        players.Remove(player);
                    }
                    else
                    {
                        // delete statistic waarvan de participant niet meer voorkomt
                        score.Delete();
                    }
                }

                // Fase2: creeer statistics voor de participants die nog geen
                //        statistic hadden
                foreach (var player in players)
                {
                    var score = new ScoreBuilder(this.strategy.Session)
                                .Build();

                    ((ScoreDerivedRoles)score).Player = player;

                    this.AddScore(score);
                }
            }
            else
            {
                foreach (Score score in this.Scores)
                {
                    score.Delete();
                }
            }
        }
Exemplo n.º 10
0
        private void Sync()
        {
            if (this.ExistScoreboardWhereGame)
            {
                var players = new List <Person>(this.ScoreboardWhereGame.Players);

                // Phase1: Removing unnecessary statistics and keeping track of participants without statistics
                foreach (Score score in this.Scores)
                {
                    var player = score.Player;
                    if (players.Contains(player))
                    {
                        // Remove participants who already have a statistic
                        players.Remove(player);
                    }
                    else
                    {
                        // Delete statistic of which the participant no longer occurs
                        score.Delete();
                    }
                }

                // Phase2: Create statistics for the participants who did not have a statistic yet
                foreach (var player in players)
                {
                    var score = new ScoreBuilder(this.strategy.Session)
                                .Build();

                    ((ScoreDerivedRoles)score).Player = player;

                    this.AddScore(score);
                }
            }
            else
            {
                foreach (Score score in this.Scores)
                {
                    score.Delete();
                }
            }
        }
Exemplo n.º 11
0
        public IActionResult CalculateStatisticsForResults([FromBody] GroupScoresRequest request)
        {
            BaseResponse response = new BaseResponse();

            if (!ModelState.IsValid)
            {
                response.Success         = false;
                response.ExceptionObject = new Exception(NotValidRequest, new Exception(ModelState.Values.First().Errors.First().ErrorMessage));
                return(BadRequest(response));
            }

            try
            {
                var validateResult = ValidateRequest(request.Data);

                if (validateResult != null)
                {
                    return(validateResult);
                }

                ScoreBuilder scoreBuilder = new ScoreBuilder();

                GroupScoreCounter            groupScoreCounter = new GroupScoreCounter(scoreBuilder.BuildScores(request.Data));
                IList <ChampionsLeagueModel> championsLeague   = groupScoreCounter.CalculateStatistics(request.RetrieveGroups);

                response.Success = true;
                response.Result  = championsLeague;
                return(Ok(response));
            }
            catch (Exception e)
            {
                response.Success         = false;
                response.ExceptionObject = e;
                return(BadRequest(response));
            }
        }
Exemplo n.º 12
0
 public void SetUp()
 {
     _gameScorer   = new GameScorer(new Player("Player 1"), new Player("Player 2"));
     _scoreBuilder = new ScoreBuilder(_gameScorer);
 }
Exemplo n.º 13
0
        static int RunPlayDirect(PlayDirectOptions options)
        {
            var engine = new DesktopEngine();

            var midiAccess = MidiAccessManager.Default;

            foreach (var input in options.MidiInputs)
            {
                var foundMidiInput = midiAccess.Inputs.Where(x => x.Name.ToLower().Contains(input.ToLower()) || x.Id.ToLower().Contains(input.ToLower())).FirstOrDefault();

                if (foundMidiInput == null)
                {
                    Console.Error.WriteLine($"Did not find any MIDI input partially matching '{input}'.");
                    return(1);
                }
                else
                {
                    Console.WriteLine($"Using MIDI input '{foundMidiInput.Name}'.");
                }
                engine.MidiInputs.Add(midiAccess.OpenInputAsync(foundMidiInput.Id).Result);
            }

            foreach (var output in options.MidiOutputs)
            {
                var foundMidiOutput = midiAccess.Outputs.Where(x => x.Name.ToLower().Contains(output.ToLower()) || x.Id.ToLower().Contains(output.ToLower())).FirstOrDefault();

                if (foundMidiOutput == null)
                {
                    Console.Error.WriteLine($"Did not find any MIDI output partially matching '{output}'.");
                    return(1);
                }
                else
                {
                    Console.WriteLine($"Using MIDI output'{foundMidiOutput.Name}'.");
                }
                engine.MidiOutputs.Add(midiAccess.OpenOutputAsync(foundMidiOutput.Id).Result);
            }

            var scoreFilePath = options.FilePath;

            FileStream fileStream = null;

            ScoreBuilder            scoreBuilder    = null;
            Score                   score           = null;
            Dictionary <byte, byte> noteVelocityMap = new Dictionary <byte, byte>();

            foreach (var index in Enumerable.Range(0, 128))
            {
                noteVelocityMap.Add((byte)index, 0);
            }
            var lastNoteOnVelocities = new Queue <decimal>(3);

            if (scoreFilePath != null)
            {
                if (!File.Exists(options.FilePath))
                {
                    Console.Error.WriteLine($"Could not find sheet music file '{options.FilePath}'.");
                    return(1);
                }

                try
                {
                    fileStream = new FileStream(scoreFilePath, FileMode.Open);
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine($"Could not open sheet music file path {scoreFilePath}: {ex}");
                }

                if (fileStream == null)
                {
                    return(2);
                }

                try
                {
                    scoreBuilder = new ScoreBuilder(fileStream);
                    score        = scoreBuilder.Build();
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine($"Could not build sheet music score from file path {scoreFilePath}: {ex}");
                }

                if (scoreBuilder == null || score == null)
                {
                    return(3);
                }
                else
                {
                    Console.WriteLine($"Successfully loaded sheet music at {scoreFilePath}.");
                }

                engine.Interpreter.SetScore(score, scoreFilePath);
            }

            foreach (var midiInput in engine.MidiInputs)
            {
                midiInput.MessageReceived += (object sender, MidiReceivedEventArgs e) =>
                {
                    switch (e.Data[0])
                    {
                    case MidiEvent.NoteOff:
                    {
                        var pitch = e.Data[1];
                        Console.WriteLine($"Off (actual): {pitch}");
                        engine.Interpreter.Input(new NoteRelease()
                            {
                                Pitch = pitch
                            });
                    }
                    break;

                    case MidiEvent.NoteOn:
                    {
                        var pitch    = e.Data[1];
                        var velocity = e.Data[2];

                        var isSimulatedNoteOff = velocity == 0;
                        var isRequestedPitchAlreadyAtZeroVelocity = noteVelocityMap[pitch] == 0;
                        var isRequestedNoteOffAlreadyNoteOff      = isRequestedPitchAlreadyAtZeroVelocity;
                        var shouldNoteOffBeNoteOn = isSimulatedNoteOff && isRequestedNoteOffAlreadyNoteOff;

                        if (shouldNoteOffBeNoteOn)
                        {
                            var averagePreviousNoteVelocities = (byte)(lastNoteOnVelocities.Average());
                            Console.WriteLine($"<!!! CAUGHT !!!> On (simulated) {counter1++}: {pitch} at {String.Format("{0:0%}", averagePreviousNoteVelocities / 127.0)}");
                            noteVelocityMap[pitch] = averagePreviousNoteVelocities;
                            engine.Interpreter.Input(new NotePress()
                                {
                                    Pitch    = pitch,
                                    Velocity = averagePreviousNoteVelocities
                                });
                        }
                        else
                        {
                            /** The Yamaha P-45 sends Note Off messages as Note On
                             * messages with zero velocity. */
                            var isNoteOnActuallyNoteOff = velocity == 0;

                            if (isNoteOnActuallyNoteOff)
                            {
                                Console.WriteLine($"Off (simulated) {counter1++}: {pitch} at {String.Format("{0:0%}", velocity / 127.0)} <---> (Last) {String.Format("{0:0%}", (byte)noteVelocityMap[pitch] / 127.0)}");
                                noteVelocityMap[pitch] = 0;
                                engine.Interpreter.Input(new NoteRelease()
                                    {
                                        Pitch = pitch
                                    });
                            }
                            else
                            {
                                lastNoteOnVelocities.Enqueue(velocity);
                                if (lastNoteOnVelocities.Count > 3)
                                {
                                    lastNoteOnVelocities.Dequeue();
                                }

                                noteVelocityMap[pitch] = velocity;
                                Console.WriteLine($"On {counter1++}: {pitch} at {String.Format("{0:0%}", velocity / 127.0)}");
                                engine.Interpreter.Input(new NotePress()
                                    {
                                        Pitch    = pitch,
                                        Velocity = velocity
                                    });
                            }
                        }
                    }
                    break;

                    case MidiEvent.CC:
                    {
                        var pedalKind = e.Data[1];
                        var position  = (byte)(127 - e.Data[2]);

                        // Console.WriteLine($"Pedal {counter1++}: {String.Format("{0:0%}", position / 127.0)}");
                        engine.Interpreter.Input(new PedalChange()
                            {
                                Pedal    = PedalKind.Sustain,
                                Position = position
                            });
                    }
                    break;
                    }
                };
            }

            engine.Interpreter.Output += (IPianoEvent e) =>
            {
                foreach (var output in engine.MidiOutputs)
                {
                    switch (e)
                    {
                    case PedalChange pedal:
                        output.Send(new byte[]
                        {
                            MidiEvent.CC,
                            pedal.Pedal switch
                            {
                                PedalKind.UnaCorda => 67,
                                PedalKind.Sostenuto => 66,
                                PedalKind.Sustain => 64,
                                _ => 64
                            },
                            (byte)(pedal.Position)
                        }, 0, 3, 0);
                        break;
Exemplo n.º 14
0
 public void SetUp()
 {
     _gameScorer = new GameScorer(new Player("Player 1"), new Player("Player 2"));
     _scoreBuilder = new ScoreBuilder(_gameScorer);
 }