Beep(int ,int )怎么用?两个参数的用途分别是什么?

Beep(int ,int )怎么用?两个参数的用途分别是什么?,第1张

BOOL

Beep(

DWORD

dwFreq,

//

Beep声音频率,单位Hz

DWORD

dwDuration

//

Beep声音持续时间,单位毫秒

)

程序示例:

#include

<windows.h>

int

main

(

void

)

{

int

i

=

2

while

(

i--

)

{

//Beep函数,使扬声器发出简单声音

//要调用这个函数需要加上头文件windows.h

//在Visual

C++

6.0下运行通过

Beep(1000,500)

}

return

0

}

Beep是同步播放的,即播放完毕后返回,我都使用线程达到异步播放。

只要你有乐谱。根据乐理,就可以走在调上。比如:

你可以写一个文件,存储你自己的声音格式:

struct tagSound

{

int frequency //频率

int soundDelay //发音时间(单位ms)

int nosoundDelay//发完音之后暂停的时间(单位ms)

}

1。音符与频率的关系

========低音部分

低1DO:262

#1DO#:277

低2RE:294

#2RE#:311

低3MI:330

低4FA:349

#4FA#:370

低5SO:392

#5SO#:415

低6LA:440

#6LA#:466

低7SI:494

========中音部分=低音X2

中1DO:523 956us FC44

#1DO#:554 902us

中2RE:578 865us FC9F

#2RE#:622 803us

中3MI:659 759us FD09

中4FA:698 716us FD34

#4FA#:740

中5SO:784 638us FD82

#5SO#:831

中6LA:880 568us FDC8

#6LA#:932

中7SI:988 506us FE06

========高音部分=中音X2

高1DO:1046

#1DO#:1109

高2RE:1175

#2RE#:1245

高3MI:1318

高4FA:1480

#4FA#:1480

高5SO:1568

#5SO#:1661

高6LA:1760

#6LA#:1865

高7SI:1976

“#”表示半音,用于上升或下降半个音

2。频率的产生

利用定时器来控制IO口的高低变化实现

周期=1/频率

半周期中断产生IO口电平

定时时间常数按照单片机的方式计算

3。音乐节拍的产生

每个音符用1个字节,字节的高4位代表音符的高低,低4位代表

音符的节拍,如果 1节拍是0.4秒,则1/4拍就是0.1秒。

其他节拍为1/4拍的整数倍。

4。节拍与节拍码对照表

节拍节拍数节拍数

1 1/4 1/8

2 2/4 2/8

3 3/4 3/8

411/2

55/4 5/8

66/4 6/8

821

A10/4 5/4

C312/8

F15/4

曲调1/4拍的延迟时间 1/8拍的延迟时间

4/4 125ms 62ms

3/4 187ms 94ms

2/4 250ms 125ms

不过,真的好不准。

这样就可以编辑文件了。

送你一个函数:

void MyDelay(long tt) /*暂停tt个百分之一秒*/

{

struct time now,last

gettime(&last)

gettime(&now)

while((((now.ti_sec-last.ti_sec)*100+now.ti_hund-last.ti_hund))<tt)

{

gettime(&now)

}

}

这个函数可以暂停 0.01*tt 秒。

循环使用下面的句子:

Beep(frequency,soundDelay)

MyDelay(nosoundDelay/10)

就可以模拟那个音乐了。

在C语言里可以循环使用:

sound(frequency)

MyDelay(soundDelay/10)

nosound()

MyDelay(nosoundDelay/10)

就可以了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7347986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存