如何利用pc喇叭进行编曲。

解决方案 »

  1.   

    各种操作系统实现方式有些不同!Procedure Beep(nFreq,nDura: Word);
    Label
      Skip;
    var
      VerInfo: TOSVersionInfo;
      nStart: DWord;
    begin
      VerInfo.dwOSVersionInfoSize := SizeOf(VerInfo);
      GetVersionEx(VerInfo);
        if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
          Windows.Beep(nFreq, nDura)
        else
        begin
          Asm
                push    bx
                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;
          repeat
            Application.ProcessMessages;
          Until GetTickCount > nStart + nDura;
          asm
                IN      AL,     $61
                AND     AL,     $FC
                OUT     $61,    AL
          end;
        end;
    end;第一个参数为频率(单位赫兹),第二个参数为时间(单位毫秒)
      

  2.   

    试试这个!呵呵!Beep(165,1000);
    Beep(131,1000);
    Beep(149,1000);
    Beep(98,1000);
    Sleep(1000);
    Beep(98,1000);
    Beep(149,1000);
    Beep(165,1000);
    Beep(131,1000);