在Win9x/NT下如何用VC控制PC Speaker

pccrazy 2000-05-24 03:16:00
加精
在Win9x/NT下如何用VC控制PC Speaker,不是用 MessageBeep();
...全文
291 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dowinlee 2001-04-02
  • 打赏
  • 举报
回复
NT下,只需要用Beep()就可以了。
younet 2001-01-11
  • 打赏
  • 举报
回复
NT下就需要用NT Driver啦,编写一个驱动程序吧
pccrazy 2000-05-25
  • 打赏
  • 举报
回复
这种方式我早就试过了,不行的
springsea 2000-05-25
  • 打赏
  • 举报
回复
对了,nt下有点麻烦,NT不支持直接对端口操作!
springsea 2000-05-25
  • 打赏
  • 举报
回复
我试过了,好使呀,原码:#include <stdio.h>
#include <windows.h>
#include <math.h>
#include <conio.h>

typedef struct {
short int pitch;
short int duration;
} NOTE;

/*
* Table of notes. Given in half steps. It's a communication from
* the "other side."
*/
NOTE notes[] = {{14, 500}, {16, 500}, {12, 500}, {0, 500}, {7, 1000}};

/*********************************************************************
Set PC's speaker frequency in Hz. The speaker is controlled by an
Intel 8253/8254 timer at I/O port addresses 0x40-0x43.
*********************************************************************/
void setfreq(int hz)
{
hz = 1193180 / hz; // clocked at 1.19MHz
_outp(0x43, 0xb6); // timer 2, square wave
_outp(0x42, hz);
_outp(0x42, hz >> 8);
}

/*********************************************************************
Pass a note, in half steps relative to 400 Hz. The 12 step scale
is an exponential thing. The speaker control is at port 0x61.
Setting the lowest two bits enables timer 2 of the 8253/8254 timer
and turns on the speaker.
*********************************************************************/
void playnote(NOTE note)
{
_outp(0x61, _inp(0x61) and 0x03); // start speaker going
setfreq((int)(400 * pow(2, note.pitch / 12.0)));
Sleep(note.duration);
_outp(0x61, _inp(0x61) & ~0x03); // stop that racket!
}

int main()
{

for(i=0; i < sizeof(notes)/sizeof(int); ++i)
playnote(notes[i]);

return 0;
}

xubin_sh 2000-05-24
  • 打赏
  • 举报
回复
The Beep function generates simple tones on the speaker. The function is synchronous; it does not return control to its caller until the sound finishes.

BOOL Beep(
DWORD dwFreq, // sound frequency, in hertz
DWORD dwDuration // sound duration, in milliseconds
);

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧