代码很漂亮,应该是从html里复制过来的。
论坛准备改版,届时会加入markdown,以及highlight.js之类的功能。
主板上那个是蜂鸣器。
当然,我更好奇的是这个api内部windows是怎么实现的,产生一个波形,然后调用媒体播放?
论坛准备改版,届时会加入markdown,以及highlight.js之类的功能。
主板上那个是蜂鸣器。
当然,我更好奇的是这个api内部windows是怎么实现的,产生一个波形,然后调用媒体播放?
#include <stdio.h>
#include <conio.h>
#include <windows.h>
// 音符频率
int tone_map[36][2] = {
// 按住shift
'O', 131, ')', 139, 'P', 147, '_', 156, '{', 165, '}', 175,
// 常规音符
'`', 185, '\t', 196, '1', 208, 'q', 220, '2', 233, 'w', 247,
'e', 262, '4', 278, 'r', 295, '5', 313, 't', 332, 'y', 352,
'7', 373, 'u', 395, '8', 418, 'i', 443, '9', 469, 'o', 497,
'p', 524, '-', 555, '[', 588, '=', 623, ']', 660, '\\', 699,
// 按住shift
'!', 741, 'Q', 785, '@', 832, 'W', 881, '#', 993, 'E', 988,
};
// 相对时值
int time_map[16][2] = {
// 支持 1/16 1/8 1/4 1/2 1
'z', 1, 'x', 2, 'a', 3, 'c', 4,
's', 5, 'd', 6, 'f', 7, 'v', 8,
'g', 9, 'h', 10, 'j', 11, 'k', 12,
'l', 13, ';', 14, '\'', 15, 'b', 16,
};
int base_time = 90; // 基准时值
int cur_time = 720; // 当前时值
int main()
{
printf("base time (recommends 90): ");
scanf("%d", &base_time);
printf("tones: \n"
" ) _ ` 1 2 |"
" 4 5 7 8 9 |"
" - = ! @ # \n"
" O P { } tab q w |"
" e r t y u i o |"
" p [ ] \\ Q W E \n"
);
printf("durations: \n"
" a s d f g h j k l ; '\n"
" z x c v b\n"
);
printf("press shift-? to quit.\n");
cur_time = base_time * 8;
printf("\rduration = %d ", cur_time);
// 按键循环
while (int ch = getch())
{
if (ch == '?') return 0; // 退出
// 查表改变时值
for (int j = 0; j < 16; j++)
if (time_map[j][0] == ch)
{
cur_time = time_map[j][1] * base_time;
printf("\rduration = %d ", cur_time);
goto cont;
}
// 查表发声
for (int j = 0; j < 36; j++)
if (tone_map[j][0] == ch)
Beep(tone_map[j][1], cur_time);
cont:
}
return 0;
}</windows.h></conio.h></stdio.h>