呵呵,我也想知道,在NT下不成问题,在9x下就有点儿伤脑筋了。我用想汇编但是不知道中断号是什么?有那位高手告诉一声?

解决方案 »

  1.   

    倒...
    Windows提供了标准API函数的阿BOOL Beep(
      DWORD dwFreq,      // 声音频率 nt下有效
      DWORD dwDuration   // 声音时间 nt下有效
    );
      

  2.   

    倒...
    Windows有标准API函数啊,需要写中断吗?
    BOOL Beep(
      DWORD dwFreq,      // 声音频率,NT下有效
      DWORD dwDuration   // 声音时间,NT下有效
    );
      

  3.   

    如不想对频率控制,beep也能响一声,不过想要有点儿优美的音乐,还是用api来得实在,呵呵
      

  4.   

    用嵌入汇编的方式,
    下面是我在C++Builder编的扬声器发声片段,
    与DELPHI 是姐妹语言, 我想可能差不多,
    供你参考.void Sound(int f)             // 发音, 频率f
    {
       __int16 B=1193180/f;
         asm   in   AL,61H;       // 从端口B取数
         asm   or   AL,3;         // 两低位置1
         asm   out  61H,AL;       // 返给端口B
         asm   mov  AL,0B6H;      // 通道2位图,2B,M3,B2
         asm   out  43H,AL;       // 送指令寄存器
         asm   mov  AX,B;         // 计数: 1193180/F
         asm   out  42H,AL;       // 送低有效位LSB
         asm   mov  AL,AH;
         asm   out  42H,AL;       // 送高有效位MSB
    }
    void SoundOff()               // 关闭声音
    {
         asm  in   AL,61H;        // 取端口B的字节
         asm  and  AL,0FCH;       // 强制置两位为0
         asm  out  61H,AL;        // 返送端口B
    }
      

  5.   

    以上是我编电子琴中的片断,
    现改成了驱动MIDI的方式发音,声音很动听;另外API的BOOL Beep(
      DWORD dwFreq,      // 声音频率,NT下有效
      DWORD dwDuration  // 声音时间,NT下有效
    在Widows98下只发一种频率,不行,只对NT有效,
    我试过。
      

  6.   

    哎,用中断也不行,Win9x不允许对硬件直接操作!
      

  7.   

    以上是我编电子琴中的片断,
    现改成了驱动MIDI的方式发音,声音很动听;另外API的BOOL Beep(
      DWORD dwFreq,      // 声音频率,NT下有效
      DWORD dwDuration  // 声音时间,NT下有效
    在Widows98下只发一种频率,不行,仅对NT才有效,
    我试过。
      

  8.   

    哈哈,多谢BCB,我已经调试通过了!不过那个常数该是多少?我还不清楚。我用beepex(22000,100)进行调用,听不到声音。
    Code:
    procedure BeepEx(feq:word=1200;delay:word=1);  procedure BeepOff;
       begin
         asm
           in al,$61;
           and al,$fc;
           out $61,al;
         end;  
      end;    
    const
      scale=1193180;
    var
      temp:word;
    begin
      temp:=scale div feq;
      asm
        in al,61h;
        or al,3;
        out 61h,al;
        mov al,$b6;
        out 43h,al;
        mov ax,temp;
        out 42h,al;
        mov al,ah;
        out 42h,al;
      end;
      sleep(delay);
      beepoff;
    end;
      

  9.   

    MessageBeep()
    playsound()
    好像都可以!
      

  10.   

    我对DELPHI不太清楚,注意16进制的书写,
    频率太高或太低会听不清,大常数是硬件上的
    规定的参数
      

  11.   

    lybt:
      太不象话, 2个得分者
    都是在我的程序上稍改成
    DELPHI而已.
        一分没给!!若我不贴,他们能改啥!
    不是在乎一钱不值的分数,  
    而是没尊重我的劳动和时间!!
      

  12.   

    哎,BCB,我开一个贴子给你分数好了。