Відтворення звуків на delphi - програмні продукти

У цій статті я постараюся розглянути три процедури для відтворення звуку. Використання цих процедур замість компонента TMediaPlayer істотно заощадить ресурси системи. За допомогою цих процедур можна вирішувати досить широке коло завдань. Отже, почнемо розгляд цих процедур з найпростішої.

Суть цієї процедури - відтворювати стандартний звуковий сигнал, встановлений в Windows, якщо є звукова карта і налаштований стандартний звук, якщо ж ні, то звук надійде через динамік комп'ютера у вигляді короткого клацання. Її можна використовувати, наприклад, при введенні користувачем не тих даних, або при закритті форми:

procedure TForm1.FormClose (Sender: TObject; var Action: TCloseAction);
begin
Beep;
end;

З першою процедурою ми розібралися. Тепер подивимося другу.

Ця функція є більш серйозною, вона визначена як:

function MessageBeep (uType: word). boolean;

Параметр uType вказує відтворений звук, як ідентифікатор розділу [sounds] реєстру, в якому записані звуки, які супроводжують ті, чи інші події Windows. Параметр uType може набувати таких значень:

  • MB_ICONASTERISK - програє звук "Зірочка" (SystemAsterisk)
  • MB_ICONEXCLAMATION - програє звук "Вигук" (SystemExclamation)
  • MB_ICONHAND - програє звук "Критична помилка" (SystemHand)
  • MB_ICONQUESTION - програє звук "Питання" (SystemQuestion)
  • MB_OK - програє звук "Стандартний звук" (SystemDefault)

Треба відзначити, що ця функція відтворює звук асинхронно, тобто під час відтворення звуку Ваше додаток продовжує працювати. Після запиту звуку функція MessageBeep передає управління викликала її функції.

Якщо неможливо відтворити вказаний звук, то функція спробує відтворити стандартний системний звук, встановлений за замовчуванням, якщо і це неможливо, то буде відтворено стандартний сигнал через динамік.

Ну і нарешті, залишилася сама цікава й корисна функція відтворення звуку, про неї ми зараз і поговоримо.

Ця функція може відтворювати будь-які хвильові звуки, а не тільки звуки подій Windows. Функція API Windows, параметри якої описані в модулі mmsystem. Тому для використання цієї функції в Ваших програмах, необхідно включити в розділ uses модуль mmsystem. Функція PlaySound визначена так:

function PlaySound (pszSound: PChar; hmod: HINST; fdwSound: Cardinal): boolean;

Параметр pszSound є нуль терминированной рядком (останній символ рядка має нульовий код), він визначає відтворений звук. Параметр hmod використовується в разі, коли звук береться з ресурсу, оскільки ми цього робити не будемо, то можна цей параметр задавати рівним 0 або nil.

Останній параметр fdwSound є безліччю, яке визначає як буде відтворюватися звук (режим відтворення). Наведу найбільш важливі значення цього безлічі для відтворення довільних хвильових прапорів.

  • SND_ASYNC - Звук відтворюється асинхронно і функція повертається відразу ж після початку відтворення. Щоб припинити відтворення потрібно викликати функцію PlaySound з параметром pszSound, рівним 0.
  • SND_LOOP - відтворення звуку постійно повторюється, одночасно треба встановити прапор SND_ASYNC.
  • SND_NOSTOP - Якщо заданий звук не може бути відтворений через зайнятість ресурсів, то функція негайно поверне false (і звук не буде відтворено). Якщо ж даний прапор не вказаний, то функція спробує зупинити відтворення іншого звуку, щоб звільнити ресурси.
  • SND_PURGE - Зупиняє відтворення будь-яких звуків, викликаних в даній задачі.
  • SND_SYNC - Синхронне відтворення звуку події. Функція PlaySound повертається тільки після закінчення відтворення.

Важливо: прапори можна комбінувати операцією or.

Зазначений параметром pszSound звук, повинен підходити для встановленого драйвера пристрою відтворення хвильових файлів, а також повинен поміщатися в доступну пам'ять.

Перервати відтворення звуку можна виконавши оператор

PlaySound (0, 0, SND_PURGE);

або шляхом завдання нового звуку.

Наприклад, щоб багаторазово і асинхронно програти який-небудь звук, обраний за допомогою OpenDialog, можна написати такий код:

Ну ось, сподіваюся все ясно! Наступного разу буде що-небудь складніше і цікавіше!

Схожі статті