private void newGenerateButton_Click(object sender, EventArgs e)
{
tabControl1.SelectedIndex = 0;
duration = Rhythm. GetDuration(tempoTrackBar. Value, notesCount);
Random random = new Random();
int divisor = random. Next(3, 5), addition = random. Next(1, 4);
int[] rhythm = Rhythm. GetRhythm(notesCount + notesCount / divisor + addition, notesCount);
int[] notes = Notes. GetNotes(selectedScale, notesCount, rhythm);
generatedMelody = new Melody(Melody. Number + "-ая мелодия", notes, rhythm, selectedScale. scaleName);
generatedMelodyList. Add(generatedMelody);
generatedMelodysComboBox. Items. Add(generatedMelody. Name + "(" + generatedMelody. ScaleName. ToString() + ")");
generatedMelodysComboBox. SelectedIndex = generatedMelodyList. IndexOf(generatedMelody);
Melody. Number++;
rhythmTextBox. Text = Parser. GetString(rhythm);
notesTextBox. Text = Parser. GetString(notes);
if (sd == null)
sd = new SoundDevices(outputDevice, Channel. Channel1);
SetLabelsNameNotesAndRhythm(generatedMelody);
SetEnable(false, SetEnableMode. All);
cts = new CancellationTokenSource();
stopButton. Select();
timer. Start();
task = Task. Run(() =>
{
Accompaniment. PlayAccord(tonica, generatedMelody. ScaleName, Direction. Down, outputDevice);
Thread. Sleep(800);
MelodyPlayer. PlayMelody(sd, generatedMelody, tonica, duration, grifNotes, buttons, cts. Token);
if (!cts. Token. IsCancellationRequested)
{
Thread. Sleep(400);
Accompaniment. PlayAccord(tonica, generatedMelody. ScaleName, Direction. Down, outputDevice);
}
}, cts. Token);
}
private void playAgainButton_Click(object sender, EventArgs e)
{
tabControl1.SelectedIndex = 0;
SetEnable(false, SetEnableMode. All);
if (generatedMelody!= null)
{
if (sd == null)
sd = new SoundDevices(outputDevice, Channel. Channel1);
SetLabelsNameNotesAndRhythm(generatedMelody);
duration = Rhythm. GetDuration(tempoTrackBar. Value, notesCount);
cts = new CancellationTokenSource();
stopButton. Select();
timer. Start();
task = Task. Run(() =>
{
Accompaniment. PlayAccord(tonica, generatedMelody. ScaleName, Direction. Down, outputDevice);
Thread. Sleep(800);
MelodyPlayer. PlayMelody(sd, generatedMelody, tonica, duration, grifNotes, buttons, cts. Token);
if (!cts. Token. IsCancellationRequested)
{
Thread. Sleep(400);
Accompaniment. PlayAccord(tonica, generatedMelody. ScaleName, Direction. Down, outputDevice);
}
}, cts. Token);
}
}
public void SetLabelsNameNotesAndRhythm(Melody melody)
{
nameLabel. Text = melody. Name + "(" + melody. ScaleName. ToString() + ")";
notesTextBox. Text = Parser. GetString(melody. Notes);
rhythmTextBox. Text = Parser. GetString(melody. Rhythm);
notesCountTextBox. Text = melody. Notes. Length. ToString();
}
private void grifPBox_MouseMove(object sender, MouseEventArgs e)
{
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 16; j++)
{
VisibleCoordButtons(buttons[i, j], e, grifPBox, i, j);
}
}
}
private void grif_Click(object sender, EventArgs e)
{
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 16; j++)
{
if ((Button)sender == buttons[i, j])
{
outputDevice. SendNoteOn(Channel. Channel1, grifNotes[i, j], 80);
if (!grid)
{
grid = true;
DrawGrid(i, j, scaleComboBox. SelectedIndex);
tonica = grifNotes[i, j];
}
return;
}
}
}
}
private void clearGrid_Click(object sender, EventArgs e)
{
ClearGrid();
grid = false;
}
private void scaleComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
int[] scaleIntervals = minorScale;
ScaleName scaleName = ScaleName. Minor;
switch (scaleComboBox. SelectedIndex)
{
case 0:
scaleIntervals = minorScale;
scaleName = ScaleName. Minor;
break;
case 1:
scaleIntervals = majorScale;
scaleName = ScaleName. Major;
break;
case 2:
scaleIntervals = flamencoScale;
scaleName = ScaleName. Flamenco;
break;
case 3:
scaleIntervals = bluesScale;
scaleName = ScaleName. Blues;
break;
case 4:
scaleIntervals = flamenco2Scale;
scaleName = ScaleName. Flamenco2;
break;
}
selectedScale = new MyScale(scaleName, scaleIntervals);
if (grid)
{
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 16; j++)
{
if (tonica == grifNotes[i, j])
{
ClearGrid();
DrawGrid(i, j, scaleComboBox. SelectedIndex);
}
}
}
}
}
private void notesCountTextBox_TextChanged(object sender, EventArgs e)
{
int res;
if (!int. TryParse(notesCountTextBox. Text, out res) && notesCountTextBox. Text!= "")
{
MessageBox. Show("Вводите целое число!");
notesCountTextBox. Text = "16";
notesCountTextBox. SelectAll();
return;
}
if(notesCountTextBox. Text!= "")
notesCount = int. Parse(notesCountTextBox. Text);
}
private void notesCountTextBox_MouseClick(object sender, MouseEventArgs e)
{
notesCountTextBox. SelectAll();
}
private void tempoTrackBar_Scroll(object sender, EventArgs e)
{
duration = Rhythm. GetDuration(tempoTrackBar. Value, notesCount);
}
private void savedMelodysComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
isGenerated = false;
int i = savedMelodysComboBox. SelectedIndex;
if (i < 0 || i >= savedMelodyList. Count)
return;
savedMelody = savedMelodyList[i];
SetLabelsNameNotesAndRhythm(savedMelody);
saveMelodyButton. Enabled = false;
}
private void playSavedMelodyButton_Click(object sender, EventArgs e)
{
SetEnable(false, SetEnableMode. All);
isGenerated = false;
if (savedMelody!= null)
{
if (sd == null)
sd = new SoundDevices(outputDevice, Channel. Channel1);
SetLabelsNameNotesAndRhythm(savedMelody);
saveMelodyButton. Enabled = false;
duration = Rhythm. GetDuration(tempoTrackBar. Value, savedMelody. Notes. Length);
cts = new CancellationTokenSource();
stopButton. Select();
timer. Start();
task = Task. Run(() =>
{
Accompaniment. PlayAccord(tonica, savedMelody. ScaleName, Direction. Down, outputDevice);
Thread. Sleep(800);
MelodyPlayer. PlayMelody(sd, savedMelody, tonica, duration, grifNotes, buttons, cts. Token);
if (!cts. Token. IsCancellationRequested)
{
Thread. Sleep(400);
Accompaniment. PlayAccord(tonica, savedMelody. ScaleName, Direction. Down, outputDevice);
}
}, cts. Token);
} }
private void generatedMelodysComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
isGenerated = true;
int i = generatedMelodysComboBox. SelectedIndex;
if (i < 0 || i >= generatedMelodyList. Count)
return;
generatedMelody = generatedMelodyList[i];
SetLabelsNameNotesAndRhythm(generatedMelody);
if(task!= null && task. IsCompleted)
saveMelodyButton. Enabled = true;
}
private void playGeneratedMelodyButton_Click(object sender, EventArgs e)
{
SetEnable(false, SetEnableMode. All);
isGenerated = true;
if (generatedMelody!= null)
{
if (sd == null)
sd = new SoundDevices(outputDevice, Channel. Channel1);
SetLabelsNameNotesAndRhythm(generatedMelody);
duration = Rhythm. GetDuration(tempoTrackBar. Value, generatedMelody. Notes. Length);
cts = new CancellationTokenSource();
stopButton. Select();
timer. Start();
task = Task. Run(() =>
{
Accompaniment. PlayAccord(tonica, generatedMelody. ScaleName, Direction. Down, outputDevice);
Thread. Sleep(800);
MelodyPlayer. PlayMelody(sd, generatedMelody, tonica, duration, grifNotes, buttons, cts. Token);
if (!cts. Token. IsCancellationRequested)
{
Thread. Sleep(400);
Accompaniment. PlayAccord(tonica, generatedMelody. ScaleName, Direction. Down, outputDevice);
}
}, cts. Token);
}
}
private void saveMelodyButton_Click(object sender, EventArgs e)
{
if (generatedMelody!= null)
{
if (!savedMelodyList. Contains(generatedMelody))
{
SetLabelsNameNotesAndRhythm(generatedMelody);
Parser. SaveMelodyToFile(generatedMelody);
savedMelodyList. Add(generatedMelody);
savedMelodysComboBox. Items. Add(generatedMelody. Name + "(" + generatedMelody. ScaleName. ToString() + ")");
MessageBox. Show("Мелодия \"" + generatedMelody. Name + "(" + generatedMelody. ScaleName. ToString() + ")" + "\" успешно сохранена");
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 |


