Windows 原生API函数Beep() 弹奏音乐

您所在的位置:网站首页 音乐音调怎么排序的 Windows 原生API函数Beep() 弹奏音乐

Windows 原生API函数Beep() 弹奏音乐

2024-07-14 11:06| 来源: 网络整理| 查看: 265

一次偶然之中发现了这个函数(Beep())并且自己折腾了一波,看了看网上的代码,便发现了这个东西的表白,装逼的价值。

我们先来看一看他的函数原型:

BOOL Beep( DWORD dwFreq; //指定发出的频率 DWORD dwDuration; //指定发声的时常 毫秒为单位 );

我们通常看到的乐谱有几种,我们需要的是简谱这里面就有 do re mi fa so la xi 七个音符,通常分了高低音和半弦音,我们现在就需要关注的是这些音对应的频率(赫兹数),为了方便我们通常把他们定义成宏。 下面是我自己定义的宏:

//低音 #define L1 262 #define L2 294 #define L3 330 #define L4 349 #define L5 392 #define L6 440 #define L7 493 //高音 #define N1 532 #define N2 588 #define N3 660 #define N4 698 #define N5 784 #define N6 880 #define N7 988 //半弦音 #define H1 1046 #define H2 1175 #define H3 1319 #define H4 1397 #define H5 1568 #define H6 1760 #define H7 1976

其中L开头的是低音,N开头的是高音,H开头的是半弦音。1,2,3,4,5,6,7分别对应我们的七音符:do re mi fa so la xi

好了我们准备好了好了每一个音符之后,我们现在应该处理的是节拍的问题了。一般来说一拍为 400ms 为了方便我们也把他定义成宏来方便调用。

#define A 1600 //四拍 #define B 800 //两拍 #define C 400 //一拍 #define D 200 //半拍 #define E 100 //1/4拍 #define F 50 //1/8拍

有了这些储备我们就可以编写一些,简单的调调了。 比如,我在网上找的两只老虎的简谱: 这里写图片描述 好了 我们现在就只来编写第一段的音节。

#include #define turn 54 #define A 1600 #define B 800 #define C 400 //一拍 #define D 200 #define E 100 #define F 50 //低音 #define L1 262 #define L2 294 #define L3 330 #define L4 349 #define L5 392 #define L6 440 #define L7 493 //高音 #define N1 532 #define N2 588 #define N3 660 #define N4 698 #define N5 784 #define N6 880 #define N7 988 //半弦音 #define H1 1046 #define H2 1175 #define H3 1319 #define H4 1397 #define H5 1568 #define H6 1760 #define H7 1976 void sung() { Beep(N1, C); Beep(N2,C); Beep(N3, C); Beep(N1, C); Beep(N1, C); Beep(N2, C); Beep(N3, C); Beep(N1, C); Beep(N3, C); Beep(N4, C); Beep(N5, C); Beep(0, C); Beep(N3, C); Beep(N4, C); Beep(N5, C); Beep(0, C); //这里添加第二段 } void main() { sung(); }

又没有比较像(有些电脑只能在麦克风模式下面播放)。我们编写的第一段,没有高音,也没有低音。拍子也只是一拍。是比较简单了。 接下来我们来编写,第二段:

Beep(N5, D + E); Beep(N6, E); Beep(N5, D + E); Beep(N4, E); Beep(N3,C); Beep(N1, C); Beep(N5, D + E); Beep(N6, E); Beep(N5, D + E); Beep(N4, E); Beep(N3, C); Beep(N1, C); Beep(N2, C); Beep(N5, C); Beep(N1, C); Beep(0,C); Beep(N2, C); Beep(N5, C); Beep(N1, C); Beep(0, C);

233,个人认为最后一段的音调,不对。 下面是一个例子《小幸运》 这里写图片描述

#include #define turn 54 #define A 1600 #define B 800 #define C 400 //一拍 #define D 200 #define E 100 #define F 50 //低音 #define L1 262 #define L2 294 #define L3 330 #define L4 349 #define L5 392 #define L6 440 #define L7 493 //高音 #define N1 532 #define N2 588 #define N3 660 #define N4 698 #define N5 784 #define N6 880 #define N7 988 //半弦音 #define H1 1046 #define H2 1175 #define H3 1319 #define H4 1397 #define H5 1568 #define H6 1760 #define H7 1976 void sung() { Beep(N1, D); Beep(N5, D); Beep(H3, D); Beep(N1, D); Beep(N5, C); Beep(0, C); Beep(N2 + turn, D); Beep(N4, D); Beep(H1, D); Beep(N2, D); Beep(N4, C); Beep(0, C); Beep(L5, D); Beep(L7, D); Beep(N4, D); Beep(N7, D); Beep(L7, C); Beep(0, C); Beep(N1, D); Beep(N2, E); Beep(N3, E); Beep(H1, D); Beep(N1, D); Beep(N3, C); Beep(0, C); Beep(0, D); Beep(N3, D); Beep(N3, D); Beep(N5, D); Beep(N5, D); Beep(H1, D); Beep(H1, D); Beep(N7, D); Beep(N7, D); Beep(N6, D); Beep(N3, D); Beep(N6, D + C); Beep(0, C); Beep(0, D); Beep(N6, D); Beep(N6, D); Beep(N7, D); Beep(N7, D); Beep(H3, D); Beep(H3, D); Beep(N7, D); Beep(N7, D); Beep(N5, D); Beep(N3, D); Beep(N5, D + C); Beep(0, C); Beep(0, D); Beep(N3, D); Beep(N3, D); Beep(N5, D); Beep(N5, D); Beep(H1, D); Beep(H1, D); Beep(N7, D); Beep(N7, D); Beep(N6, D); Beep(N3, D); Beep(N6, D + C); Beep(N6, D); Beep(N7, D); Beep(N7 + turn, D); Beep(N6, D); Beep(N7, D); Beep(H3, C + C); Beep(H2, D); Beep(H1, D + D + C); Beep(0, C * 3); //2 Beep(0, D); Beep(N3, D); Beep(N3, D); Beep(N5, D); Beep(N5, D); Beep(H1, D); Beep(H1, D); Beep(N7, D); Beep(N7, D); Beep(N6, D); Beep(N3, D); Beep(N6, D + C); Beep(0, C); Beep(0, D); Beep(N6, D); Beep(N6, D); Beep(N7, D); Beep(N7, D); Beep(H3, D); Beep(H3, D); Beep(N7, D); Beep(N7, D); Beep(N3, D); Beep(N5, D + C); Beep(0, C); Beep(0, D); Beep(N3, D); Beep(N3, D); Beep(N5, D); Beep(N5, D); Beep(H1, D); Beep(H1, D); Beep(N7, D); Beep(N7, D); Beep(H1, D); Beep(N3, D); Beep(N6, D); Beep(0, D); Beep(N6, D); Beep(H1, D); Beep(N7, D); Beep(N7 + turn, D); Beep(N6, D); Beep(N7, D); Beep(H3, C + C); Beep(H2, D); Beep(H1, D + D + C); Beep(0, D); Beep(H3, D); Beep(H2, E); Beep(H1, E + D); Beep(N7, D); Beep(N6, D); Beep(N6, D); Beep(N6, D); Beep(N6, D); Beep(N6, D); Beep(H3, D); Beep(H2, D); Beep(H2, D * 3); Beep(0, C); } void main() { sung(); }

代码没有写完,接下来,你们有兴趣的话可以尝试一下。 当然这种方法也是可以简化的,我们可以将乐谱按照一定的顺序写到文件里面,然后我们去读然后识别。这样就可以得到一种简单的方法了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3