制作C++电子琴

啊哈,又是我ziwulan,一个没有固定开场白的小编!

最近闲在家里,有事没事就发篇博文
希望你能给点赞

好的,进入主题——如何用C++制作电子琴呢?
很简单,这是我们主要的一个头文件:
#include
它包含了我们的主角——Beep

Beep函数

那么Beep是什么呢?
它在Windows.h里的定义是

WINBASEAPI BOOL WINAPI Beep(DWORD,DWORD);

翻译成人话,就是
Beep ( 音高 , 持续时间) ;
注意,这里的时间以毫秒为单位!!!

举个例子——

Beep(523,250);//523是音符do的音高

那么这就是演奏音符do,持续250毫秒

颜色函数(其实并没有什么卵用

关于颜色函数呢,我也在之前的博文里有讲过
但我还是十分贴心地把注释放了过来
其主要目的是为了美观
为了省时间请自动忽略

void color(int a)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
/*
0 黑色            1 深蓝
2 绿色            3 青色
4 深红            5 深紫
6 深黄            7 浅灰(原色)
8 灰色            9 深青(深青比深蓝浅)
10亮绿            11亮蓝
12亮红            13粉色
14亮黄            15亮白
*/

从do到si

音高表:

音符 对应音高
do 523
#do 554
re 578
#re 622
mi 659
fa 698
#fa 740
so 784
#so 831
la 880
#la 932
si 988

注:#代表将原音符音高升高半音
说真的这应该让音乐老师告诉你们

设置标题

两种方法——

  1. system(“title 标题”);
  2. SetConsoleTitle(“标题”);

前者简便,但是会出现这种情况:
在这里插入图片描述
啊啊啊啊啊,那个管理员是谁?!

所以,后者就好多了:
在这里插入图片描述
所以选哪个大家应该很清楚了~

关于conio.h

#include
这个头文件到底有什么用呢?
记住这个函数——
getch();
getch的优点就是:可以不按回车键给变量赋值
但是getch也有缺点:只支持字符类变量
它也可以起到类似system(“pause”); 的作用,按任意键继续,但是并不会提示“请按任意键继续. . .”

getch()的赋值

  1. 字符变量名= getch();
  2. getch(字符变量名)

OK,源代码奉上——

#include
#include
#include
using namespace std;
void color(int a)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
int main()
{
	SetConsoleTitle("电子琴");
    char p;
    int i = 0,a=523,ab=554,b=578,bc=622,c=659,d=698,de=740,e=784,ef=831,f=880,fg=932,g=988;color(11);
    printf("Input 1,2,3,4,5,6,7,w(up),s(down)\n");color(10);
	printf("Space to exit\n");color(14);printf("Shift up a half step");color(12);
	printf("(only 1,2,4,5,6)\n");color(15);
    while(i<100)
    {
        p = getch();
        switch(p)
        {
        case '1':
            Beep(a,250);
            break;
        case '!':
        	Beep(ab,250);
            break;
        case '2':
            Beep(b,250);
            break;
        case '@':
            Beep(bc,250);
            break;
        case '3':
            Beep(c,250);
            break;
        case '4':
            Beep(d,250);
            break;
        case '$':
            Beep(de,250);
            break;
        case '5':
            Beep(e,250);
            break;
        case '%':
            Beep(ef,250);
            break;
        case '6':
            Beep(f,250);
            break;
        case '^':
            Beep(fg,250);
            break;
        case '7':
            Beep(g,250);
            break;
        case 'w':
        	a*=2;ab*=2;b*=2;bc*=2;c*=2;d*=2;de*=2;e*=2;ef*=2;f*=2;fg*=2;g*=2;
        	break;
        case 's':
        	a/=2;ab/=2;b/=2;bc/=2;c/=2;d/=2;de/=2;e/=2;ef/=2;f/=2;fg/=2;g/=2;
        	break;
        case ' ':
        	return 0;break;
        default:
            break;
        }
    }
}

那么,感谢您对小编的支持,
我们下一篇博客见~
您的赞是对小编的最大支持!

你可能感兴趣的:(c++)