Maison >Applet WeChat >Développement de mini-programmes >Partager l'applet de prononciation du piano dans la console

Partager l'applet de prononciation du piano dans la console

高洛峰
高洛峰original
2018-05-10 14:44:392918parcourir

Réfléchissez-y, comment implémentez-vous ces jolies notes dans le programme ? N'est-ce pas très intéressant ? Si nous pouvons créer un petit programme pour simuler la prononciation de sept notes de musique, pouvez-vous le faire ?

Ensuite, jetons un coup d’œil à la source de ce son magique. . .

Tout d’abord, construisons un projet de console. Le cœur de ce programme est de savoir comment faire prononcer les sons par le système. Cela utilise la méthode Beep() dans la classe Console. Il a deux paramètres : le premier consiste à contrôler la fréquence du son et le second à contrôler le temps. . longueur.

Une autre méthode est ReadKey(), qui lit un caractère à la fois. Elle a un paramètre booléen pour contrôler si la touche enfoncée est affichée dans la fenêtre de la console.

Ce qui est plus intéressant, c'est que nous pouvons également enregistrer les notes d'entrée pour enregistrer la musique que nous venons de jouer. Ici, nous utilisons le type timespan pour calculer l'intervalle de temps, et utilisons également la pause du thread (Thread.Sheep).

Vous trouverez ci-dessous le code de l'ensemble du programme pour référence.

  /// <summary>
        /// 获取声音及改变背景颜色
        /// </summary>
        /// <param name="i"></param>
        static void Sound(int i)
        {
            int fre=(Convert.ToInt32(i) + 13) * 37;
            switch (i)
            {
                case &#39;1&#39;:
                    Console.Beep(fre, 300);//第一个参数指定声音的频率,第二个参数指定声音的持续时间
                    Console.BackgroundColor = ConsoleColor.Blue;
                    Console.Clear();
                    break;
                case &#39;2&#39;:
                    Console.Beep(fre, 300);
                    Console.BackgroundColor = ConsoleColor.Cyan;
                    Console.Clear();
                    break;
                case &#39;3&#39;:
                    Console.Beep(fre, 300);
                    Console.BackgroundColor = ConsoleColor.Green;
                    Console.Clear();
                    break;
                case &#39;4&#39;:
                    Console.Beep(fre, 300);
                    Console.BackgroundColor = ConsoleColor.Red;
                    Console.Clear();
                    break;
                case &#39;5&#39;:
                    Console.Beep(fre, 300);
                    Console.BackgroundColor = ConsoleColor.Yellow;
                    Console.Clear();
                    break;
                case &#39;6&#39;:
                    Console.Beep(fre, 300);
                    Console.BackgroundColor = ConsoleColor.White;
                    Console.Clear();
                    break;
                case &#39;7&#39;:
                    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 != &#39;q&#39;)//如果输入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();//将记录清空
                }

            }

        }


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn