📄 form1.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;
using AxWMPLib;
using WMPLib;
namespace 解释器模式
{
public partial class Form1 : Form
{
string path = Application.StartupPath + "\\Sounds\\";
MediaPlayer p;
MediaPlayer p2;
Expression expression;
Expression expression2;
PlayContext context;
PlayContext context2;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
InitSound();
}
private void button11_Click(object sender, EventArgs e)
{
context = new PlayContext();
context.PlayText = txtMain.Text;
context2 = new PlayContext();
context2.PlayText = txtChord.Text;
timerMain.Interval = 1000;
timerChord.Interval = 1000;
timerMain.Start();
timerChord.Start();
}
private void timerMain_Tick(object sender, EventArgs e)
{
if (context.PlayText.Length > 0)
{
try
{
expression = ExpressionFactory.CreateExpression(context.PlayText.Substring(0, 1),p);
expression.Interpret(context);
timerMain.Interval = p.Interval;
}
catch (Exception ex)
{
timerMain.Stop();
MessageBox.Show(ex.Message);
}
}
else
{
timerMain.Stop();
}
}
private void timerChord_Tick(object sender, EventArgs e)
{
if (context2.PlayText.Length > 0)
{
try
{
expression2 = ExpressionFactory.CreateExpression(context2.PlayText.Substring(0, 1), p2);
expression2.Interpret(context2);
timerChord.Interval = p2.Interval;
}
catch (Exception ex)
{
timerChord.Stop();
txtChord.Text = txtChord.Text.Replace(context2.PlayText, "");
MessageBox.Show(context2.PlayText);
}
}
else
{
timerChord.Stop();
}
}
private void InitSound()
{
p = new MediaPlayer(path, axCL2, axDL2, axEL2, axFL2, axGL2, axAL2, axBL2, axCL1, axDL1, axEL1, axFL1, axGL1, axAL1, axBL1, axC, axD, axE, axF, axG, axA, axB, axCH1, axDH1, axEH1, axFH1, axGH1, axAH1, axBH1, axCH2, axDH2, axEH2, axFH2, axGH2, axAH2, axBH2, axCH3, axDH3, axEH3);
for (int i = 0; i < 38; i++)
p.GetSound(i, i);
p2 = new MediaPlayer(path, axCL2, axDL2, axEL2, axFL2, axGL2, axAL2, axBL2, axCL1, axDL1, axEL1, axFL1, axGL1, axAL1, axBL1, axC, axD, axE, axF, axG, axA, axB, axCH1, axDH1, axEH1, axFH1, axGH1, axAH1, axBH1, axCH2, axDH2, axEH2, axFH2, axGH2, axAH2, axBH2, axCH3, axDH3, axEH3);
for (int i = 0; i < 38; i++)
p2.GetSound(i, i);
}
private void btnSHT_Click(object sender, EventArgs e)
{
txtMain.Text = "T 500 " +
"O 3 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 4 C 1 O 3 A 0.5 G 1 C 0.5 E 0.5 D 3 " +
"D 0.5 E 0.5 G 3 D 0.5 E 0.5 O 2 A 3 A 0.5 O 3 C 0.5 D 1.5 E 0.5 D 0.5 O 2 B 0.5 A 0.5 O 3 C 0.5 O 2 G 3 " +
"O 3 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 4 C 1 O 3 A 0.5 G 1 C 0.5 E 0.5 D 3 " +
"D 0.5 E 0.5 G 3 D 0.5 E 0.5 O 2 A 3 A 0.5 O 3 C 0.5 D 1.5 E 0.5 D 0.5 O 2 B 0.5 A 0.5 G 0.5 O 3 C 3 " +
"P 0.5 O 4 C 0.5 C 0.5 O 3 A 0.5 O 4 C 2 P 0.5 O 3 A 0.5 O 4 C 0.5 O 3 A 0.5 G 2.5 G 0.5 E 0.5 A 1.5 G 0.5 C 1 D 0.25 C 0.25 D 0.5 E 2.5 "+
"E 0.5 E 0.5 D 0.5 E 2.5 O 4 C 0.5 C 0.5 O 3 B 0.5 A 3 E 0.5 E 0.5 D 1.5 E 0.5 O 4 C 0.5 O 3 B 0.5 A 0.5 E 0.5 G 2.5 "+
"O 3 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 4 C 1 O 3 A 0.5 G 1 C 0.5 E 0.5 D 3 " +
"D 0.5 E 0.5 G 3 D 0.5 E 0.5 O 2 A 3 A 0.5 O 3 C 0.5 D 1.5 E 0.5 D 0.5 O 2 B 0.5 A 0.5 G 0.5 O 3 C 3 ";
txtChord.Text = "T 500 " +
"P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 A 1 P 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 1 " +
"P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 O 0 A 0.5 O 1 E 0.5 " +
"O 2 C 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 0.5 O 1 B 0.5 " +
"O 2 G 0.5 O 1 B 0.5 C 0.5 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 O 0 E 0.5 B 0.5 O 1 G 0.5 B 0.5 G 0.5 O 0 B 0.5 P 0.5 O 1 E 0.5 E 0.5 E 0.5 E 0.5 E 0.5 E 1 " +
"P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 A 1 P 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 1 " +
"P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 O 0 A 0.5 O 1 E 0.5 " +
"O 2 C 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 0.5 O 1 B 0.5 " +
"O 2 G 0.5 O 1 B 0.5 C 0.5 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 O 0 E 0.5 B 0.5 O 1 G 0.5 B 0.5 G 0.5 O 0 B 0.5 P 0.5 O 1 E 0.5 E 0.5 E 0.5 E 0.5 E 0.5 E 1 " +
"P 2 O 1 D 0.5 A 0.5 O 2 F 0.5 O 1 A 0.5 P 2 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 P 2 F 0.25 O 2 C 0.25 F 0.25 A 0.25 O 3 C 0.25 O 2 A 0.25 F 0.25 C 0.25 " +
"O 0 A 0.25 O 1 E 0.25 A 0.25 O 2 C 0.25 E 0.25 C 0.25 O 1 A 0.25 E 0.25 O 0 A 0.25 O 1 E 0.25 A 0.25 O 2 C 0.25 E 0.25 C 0.25 O 1 A 0.25 E 0.25 " +
"P 2 O 1 C 0.5 G 0.5 O 2 E 0.5 O 1 G 0.5 P 2 D 0.5 A 0.5 O 2 F 0.5 O 1 A 0.5 " +
"P 2 O 1 E 0.25 B 0.25 O 2 E 0.25 G 0.25 B 0.25 G 0.25 E 0.25 O 1 B 0.25 " +
"D 0.25 A 0.25 O 2 D 0.25 F 0.25 A 0.25 F 0.25 D 0.25 O 1 A 0.25 E 0.25 G 0.25 O 2 B 0.25 E 0.25 G 0.25 E 0.25 B 0.25 O 1 G 0.25 "+
"P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 A 1 P 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 1 " +
"P 1 O 1 F 0.5 O 2 C 0.5 A 0.5 C 0.5 O 0 A 0.5 O 1 E 0.5 " +
"O 2 C 1 O 1 E 0.5 B 0.5 O 2 G 0.5 O 1 B 0.5 O 2 G 0.5 O 1 B 0.5 " +
"O 2 G 0.5 O 1 B 0.5 C 0.5 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 O 2 E 0.5 O 1 G 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 F 0.5 C 0.5 O 0 E 0.5 B 0.5 O 1 G 0.5 B 0.5 G 0.5 O 0 B 0.5 P 0.5 O 1 E 0.5 E 0.5 E 0.5 E 0.5 E 0.5 E 1 ";
}
private void btnYXDCB_Click(object sender, EventArgs e)
{
//textBox1.Text = "T 1000 O 1 G 0.5 O 2 C 0.5 E 1.5 G 0.5 E 1 D 0.5 C 0.5 C 0.5 C 0.5 C 0.5 O 1 A 0.25 G 0.25 G 1 G 0.5 O 2 C 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 1 A 0.5 G 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 E 0.5 D 0.5 C 0.5 C 0.25 D 0.25 O 1 A 1 G 0.5 A 0.5 O 2 C 1.5 D 0.25 E 0.25 D 1 E 0.5 C 0.5 C 3 O 1 G 0.5 O 2 C 0.5 E 1.5 G 0.5 E 1 D 0.5 C 0.5 C 0.5 C 0.5 C 0.5 O 1 A 0.25 G 0.25 G 1 G 0.5 O 2 C 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 1 A 0.5 G 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 E 0.5 D 0.5 C 0.5 C 0.25 D 0.25 O 1 A 1 G 0.5 A 0.5 O 2 C 1.5 D 0.25 E 0.25 D 1 E 0.5 C 0.5 C 3 E 0.5 G 0.5 O 3 C 1.5 O 2 B 0.25 O 3 C 0.25 O 2 B 1 A 0.5 G 0.5 A 0.5 O 3 C 0.5 O 2 E 0.5 D 0.5 C 1 C 0.5 C 0.5 C 0.5 O 3 C 1 O 2 G 0.25 A 0.25 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 3 E 0.5 G 0.5 O 3 C 1.5 O 2 B 0.25 O 3 C 0.25 O 2 B 1 A 0.5 G 0.5 A 0.5 O 3 C 0.5 O 2 E 0.5 D 0.5 C 1 C 0.5 C 0.5 C 0.5 O 3 C 1 O 2 G 0.25 A 0.25 G 0.5 D 0.25 E 0.25 D 0.5 C 0.5 C 3 ";
txtMain.Text = "T 1000 O 2 G 0.5 O 3 C 0.5 E 1.5 G 0.5 E 1 D 0.5 C 0.5 C 0.5 C 0.5 C 0.5 O 2 A 0.25 G 0.25 G 1 G 0.5 O 3 C 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 1 A 0.5 G 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 E 0.5 D 0.5 C 0.5 C 0.25 D 0.25 O 2 A 1 G 0.5 A 0.5 O 3 C 1.5 D 0.25 E 0.25 D 1 E 0.5 C 0.5 C 3 O 2 G 0.5 O 3 C 0.5 E 1.5 G 0.5 E 1 D 0.5 C 0.5 C 0.5 C 0.5 C 0.5 O 2 A 0.25 G 0.25 G 1 G 0.5 O 3 C 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 1 A 0.5 G 0.5 E 1.5 G 0.5 G 0.5 G 0.5 A 0.5 G 0.5 E 0.5 D 0.5 C 0.5 C 0.25 D 0.25 O 2 A 1 G 0.5 A 0.5 O 3 C 1.5 D 0.25 E 0.25 D 1 E 0.5 C 0.5 C 3 E 0.5 G 0.5 O 4 C 1.5 O 3 B 0.25 O 4 C 0.25 O 3 B 1 A 0.5 G 0.5 A 0.5 O 4 C 0.5 O 3 E 0.5 D 0.5 C 1 C 0.5 C 0.5 C 0.5 O 4 C 1 O 3 G 0.25 A 0.25 G 0.5 D 0.25 E 0.25 D 0.5 C 0.25 D 0.25 D 3 E 0.5 G 0.5 O 4 C 1.5 O 3 B 0.25 O 4 C 0.25 O 3 B 1 A 0.5 G 0.5 A 0.5 O 4 C 0.5 O 3 E 0.5 D 0.5 C 1 C 0.5 C 0.5 C 0.5 O 4 C 1 O 3 G 0.25 A 0.25 G 0.5 D 0.25 E 0.25 D 0.5 C 0.5 C 3 ";
txtChord.Text = "";
}
}
class PlayContext
{
private string text;
public string PlayText
{
get { return text; }
set { text = value; }
}
}
/// <summary>
/// 表达式工厂
/// </summary>
class ExpressionFactory
{
public static Expression CreateExpression(string letter, MediaPlayer p)
{
Expression result = null;
switch (letter)
{
case "O":
result = new Scale(p);
break;
case "T":
result = new Speed(p);
break;
case "C":
case "D":
case "E":
case "F":
case "G":
case "A":
case "B":
case "P":
result = new Note(p);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -