public SKPoint Coordinates(IInstrumentId instrument, TimeInUnits t) { var instrumentIndex = InstrumentIndex(instrument); var y = gridRect.Top + (instrumentIndex + 1) * settings.LineHeight; var x = gridRect.Left + settings.BeatWidth * t.Index / (float)this.info.UnitsPerBeat.Index; return(new SKPoint(x, y)); }
public static Pattern ToPattern(PatternData data) { var idToSound = new Dictionary <int, ISoundId>(); foreach (var soundData in data.Sounds) { if (idToSound.ContainsKey(soundData.Id)) { throw new PatternParsingException("Duplicate sound id: " + soundData.Id + ". Used by \"" + idToSound[soundData.Id].Name() + "\" and \"" + soundData.Instrument + "." + soundData.Technique + "\""); } idToSound.Add(soundData.Id, new SimpleSoundId(soundData.Instrument, soundData.Technique, soundData.Mark)); } var builder = new Pattern.Builder(data.Sounds.Select(i => idToSound[i.Id]).ToArray()); int index = 0; foreach (var beatData in data.Beats) { var t = new TimeInUnits(beatData.Time); ISoundId sound; if (!idToSound.TryGetValue(beatData.Sound, out sound)) { throw new PatternParsingException("Invalid instrument id for beat #" + index + "(t=" + beatData.Time + ", id=" + beatData.Sound + ")"); } builder.Add(t, sound, new Velocity(beatData.Velocity)); } var patternInfo = new PatternInfo.Builder { BarsCount = data.BarsCount, BeatsPerBar = data.BeatsPerBar, SuggestedBpm = data.SuggestedBpm, UnitsPerBeat = new TimeInUnits(data.TimeUnitsPerBeat) }; builder.PatternInfo = patternInfo.Build(); return(builder.Build()); }
public float TimeInBeats(TimeInUnits t) { return(t.Index / (float)UnitsPerBeat.Index); }