PHP前端开发

分享控制台中的钢琴发音小程序

百变鹏仔 4小时前 #前端问答
文章标签 控制台

想一下,平时那些好听的音符在程序中怎么实现呢?这个是不是很有意思呀!如果我们自己可以做一个小程序来模拟音乐中七个音符的发音,你是否能够做的到?

接下来,我们就一起去看看这个神奇的声音的来源。。。

首先,我们建一个控制台的项目。这个程序的核心是怎样让系统发音,这就用到了Console类中的Beep()这个方法,它呢,有两个参数,第一个是来控制声音的频率,第二个是来控制时间的长短。

还有一个方法是ReadKey(),它呢,每次读一个字符,它有一个bool型参数,用来控制按下的键是否显示在控制台窗口中。

其中,比较有意思的是,我们还可以对输入的音符进行记录,用于录制我们自己刚刚弹的音乐。这里呢,我们用到了timespan 的类型  ,用来计算时间间隔,还有用到了线程的停顿(Thread.Sheep)。

下面呢,是整个程序的代码,以供参考。

  /// <summary>        /// 获取声音及改变背景颜色        /// </summary>        /// <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 </ll></ll>