在Win9x中,请问哪一个VC函数能让电脑小喇叭发不同的声音?(内空)

masonwy 2000-09-13 10:35:00
empty
...全文
159 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolcode 2000-09-14
  • 打赏
  • 举报
回复
错,Beep(...)在Win95下只发出同样的声音.
此时可能需要直接读写其端口,同DOS下相同.
Holly 2000-09-14
  • 打赏
  • 举报
回复
Beep()在WINDOWS95下确实只有固定的声音!改为MessageBeep()如何!
ad 2000-09-14
  • 打赏
  • 举报
回复
coolcode说得对,请看msdn的说明:
Remarks
Windows 95: The Beep function ignores the dwFreq and dwDuration parameters. On computers with a sound card, the function plays the default sound event. On computers without a sound card, the function plays the standard system beep.

请用我的beep函数:
void OutPort(short _port,char _byte)
{
_asm {
mov dx, _port
mov al, _byte
out dx, al
}
}

void InPort(short _port,char *_byte)
{
_asm {
mov dx, _port
in al, dx
mov byte ptr _byte, al
}
}

/* Sounds the speaker for a time specified in microseconds
* by duration at a pitch specified in hertz by frequency.
*/
void MyBeep( unsigned short frequency, unsigned short duration )
{
char control;
InPort( 0x61, &control);
/* If frequency is 0, Beep doesn't try to make a sound. */
if( frequency )
{
/* 75 is about the shortest reliable duration of a sound. */
//if( duration < 75 )
// duration = 75;
/* Prepare timer by sending 10111100 to port 43. */
//_outp( 0x43, 0xb6 );
/* Divide input frequency by timer ticks per
* second and write (byte by byte) to timer.
*/
frequency = (unsigned)(1193180L / frequency);
OutPort( 0x42, (char)frequency );
OutPort( 0x42, (char)(frequency >> 8) );
/* Save speaker control byte. */
/* Turn on the speaker (with bits 0 and 1). */
OutPort( 0x61, control | 0x3 );
}
if(duration>0){
Sleep( duration ); /*可以用MySleep代替 */
/* Turn speaker back on if necessary. */
if( frequency )
OutPort( 0x61, control );
}
else if(frequency==0)
OutPort( 0x61, control & 0xfc);
}

/* Pauses for a specified number of microseconds. */
/*void MySleep( clock_t _wait )
{
clock_t goal;
goal = _wait + clock();
while( goal > clock() )
;
}
*/
sxbyl 2000-09-14
  • 打赏
  • 举报
回复
Holly是对的,MSDN上写得很清楚,如下:
Windows NT: Requires version 3.1 or later.
Windows: Requires Windows 95 or later.
Windows CE: Unsupported.
Header: Declared in winbase.h.
Import Library: Use kernel32.lib.
Holly 2000-09-13
  • 打赏
  • 举报
回复
Beep(DWORD dwFreq, DWORD dwDuration);
可以指定声音频率和长度,以产生不同的声音!
Holly 2000-09-13
  • 打赏
  • 举报
回复
Beep(DWORD dwFreq, DWORD dwDuration)
可指定声音频率和时间长度以产生不同的声音!

16,470

社区成员

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

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

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