使用Beep()函数发出指定音高 (一)

本文介绍了如何使用C语言的Beep()函数发出指定音高,基于音乐中半音的频率等比数列,计算不同音名的频率,并提供了计算任意音名音高的函数示例,为后续播放指定音乐奠定了基础。
摘要由CSDN通过智能技术生成

C语言里自带了函数Beep(),

它的声明如下:

bool Beep(DWORD Freq,DWORD Duration);

该函数调用机箱喇叭(扬声器)发出指定音高长度的声音

Freq代表声音的频率,单位是赫兹

Duration代表声音的长度,单位是毫秒


如果我们想发出现在音乐的乐音,该如何做呢?


我们知道音高在音乐中的最小划分是半音,我们把一倍音程平均划分成12个半音,

因此每个音的频率数列是一个等比数列

公比r=2^(1/12)=1.05946309411451


现代标准音A4的频率通常为440Hz,实际音乐会的时候也会定音为442Hz或者443Hz

知道了这些参数,我们可以写出求任意音名音高的函数,

首先定义一个枚举类型 pitch,

	enum pitch {
		C, Cs, D, Ds, E, F, Fs, G, Gs, A, As, B, X
	};
<span style="white-space:pre">	</span>typedef pitch pitch_t;

这里面定义了12个半音的名称,其中s代表sharp,即升音#

其中X代表空音符,用于以后的扩展

求得音高的程序很简单,如下

首先定义两个常量,即之前提到的标准音高和公比

#define A4_PITCH 440
#define MUSIC_RATIO 1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值