PC Beeper - играем на спикере (original) (raw)
February 28 2014, 14:40
Category:
- Компьютеры
- Cancel
Лет n-дцать назад компьютеры пищали только встроенным динамиком. Этот динамик и сейчас есть. Только добраться до него трудно. Но возможность попищать есть и теперь.
Причем ключевые строки довольно простые:
ioDLLInstance := LoadLibrary('inpoutx64.dll');
if ioDLLInstance >= 32 then { if <=32 - error ! } begin @InputPort := GetProcAddress(ioDLLInstance, 'Inp32'); @OutputPort := GetProcAddress(ioDLLInstance, 'Out32'); end
Сначала нужно сказать, что доступ до динамика идет через порты. Что бы добраться до портов нам нужно инсталлировать InpOut32 ( В папке Drivers\Win32\находим файл InstallDriver.exe и запускаем его от имени администратора). Программа импортирует две функции (реально их чуть больше): 'Inp32' и 'Out32'. Для x64 используется inpoutx64.dll, для 32-битных систем inpout32.dll . Работает как на Win XP, так и на Win 7 x64.
А теперь сама функция писка:
procedure Beep(const Tone, Time: Integer); var v, div1: Integer; begin div1 := 1193180 div Tone;
OutputPort($43, 182);
OutputPort($42, div1 and $FF); OutputPort($42, (div1 shr 8) and $FF);
v := InputPort($61); OutputPort($61, v or $03);
Sleep(Time);
v := InputPort($61); OutputPort($61, v and $FC); end;
По адресу https://www.dropbox.com/s/xwd6obhmmvlger0/PcBeep.7z?dl=0 можно скачать рабочий пример и исходные коды. Хотелось бы увидеть (например) реализацию скайп-звонка через pc beeper (кто-то в интернете такое уже делал). (Ссылку обновил в феврале 2021.)
PS. не забудьте установить драйвера.