Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

Работа с системным динамиком)   Найти похожие ветки 

 
La_Grange   (2005-12-14 19:39) [0]

В virtual pascal имеется внешняя процедура beep(freq,duration)
Очень нужен исходный код этой процедуры для vp.
Вообще мне просто надо разбить эту процедуру на 2: включение системного динамика и выключение.
Есть идеи?
Заранее благодарен.


 
umbra ©   (2005-12-15 11:46) [1]

а разве он не включен постоянно во время работы компьютера?


 
TUser ©   (2005-12-15 12:18) [2]

Это апи-функция. Соотв. в Delphi ты ее можешь использовать точно так же. Разбить на 2 нельзя, но можно сделать так, что пищать будет долго.


 
PVOzerski ©   (2005-12-15 15:17) [3]

Ты ж даже платформу не указал. VP был под OS/2, под Win32 и под Linux. И исходники RTL в VP открыты. Beep реализован через SysBeep, а SysBeep - по-разному: в Win32 - через Win32-API-шный MessageBeep, в OS/2 - через PM_Alarm, в Linux - никак.


 
La_Grange   (2005-12-15 19:51) [4]

Эмм, извините, Win32.
Если на 2 разбить никак, то может можно ее как-нибудь научиться прерывать?


 
Se   (2005-12-15 20:56) [5]

procedure Sound(Frequency:word; Duration: Integer);
begin
 if Win32Platform=VER_PLATFORM_WIN32_NT then begin
   Windows.Beep(Frequency, Duration);
 end
 else begin
 asm
   mov   al,  0b6H
   out   43H, al
   mov ax,Frequency
   out 42h,al
   ror ax,8
   out 42h,al
   in    al,  61H
   or    al,  03H
   out   61H, al
 end;
 sleep(Duration);
 asm
   in    al,  61H
   and   al,  0fcH
   out   61H, al
 end;
 end;
end;

procedure Delay(Duration: Integer);
begin
 Windows.Sleep(Duration);
end;


 
La_Grange   (2005-12-16 16:26) [6]

он падает на строчке:

  out 43H, al

Пишет:

  XCPT_PRIVILEGED_INSTRUCTION
  (C0000096) at 00401005, TID = 0E40

Что с этим делать?


 
Se   (2005-12-17 09:35) [7]

А какой у тебя Windows?


 
La_Grange   (2005-12-18 21:21) [8]

Windows XP Corporate Edition SP2 RUS


 
Anatoly Podgoretsky ©   (2005-12-18 21:27) [9]

А какой код? Данный огрызок слишком маленькийю


 
DC-AC   (2005-12-19 09:14) [10]

Под NT-системы нужно использовать драйвер прямого доступа к портам. Например DLPortIO. Ниже небольшая процедура извлечения довольно мелодичного звука.

procedure Sound;
var bTemp: Byte; Count: Integer;
begin
bTemp := DLPortIO.Port[$61];
DLPortIO.Port[$43] := 182;
for Count:=1 to 10 do
     begin
      DLPortIO.Port[$42] := $30; // set frequency
      DLPortIO.Port[$42] := $4;  // set frequency
      DLPortIO.Port[$61] := bTemp or 3;
      Sleep(50);
      Application.ProcessMessages;
      DLPortIO.Port[$42] := $30; // set frequency
      DLPortIO.Port[$42] := $3;  // set frequency
      DLPortIO.Port[$61] := bTemp or 3;
      Sleep(50);
      Application.ProcessMessages;
     end;
DLPortIO.Port[$61] := bTemp;
end;


 
La_Grange   (2005-12-20 01:49) [11]

Всем спасибо
Вроде сам разобрался
Просто вызываю через thread Windows.beep, а в нужный момент - прерываю=))


 
Германн ©   (2005-12-20 02:02) [12]


> Se   (17.12.05 09:35) [7]
>
> А какой у тебя Windows?
> <Цитата>
> La_Grange   (18.12.05 21:21) [8]
>
> Windows XP Corporate Edition SP2 RUS
>


А программу ты делаешь под себя? И под свою ОС?


 
La_Grange   (2005-12-20 23:10) [13]

Делаю для себя=)
А идти вроде должна под любой XP, мне других пока не надо))



Страницы: 1 вся ветка

Текущий архив: 2006.03.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.096 c
1-1139300240
rOOse
2006-02-07 11:17
2006.03.12
Обновление Реестра Windows


2-1140431213
ForX
2006-02-20 13:26
2006.03.12
Редактирование запроса?


1-1139242281
Дмитрий_177
2006-02-06 19:11
2006.03.12
Событие, когда в буфере есть текст


11-1121123402
Dodfr
2005-07-12 03:10
2006.03.12
Big EXE size diff between KOL 2.09 and 2.10


2-1140681721
аноним
2006-02-23 11:02
2006.03.12
TidTCPServer