preliminary (incomplete) implementation to display scale highlights on piano roll , like lmms
This commit is contained in:
parent
69f9a4e3be
commit
387f6cded6
@ -155,12 +155,66 @@
|
||||
<Command ID="PianoRollEditor_ContextMenu_InsertLyrics" Title="Insert _Lyrics..." />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Properties" Title="P_roperties..." />
|
||||
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_None" Title="_None" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Major" Title="Major" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_MinorHarmonic" Title="Harmonic minor" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_MinorMelodic" Title="Melodic minor" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Diminished" Title="Diminished" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_BebopMajor" Title="Major bebop" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_BebopDominant" Title="Dominant bebop" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Arabic" Title="Arabic" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Enigmatic" Title="Enigmatic" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Neopolitan" Title="Melodic minor" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_NeopolitanMinor" Title="Neopolitan minor" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_HungarianMinor" Title="Hungarian minor" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Dorian" Title="Dorian" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Phyrogolydian" Title="Phyrogolydian" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Lydian" Title="Lydian" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Mixolydian" Title="Mixolydian" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Aeolian" Title="Aeolian" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Locrian" Title="Locrian" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Minor" Title="Minor" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_Chromatic" Title="Chromatic" />
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale_HalfWholeDiminished" Title="Half-whole diminished" />
|
||||
|
||||
<Command ID="PianoRollEditor_ContextMenu_Scale" Title="_Scale">
|
||||
<Items>
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_None" />
|
||||
<Separator />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Major" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_MinorHarmonic" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_MinorMelodic" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Diminished" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_BebopMajor" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_BebopDominant" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Arabic" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Enigmatic" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Neopolitan" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_NeopolitanMinor" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_HungarianMinor" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Dorian" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Phyrogolydian" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Lydian" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Mixolydian" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Aeolian" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Locrian" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Minor" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_Chromatic" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale_HalfWholeDiminished" />
|
||||
</Items>
|
||||
</Command>
|
||||
|
||||
<Command ID="PianoRollEditor_ContextMenu_Chord" Title="C_hord" />
|
||||
|
||||
<Command ID="PianoRollEditor_ContextMenu">
|
||||
<Items>
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Arrow" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Draw" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Erase" />
|
||||
<Separator />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Scale" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Chord" />
|
||||
<Separator />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_NoteFixedLength" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Quantize" />
|
||||
<CommandReference CommandID="PianoRollEditor_ContextMenu_Length" />
|
||||
|
||||
@ -51,6 +51,28 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_Triplet", ContextMenu_NoteFixedLength_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_NoteFixedLength_Dot", ContextMenu_NoteFixedLength_Click);
|
||||
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_None", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Major", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_MinorHarmonic", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_MinorMelodic", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Diminished", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_BebopMajor", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_BebopDominant", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Arabic", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Enigmatic", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Neopolitan", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_NeopolitanMinor", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Hungarian", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Dorian", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Phyrogolydian", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Lydian", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Mixolydian", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Aeolian", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Locrian", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Minor", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_Chromatic", ContextMenu_Scale_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Scale_HalfWholeDiminished", ContextMenu_Scale_Click);
|
||||
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_ShowGridLines", ContextMenuToggleGridLines_Click);
|
||||
Application.AttachCommandEventHandler("PianoRollEditor_ContextMenu_Properties", ContextMenuProperties_Click);
|
||||
}
|
||||
@ -100,6 +122,39 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: make this more user-friendly
|
||||
private static Dictionary<string, int[]> Scales = new Dictionary<string, int[]>();
|
||||
static PianoRollView()
|
||||
{
|
||||
Scales.Add("Major", new int[] { 1, 3, 5, 6, 8, 10, 12 });
|
||||
Scales.Add("MinorHarmonic", new int[] { 1, 3, 4, 6, 7, 10, 12 });
|
||||
}
|
||||
|
||||
private int[] _CurrentScale = null;
|
||||
public int[] CurrentScale
|
||||
{
|
||||
get { return _CurrentScale; }
|
||||
set
|
||||
{
|
||||
_CurrentScale = value;
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
private void ContextMenu_Scale_Click(object sender, EventArgs e)
|
||||
{
|
||||
Command cmd = (sender as Command);
|
||||
string sValue = cmd.ID.Substring("PianoRollEditor_ContextMenu_Scale_".Length);
|
||||
if (Scales.ContainsKey(sValue))
|
||||
{
|
||||
CurrentScale = Scales[sValue];
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrentScale = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnBeforeContextMenu(EventArgs e)
|
||||
{
|
||||
base.OnBeforeContextMenu(e);
|
||||
@ -448,7 +503,6 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int[] noteValuesBlackKeys = new int[] { 1, 3, 5, 8, 10 };
|
||||
|
||||
private Vector2D Quantize(Vector2D pt)
|
||||
@ -527,7 +581,21 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control
|
||||
int noteValue = (int)(((double)i / gridHeight) % 12) + 1;
|
||||
if (Array.IndexOf<int>(noteValuesBlackKeys, noteValue) != -1)
|
||||
{
|
||||
e.Graphics.FillRectangle(new SolidBrush(Color.FromRGBAByte(0xDD, 0xDD, 0xDD)), new Rectangle(gridRect.X, gridRect.Y + i, gridRect.Width, gridHeight));
|
||||
if (CurrentScale != null && (Array.IndexOf<int>(CurrentScale, noteValue) != -1))
|
||||
{
|
||||
e.Graphics.FillRectangle(new SolidBrush(Color.FromRGBAByte(0xAA, 0xCC, 0xAA)), new Rectangle(gridRect.X, gridRect.Y + i, gridRect.Width, gridHeight));
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Graphics.FillRectangle(new SolidBrush(Color.FromRGBAByte(0xDD, 0xDD, 0xDD)), new Rectangle(gridRect.X, gridRect.Y + i, gridRect.Width, gridHeight));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (CurrentScale != null && (Array.IndexOf<int>(CurrentScale, noteValue) != -1))
|
||||
{
|
||||
e.Graphics.FillRectangle(new SolidBrush(Color.FromRGBAByte(0xAA, 0xDD, 0xAA)), new Rectangle(gridRect.X, gridRect.Y + i, gridRect.Width, gridHeight));
|
||||
}
|
||||
}
|
||||
|
||||
gridPen.Color = Colors.LightGray;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user