The 2 most annoying bugs are segfaults, infinite loops, and *off-by-one* errors.

This commit is contained in:
Starbeamrainbowlabs 2017-12-03 17:48:15 +00:00
parent fb3fc45a09
commit 564b649204
Signed by: sbrl
GPG Key ID: 1BE5172E637709C2
4 changed files with 10 additions and 10 deletions

View File

@ -11,7 +11,7 @@ namespace MusicBoxConverter
/// <summary> /// <summary>
/// The height of a strip for this music box, in millimetres. /// The height of a strip for this music box, in millimetres.
/// </summary> /// </summary>
public float StripHeightMm = 58f; public float StripHeightMm = 58.8f;
public List<string> ValidNotes { get; private set; } public List<string> ValidNotes { get; private set; }
public Note LowestNote { public Note LowestNote {

View File

@ -49,7 +49,7 @@ namespace MusicBoxConverter
// Set the scale factor based on the strip height of the music box // Set the scale factor based on the strip height of the music box
scaleFactor = new Vector2( scaleFactor = new Vector2(
scaleFactor.X, scaleFactor.X,
MusicBox.StripHeightMm / MusicBox.NoteCount MusicBox.StripHeightMm / (MusicBox.NoteCount-1)
); );
foreach(Note note in AllNotes()) { foreach(Note note in AllNotes()) {
@ -60,7 +60,7 @@ namespace MusicBoxConverter
public void Output(string destinationFilename) public void Output(string destinationFilename)
{ {
Vector2 area = new Vector2(TrackLength, MusicBox.NoteCount).Multiply(scaleFactor); Vector2 area = new Vector2(TrackLength, MusicBox.NoteCount-1).Multiply(scaleFactor);
Vector2 size = area.Add(offset.Multiply(2)); Vector2 size = area.Add(offset.Multiply(2));
SvgWriter svg = new SvgWriter( SvgWriter svg = new SvgWriter(
@ -72,10 +72,10 @@ namespace MusicBoxConverter
for(float i = 0; i < area.Y; i += scaleFactor.Y) for(float i = 0; i < area.Y; i += scaleFactor.Y)
{ {
Vector2 start = offset.Add(new Vector2(0, i)); Vector2 start = offset.Add(new Vector2(0, i));
svg.WriteLine(start, start.Add(new Vector2(area.X, 0)), "darkgreen", 1); svg.WriteLine(start, start.Add(new Vector2(area.X, 0)), "darkgreen", 0.75f);
} }
svg.WriteRectangle(offset, area); svg.WriteRectangle(offset, area, "red", 0.75f);
foreach(Note note in AllNotes()) foreach(Note note in AllNotes())
{ {
@ -83,7 +83,7 @@ namespace MusicBoxConverter
svg.WriteCircle( svg.WriteCircle(
new Vector2( new Vector2(
offset.X + note.Time * scaleFactor.X, offset.X + note.Time * scaleFactor.X,
offset.Y + (MusicBox.NoteCount - MusicBox.NoteToBoxNumber(note)) * scaleFactor.Y offset.Y + ((MusicBox.NoteCount-1) - MusicBox.NoteToBoxNumber(note)) * scaleFactor.Y
), ),
holeSize // radius holeSize // radius
); );

View File

@ -9,8 +9,8 @@ namespace MusicBoxConverter
public static void Main(string[] args) public static void Main(string[] args)
{ {
MusicBoxScoreGenerator converter = new MusicBoxScoreGenerator( MusicBoxScoreGenerator converter = new MusicBoxScoreGenerator(
"/home/sbrl/Music/Sheets/HappyBirthday.midi", //"/home/sbrl/Music/Sheets/HappyBirthday.midi",
//"/tmp/Scale.midi", "/tmp/Scale.midi",
MusicBox.Note30 MusicBox.Note30
); );
converter.Output("/tmp/test.svg"); converter.Output("/tmp/test.svg");

View File

@ -53,7 +53,7 @@ namespace MusicBoxConverter
xml.Close(); xml.Close();
} }
public void WriteLine(Vector2 start, Vector2 end, string strokeStyle = "darkgreen", int strokeWidth = 3) public void WriteLine(Vector2 start, Vector2 end, string strokeStyle = "darkgreen", float strokeWidth = 3)
{ {
xml.WriteStartElement("line"); xml.WriteStartElement("line");
xml.WriteAttributeString("x1", $"{start.X}{UnitSuffix}"); xml.WriteAttributeString("x1", $"{start.X}{UnitSuffix}");
@ -85,7 +85,7 @@ namespace MusicBoxConverter
xml.WriteEndElement(); xml.WriteEndElement();
}*/ }*/
public void WriteRectangle(Vector2 position, Vector2 size, string strokeStyle = "red", int strokeWidth = 3) public void WriteRectangle(Vector2 position, Vector2 size, string strokeStyle = "red", float strokeWidth = 3)
{ {
xml.WriteStartElement("rect"); xml.WriteStartElement("rect");
xml.WriteAttributeString("x", $"{position.X}{UnitSuffix}"); xml.WriteAttributeString("x", $"{position.X}{UnitSuffix}");