Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Звук через PC Speaker

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

Звук через PC Speaker

Автор: Nomadic


procedure TForm1.mybeep(Tone: Word; Delay: Integer);
begin
  asm
    mov   al,  0b6H
    out   43H, al
    mov ax,Tone
    out 42h,al
    ror ax,8
    out 42h,al
    in    al,  61H
    or    al,  03H
    out   61H, al
  end;
  sleep(Delay);
  asm
    in    al,  61H
    and   al,  0fcH
    out   61H, al
  end;
end;

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

Процедура mybeep, генерирующая звук сигнала через динамик компьютера на системе Windows, принимает два параметра: Tone, определяющий частоту сигнала в Гц, и Delay, определяющий продолжительность сигнала в миллисекундах.

Разбивка кода:

  1. Первый блок asm настраивает динамик для производства звука:
    • mov al, 0b6H: Перемещает значение 0b6 (хекс-код команды динамика) в регистр AL.
    • out 43H, al: Отправляет содержимое регистра AL на порт 43H, который является портом управления динамиком.
    • mov ax, Tone: Перемещает значение параметра Tone в регистр AX.
    • out 42h, al: Отправляет содержимое регистра AX на порт 42h, который является портом контроля частоты.
    • ror ax, 8: Вращает содержимое регистра AX направо на 8 бит (эквивалентно делению на 256). Это, вероятно, сделано для коррекции значения частоты.
    • out 42h, al: Отправляет корректированное значение частоты обратно на порт 42h.
  2. Следующая инструкция - in al, 61H, которая читает текущее состояние динамика из порта 61H. Это, вероятно, используется для проверки, производит ли динамик звук.
  3. Инструкция or al, 03H добавляет значение 0x3 (которое соответствует состоянию "включен") к содержимому регистра AL. Это включает динамик в работу.
  4. Инструкция out 61H, al отправляет обновленное состояние обратно на порт 61H.
  5. После производства звука сигнала за указанную продолжительность (Delay), процедура использует другой блок asm для отключения динамика:
    • in al, 61H: Читает текущее состояние динамика из порта 61H.
    • and al, 0fcH: Очищает бит "включен" с помощью операции AND с значением 0xfch. Это включает динамик в отключенный режим.
    • out 61H, al: Отправляет обновленное состояние обратно на порт 61H.
  6. Процедура заканчивается вызовом функции sleep, которая приостанавливает выполнение за указанную продолжительность (Delay) в миллисекундах.

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

Статья описывает процедуру "mybeep" на языке Паскаль, которая позволяет генерировать звук через PC Speaker, используя низкоуровневые инструкции ассемблера.


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



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


реклама



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

Время компиляции файла: 2024-05-10 07:13:18
2024-05-19 16:14:06/0.010388135910034/2