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

Извлечение звуков из системного динамика под Windows95

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

Извлечение звуков из системного динамика под Windows95

Обьявление в газете: Куплю Windows б/в.


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;

Под WinNT вы можете использовать Beep(Tone, Duration) (задавать тон и продолжительность звучания).

Перевод контента на русский язык:

Это старый код, написанный на Паскале для Windows 95. Это простой программный продукт, который производит звук с помощью системного динамика (или "динамика PC" как он назывался в то время).

Каждая процедура выполняет следующее:

  1. 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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-13 08:20:13/0.0019009113311768/0