Finish up note validation
This commit is contained in:
parent
f71e215b61
commit
09dd4eed31
3 changed files with 45 additions and 18 deletions
|
@ -1,28 +1,45 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Melanchall.DryWetMidi.Smf.Interaction;
|
||||
|
||||
namespace MusicBoxConverter
|
||||
{
|
||||
public class MusicBox
|
||||
{
|
||||
public string Name { get; private set; }
|
||||
public List<string> ValidNotes { get; private set; }
|
||||
|
||||
private MusicBox(List<string> inValidNotes)
|
||||
private MusicBox(string inName, List<string> inValidNotes)
|
||||
{
|
||||
Name = inName;
|
||||
ValidNotes = inValidNotes;
|
||||
}
|
||||
|
||||
public bool IsValidNote(string noteName)
|
||||
/// <summary>
|
||||
/// Calculates whether the specified note can be played by this music box.
|
||||
/// </summary>
|
||||
/// <param name="note">The note to check.</param>
|
||||
/// <returns>Whether the note can be played by this music box.</returns>
|
||||
public bool IsValidNote(Note note)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
return ValidNotes.Contains(
|
||||
(note.NoteName.ToString() + note.Octave).Replace("Sharp", "")
|
||||
);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Name;
|
||||
//return string.Format("[MusicBox: Name={0}, ValidNotes={1}]", Name, ValidNotes);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A 30 note music box.
|
||||
/// @Starbeamrainbowlabs has one of these - it was the part of the
|
||||
/// inspiration for the whole project!
|
||||
/// </summary>
|
||||
public static MusicBox Note30 = new MusicBox(
|
||||
"30 Note Music Box",
|
||||
new List<string>() {
|
||||
"G3",
|
||||
"C4", "D4", "E4", "F4", "G4", "A4", "A#4", "B4",
|
||||
|
|
|
@ -9,27 +9,36 @@ using SBRL.Utilities;
|
|||
|
||||
namespace MusicBoxConverter
|
||||
{
|
||||
public class MusicBoxScoreGenerator
|
||||
{
|
||||
public Vector2 offset { get; set; } = new Vector2(10, 10);
|
||||
public Vector2 scaleFactor { get; set; } = new Vector2(0.1f, 4f);
|
||||
public class MusicBoxScoreGenerator
|
||||
{
|
||||
public Vector2 offset { get; set; } = new Vector2(10, 10);
|
||||
public Vector2 scaleFactor { get; set; } = new Vector2(0.1f, 4f);
|
||||
|
||||
public int holeSize { get; set; } = 5;
|
||||
public int holeSize { get; set; } = 5;
|
||||
|
||||
private int trackLength;
|
||||
public int TrackLength {
|
||||
get {
|
||||
if(trackLength == 0)
|
||||
trackLength = (int)AllNotes().Max((Note arg) => arg.Time);
|
||||
return trackLength;
|
||||
}
|
||||
}
|
||||
private int trackLength;
|
||||
public int TrackLength
|
||||
{
|
||||
get
|
||||
{
|
||||
if (trackLength == 0)
|
||||
trackLength = (int)AllNotes().Max((Note arg) => arg.Time);
|
||||
return trackLength;
|
||||
}
|
||||
}
|
||||
|
||||
public MusicBox MusicBox { get; private set; }
|
||||
MidiFile midiFile;
|
||||
|
||||
public MusicBoxScoreGenerator(string filename)
|
||||
public MusicBoxScoreGenerator(string filename, MusicBox inMusicBox)
|
||||
{
|
||||
MusicBox = inMusicBox;
|
||||
midiFile = MidiFile.Read("/home/sbrl/Music/Sheets/HappyBirthday.midi");
|
||||
|
||||
foreach(Note note in AllNotes()) {
|
||||
if (!MusicBox.IsValidNote(note))
|
||||
throw new Exception($"Error: The note {note} at {note.Time} can't be played by the {MusicBox}.");
|
||||
}
|
||||
}
|
||||
|
||||
public void Output(string destinationFilename)
|
||||
|
|
|
@ -7,7 +7,8 @@ namespace MusicBoxConverter
|
|||
public static void Main(string[] args)
|
||||
{
|
||||
MusicBoxScoreGenerator converter = new MusicBoxScoreGenerator(
|
||||
"/home/sbrl/Music/Sheets/HappyBirthday.midi"
|
||||
"/home/sbrl/Music/Sheets/HappyBirthday.midi",
|
||||
MusicBox.Note30
|
||||
);
|
||||
converter.Output("/tmp/test.svg");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue