有的驱蚊软件是利用声卡发出超声波来达到驱蚊效果的,请问如何编程实现?

解决方案 »

  1.   

    不是声卡,是利用PC喇叭发出一定频率的声音!21-23 KHz!
    在 Win9x 下:
    Procedure FnBeep(nFreq,nDura: Word);
    Label
        Skip;
    var
        nStart: DWord;
    begin
        Asm
                push    bx               // play
                in      al,     $61
                mov     bl,     al
                and     al,     3
                jne     Skip
                mov     al,     bl
                or      al,     3
                out     $61,    al
                mov     al,     $b6
                out     $43,    al
        Skip:   MOV     AX,     nFreq
                OUT     $42,    AL
                MOV     AL,     AH
                OUT     $42,    AL
                POP     BX
        end;
        nStart := GetTickCount;                  // Delay
        repeat
            Application.ProcessMessages;
        Until GetTickCount > nStart + nDura;
        asm
                IN      AL,     $61        // Shut up
                AND     AL,     $FC
                OUT     $61,    AL
        end;
    end;在 Win2000 下:
     Windows.Beep(nFreq, nDura);
      

  2.   

    ehom兄可真是高人,但我还有两个问题,一是能不能用声卡实现,二是这样的超声波对人体到底有多少危害,万一有害,那我宁愿被蚊子咬了.(我知道长期的超声波可以使老鼠肌肉萎缩,失去生育能力)
      

  3.   

    用声卡?制作一相应Mid文件,重复播放?直接控制,就要利用DirectSound了!我不太熟!对人有没有影像?这个我就不知道了!
      

  4.   

    我还有问题:1。发出的声音不管多少频率,我都听得见
    2。有两种方法一是直接在调用函数中写入数值,最大值只能写入几万;另一种是通过edit传送,最大值可以写好几亿(这是发出的声音还能听见,不是超声波),为什么会有这么大的差别?
      

  5.   

    我还有两个问题:1。发出的声音不管多少频率,我都听得见
    2。有两种方法一是直接在调用函数中写入数值,最大值只能写入几万;另一种是通过edit传送,最大值可以写好几亿(这是发出的声音还能听见,不是超声波),为什么会有这么大的差别?
      

  6.   

    我还有两个问题未能解决:1。发出的声音不管多少频率,我都听得见
    2。有两种方法一是直接在调用函数中写入数值,最大值只能写入几万;另一种是通过edit传送,最大值可以写好几亿(这是发出的声音还能听见,不是超声波),为什么会有这么大的差别?