Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

BEEP для Delphi, который работает как в Pascal

Delphi , Мультимедиа , Speaker

BEEP для Delphi, который работает как в Pascal

Билл Гейтс был ограблен по дороге в Банк, где он собирался уплатить налоги за 3 года наличными. Преступникам удалось угнать лишь две машины из всей колонны грузовиков.

Я применяю следующий код, однако он работает только под Win9x/me (Под WinNT/2000/XP вы можете использовать Beep(Tone, Duration) - задавать тон и продолжительность звучания).


procedure Sound(Freq: Word);
var

  B: Byte;
begin

  if Freq > 18 then
  begin
    Freq := Word(1193181 div LongInt(Freq));
    B := Byte(GetPort($61));

    if (B and 3) = 0 then
    begin
      SetPort($61, Word(B or 3));
      SetPort($43, $B6);
    end;

    SetPort($42, Freq);
    SetPort($42, Freq shr 8);
  end;
end;

procedure NoSound;
var

  Value: Word;
begin

  Value := GetPort($61) and $FC;
  SetPort($61, Value);
end;

procedure SetPort(address, Value: Word);
var

  bValue: byte;
begin

  bValue := trunc(Value and 255);
  asm
mov dx, address
mov al, bValue
out dx, al
  end;
end;

function GetPort(address: word): word;
var

  bValue: byte;
begin

  asm
mov dx, address
in al, dx
mov bValue, al
  end;
  GetPort := bValue;
end;

Классический функционал звукового сигнала в Delphi!

Код, который я предоставил, работает, манипулируя динамиком PC для производства звука на конкретной частоте. Процедура Sound принимает целочисленный параметр Freq, представляющий частоту звука в Гц.

Вот разбивка того, что код делает:

  1. Он проверяет, является ли вводная частота валидной (т.е., больше 18 Гц). Если это не так, он корректирует частоту для того, чтобы она была в диапазоне, который может обрабатывать динамик PC.
  2. Он настраивает динамик PC, написав значения в порты $61 и $43. Порт $61 контролирует включение/выключение динамика и уровень громкости. Установка бита 0 в 1 включает динамик, а установка бита 1 в 1 устанавливает уровень громкости на максимальный.
  3. Он пишет значение частоты в порт $42 два раза, который контролирует генерацию тона динамика.

Процедура NoSound просто отключает динамик, написав значение $FC (11111100) в порт $61. Это устанавливает биты 0 и 1 в 0, отключая динамик.

Процедуры SetPort и GetPort используются для чтения и записи значений в порты ввода/вывода. Эти процедуры необходимы потому, что встроенная поддержка Delphi для операций ввода-вывода ограничена.

Как вы упомянули, этот код работает под Win9x/Me, но не под WinNT/2000/XP. Причина этого заключается в том, что новые операционные системы используют другую архитектуру звука, основанную на Windows API (например, Beep(Tone, Duration)).

Если вам нужно сделать ваш функционал звукового сигнала совместимым с современными версиями Windows, я рекомендую использовать функцию Beep из Windows API или эквивалентную библиотеку. Это обеспечит более надежное и надежное производство звука.

Вот простой пример, как вы можете модифицировать свой код для использования функции Beep:

procedure Sound(Freq: Word);
begin
  Beep(Freq, 100); // корректируйте продолжительность, если необходимо
end;

Обратите внимание, что это более простой и надежный подход, чем оригинальный код. Вы также можете рассмотреть использование третьей-сторонней библиотеки или компонента, которая обеспечивает функциональность звукового сигнала для современных версий Windows.

В статье описывается библиотека BEEP для Delphi, позволяющая создавать звуки и музыку в приложении, а также примеры использования процедур Sound, NoSound, SetPort и GetPort.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Speaker ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 12:41:37/0.0032250881195068/0