[摘要]想一下,平时那些好听的音符在程序中怎么实现呢?这个是不是很有意思呀!如果我们自己可以做一个小程序来模拟音乐中七个音符的发音,你是否能够做的到?接下来,我们就一起去看看这个神奇的声音的来源。。。首先,...
想一下,平时那些好听的音符在程序中怎么实现呢?这个是不是很有意思呀!如果我们自己可以做一个小程序来模拟音乐中七个音符的发音,你是否能够做的到?
接下来,我们就一起去看看这个神奇的声音的来源。。。
首先,我们建一个控制台的项目。这个程序的核心是怎样让系统发音,这就用到了Console类中的Beep()这个方法,它呢,有两个参数,第一个是来控制声音的频率,第二个是来控制时间的长短。
还有一个方法是ReadKey(),它呢,每次读一个字符,它有一个bool型参数,用来控制按下的键是否显示在控制台窗口中。
其中,比较有意思的是,我们还可以对输入的音符进行记录,用于录制我们自己刚刚弹的音乐。这里呢,我们用到了timespan 的类型 ,用来计算时间间隔,还有用到了线程的停顿(Thread.Sheep)。
下面呢,是整个程序的代码,以供参考。
/// <summary>
/// 获取声音及改变背景颜色
/// </summary>
/// <param name="i"></param>
static void Sound(int i)
{
int fre=(Convert.ToInt32(i) + 13) * 37;
switch (i)
{
case '1':
Console.Beep(fre, 300);//第一个参数指定声音的频率,第二个参数指定声音的持续时间
Console.BackgroundColor = ConsoleColor.Blue;
Console.Clear();
break;
case '2':
Console.Beep(fre, 300);
Console.BackgroundColor = ConsoleColor.Cyan;
Console.Clear();
break;
case '3':
Console.Beep(fre, 300);
Console.BackgroundColor = ConsoleColor.Green;
Console.Clear();
break;
case '4':
Console.Beep(fre, 300);
Console.BackgroundColor = ConsoleColor.Red;
Console.Clear();
break;
case '5':
Console.Beep(fre, 300);
Console.BackgroundColor = ConsoleColor.Yellow;
Console.Clear();
break;
case '6':
Console.Beep(fre, 300);
Console.BackgroundColor = ConsoleColor.White;
Console.Clear();
break;
case '7':
Console.Beep(fre, 300);
Console.BackgroundColor = ConsoleColor.Blue;
Console.Clear();
break;
default:
break;
}
}
//该类定义记录输入的字符以及时间间隔
class LL
{
public char c;//字符
public DateTime d;//时间间隔
}
static void Main(string[] args)
{
Console.SetWindowSize(100,30);
List<LL> record = new List<LL>();
while (true)
{
ConsoleKeyInfo cki = Console.ReadKey(true);
char i = cki.KeyChar;
if (i != 'q')//如果输入q,则开始按录制的播放
{
LL l = new LL();
l.c = i;
l.d = DateTime.Now;
record.Add(l);
Sound(i);
}
else
{
for (int k = 0; k < record.Count;k++ )
{
TimeSpan tspan;
if (k != 0)//如果是第一个,则计算时间间隔
{
tspan=record[k].d - record[k-1].d;//计算输入的时间间隔
Console.WriteLine(tspan);
Thread.Sleep(tspan);//将当前线程阻塞指定的时间。
}
Sound(record[k].c);
}
record.Clear();//将记录清空
}
}
}