using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; using System.Runtime.InteropServices;
namespace DominateHornVocalization { public partial class Frm_Main : Form {
public Frm_Main() { InitializeComponent(); }
protected enum Tone//枚举 五线谱 { REST = 0, A = 220, B = 247, C = 262, D = 294, E = 330, F = 349, G = 392, }
protected enum Duration//枚举 发音时间 { WHOLE = 1200, HALF = WHOLE / 2, QUARTER = HALF / 2, EIGHTH = QUARTER / 2, SIXTEENTH = EIGHTH / 2, }
protected struct Note { Tone toneVal; //初始化一个Tone对象 Duration durVal; //初始化一个Duration对象 public Note(Tone frequency, Duration time) //定义一个Note方法 { toneVal = frequency; //为变量toneVal赋值 durVal = time; //为变量durVal赋值 } public Tone NoteTone { get { return toneVal; } set { toneVal = value; } } //定义一个Tone类型的属性 public Duration NoteDuration { get { return durVal; } set { durVal = value; } } //定义一个Duration类型的属性 }
protected void Play(Note tune) { if (tune.NoteTone == Tone.REST) //当没有选择RadioButton按钮时 Thread.Sleep((int)tune.NoteDuration); //将当前线程挂起指定的时间 else //当选定某一个RadioButton按钮时 //通过控制台扬声器播放具有指定频率和持续时间的声音 Console.Beep((int)tune.NoteTone, (int)tune.NoteDuration); }
private void PlayMic(int a) { Note note = new Note(); switch (a) { case 1: note.NoteTone = Tone.A; break; case 2: note.NoteTone = Tone.B; break; case 3: note.NoteTone = Tone.C; break; case 4: note.NoteTone = Tone.D; break; case 5: note.NoteTone = Tone.E; break; case 6: note.NoteTone = Tone.F; break; case 7: note.NoteTone = Tone.G; break; default: break; } if (this.radioButton1.Checked) { note.NoteDuration = Duration.WHOLE; } else if (this.radioButton2.Checked) { note.NoteDuration = Duration.HALF; } else if (this.radioButton3.Checked) { note.NoteDuration = Duration.QUARTER; } else if (this.radioButton4.Checked) { note.NoteDuration = Duration.EIGHTH; } else if (this.radioButton5.Checked) { note.NoteDuration = Duration.SIXTEENTH; } Play(note); }
private void button2_Click(object sender, EventArgs e) { PlayMic(2); }
private void button3_Click(object sender, EventArgs e) { PlayMic(3); }
private void button4_Click(object sender, EventArgs e) { PlayMic(4); }
private void button5_Click(object sender, EventArgs e) { PlayMic(5); }
private void button6_Click(object sender, EventArgs e) { PlayMic(6); }
private void button7_Click(object sender, EventArgs e) { PlayMic(7); } private void button1_Click(object sender, EventArgs e) { PlayMic(1); } } }