Heim  >  Artikel  >  WeChat-Applet  >  Teilen Sie das Klavier-Aussprache-Applet in der Konsole

Teilen Sie das Klavier-Aussprache-Applet in der Konsole

高洛峰
高洛峰Original
2018-05-10 14:44:392880Durchsuche

Denken Sie darüber nach, wie implementieren Sie diese netten Notizen in das Programm? Ist das nicht sehr interessant? Wenn wir ein kleines Programm erstellen können, um die Aussprache von sieben Noten in der Musik zu simulieren, könnten Sie das schaffen?

Als nächstes werfen wir einen Blick auf die Quelle dieses magischen Klangs. . .

Erstellen wir zunächst ein Konsolenprojekt. Der Kern dieses Programms besteht darin, das System dazu zu bringen, Töne auszusprechen. Dabei wird die Beep()-Methode in der Console-Klasse verwendet. Der erste dient der Steuerung der Tonfrequenz und der zweite der Steuerung der Zeit . Länge.

Eine weitere Methode ist ReadKey(), die jeweils ein Zeichen liest. Sie verfügt über einen Bool-Parameter, um zu steuern, ob die gedrückte Taste im Konsolenfenster angezeigt wird.

Interessanter ist, dass wir die eingegebenen Noten auch aufzeichnen können, um die Musik aufzunehmen, die wir gerade gespielt haben. Hier verwenden wir den Typ timespan, um das Zeitintervall zu berechnen, und verwenden auch die Thread-Pause (Thread.Sheep).

Nachfolgend finden Sie den Code des gesamten Programms als Referenz.

  /// <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();//将记录清空
                }

            }

        }


Das obige ist der detaillierte Inhalt vonTeilen Sie das Klavier-Aussprache-Applet in der Konsole. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn