Извлечение звуков из системного динамика под Windows95
Обьявление в газете: Куплю Windows б/в.
procedure Sound(Freq: Word);
var
B: Byte;
beginif Freq > 18 thenbegin
Freq := Word(1193181 div LongInt(Freq));
B := Byte(GetPort($61));
if (B and 3) = 0 thenbegin
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;
beginasm
mov dx, address
in al, dx
mov bValue, al
end;
GetPort := bValue;
end;
Под WinNT вы можете использовать Beep(Tone, Duration) (задавать тон и
продолжительность звучания).
Перевод контента на русский язык:
Это старый код, написанный на Паскале для Windows 95. Это простой программный продукт, который производит звук с помощью системного динамика (или "динамика PC" как он назывался в то время).
Каждая процедура выполняет следующее:
Sound(Freq: Word): Эта процедура генерирует тон на указанной частоте (Freq) и играет его через системный динамик. Частота ограничена значениями между 20 Гц и 18,000 Гц (которые соответствуют диапазону человеческого слуха). Если частота слишком высокая или низкая, она корректируется соответственно.
Процедура использует следующие шаги:
Она рассчитывает значение таймера, необходимое для производства указанной частоты с помощью формулы 1193181 / Freq.
Она получает текущее состояние порта динамика ($61) и проверяет, является ли он отключенным (бит 0 установлен). Если это так, она включает динамик, установив бит 0.
Она устанавливает значение таймера для порта динамика, чтобы произвести желаемую частоту.
NoSound: Эта процедура просто отключает системный динамик, записывая значение $FC (имеющее установленные биты 1 и 2) в порт динамика ($61). Это эффективно мутит звук.
Две другие процедуры, SetPort и GetPort, являются вспомогательными функциями, которые позволяют программе читать и записывать значения в конкретные порты системы. Они используются процедурой Sound для управления динамиком.
Обратите внимание, что этот код является специфичным для Windows 95 и может не работать на более новых версиях Windows или других операционных системах. Кроме того, стоит отметить, что динамик PC больше не является общим компонентом в современных компьютерах, и использование его может быть проблематично из-за его ограничений и потенциального для интерференции с другими устройствами.
Если вы ищете способ производить звук под Windows NT (или позднее), вы можете использовать функцию Beep, упомянутую в комментарии. Функция Beep позволяет генерировать сигнал на указанной частоте и продолжительности, что делает ее более удобной и гибкой альтернативой коду, предоставленному здесь.
Извлечение звуков из системного динамика под Windows95: статьи предлагает программный код на языке Паскάλ, позволяющий управлять звуком через порт $61 в операционной системе Windows 95.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.