PC Beeper - играем на спикере (original) (raw)

February 28 2014, 14:40

Category:

Лет 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. не забудьте установить драйвера.

LJ Video