Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с системным динамиком)


La_Grange ©   (2005-12-14 19:39:00) 

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


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

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


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


> 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 01:49:00) [3]

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


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

Под 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;


Anatoly Podgoretsky   (2005-12-18 21:27:00) [5]

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


La_Grange   (2005-12-18 21:21:00) [6]

Windows XP Corporate Edition SP2 RUS


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

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


La_Grange   (2005-12-16 16:26:00) [8]

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

  out 43H, al

Пишет:

  XCPT_PRIVILEGED_INSTRUCTION
  (C0000096) at 00401005, TID = 0E40

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


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

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-15 19:51:00) [10]

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


PVOzerski   (2005-12-15 15:17:00) [11]

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


TUser   (2005-12-15 12:18:00) [12]

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


umbra   (2005-12-15 11:46:00) [13]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо