Главная страница | назад





Article #17007: Creating different frequency sounds from win95 / winnt

 Question and Answer Database

FAQ2007C.txt   Creating different frequency sounds from win95 / winnt
Category   :Windows API
Platform    :All
Product    :C++Builder  1.x

Question:
I want to be able to make the system beeper make pitched sounds
from my windows application, this needs to work in both windows
NT and 95. How can this be accomplished?

Answer:
In WindowsNT is is easy, use the Beep() Windows API call, however
in Windows 95 this api function is only a little less than useful, 
you will need to directly access the hardware. this is demonstrated
in the following code:

The first parameter is the frequency (in Hertz) of the pitch, the
second is the duration in milliseconds of the sound.

The first part of this function sets the pit and turns the speaker
on, the second part (after the Windows API Sleep() call) turns the
speaker off.

This code WILL NOT work in Winnt, so you must use the Beep() API 
call for that.

//---------------------------------------------------------------------------
void BeepSound(unsigned short pitch, int duration)
\{
  asm     mov     bx,  pitch
  asm     mov     ax,  34DDh
  asm     mov     dx,  0012h
  asm     cmp     dx,  bx
  asm     jnb     stop
  asm     div     bx
  asm     mov     bx,  ax
  asm     in      al,  61h
  asm     test    al,  3
  asm     jne     j1
  asm     or      al,  3
  asm     out     61h, al
  asm     mov     al,  0B6h
  asm     out     43h, al
  j1:
  asm     mov     al,  bl
  asm     out     42h, al
  asm     mov     al,  bh
  asm     out     42h, al
  stop: ;

  Sleep(duration);

  asm     in      al,61H
  asm     and     al, 0fcH
  asm     out     61H, al
\}
//---------------------------------------------------------------------------


7/2/98 10:32:32 AM
 

Last Modified: 30-MAR-00