Redarea sunetelor pe produse software Delphi

În acest articol voi încerca să ia în considerare trei proceduri pentru reproducerea sunetului. Folosirea acestor proceduri în locul componentei TMediaPlayer va economisi în mod semnificativ resursele sistemului. Cu ajutorul acestor proceduri, o gamă destul de largă de sarcini poate fi rezolvată. Deci, să începem să analizăm aceste proceduri cu cele mai simple.







Esența acestei proceduri este de a reproduce un semnal audio standard instalat în Windows, dacă există o placă de sunet și un sunet standard este setat, dacă nu, sunetul va veni prin difuzorul calculatorului sub forma unui scurt-click. Acesta poate fi folosit, de exemplu, atunci când utilizatorul introduce date greșite sau când formularul este închis:

procedura TForm1.FormClose (expeditor: TObject; var Action: TCloseAction);
începe
bip;
se încheie;

Cu prima procedură, l-am sortat. Acum să ne uităm la cea de-a doua.

Această funcție este mai gravă, este definită ca:

funcția MessageBeep (uType: word). boolean;

Parametrul uType specifică sunetul de redare ca identificator al secțiunii [sunete] din registru, în care sunt înregistrate sunetele care însoțesc aceste evenimente sau alte evenimente Windows. Parametrul uType poate lua următoarele valori:

  • MB_ICONASTERISK - redă sunetul "Asterisk" (SystemAsterisk)
  • MB_ICONEXCLAMATION - redă sunetul "Exclamation" (SystemExclamation)
  • MB_ICONHAND - redă sunetul "Eroare critică" (SystemHand)
  • MB_ICONQUESTION - redă sunetul "Întrebare" (SystemQuestion)
  • MB_OK - redă sunetul "Standard Sound" (SystemDefault)

Trebuie remarcat faptul că această funcție reproduce sunetul asincron, adică În timpul redării sunetului, aplicația dvs. continuă să funcționeze. După solicitarea unui sunet, funcția MessageBeep transmite controlul la funcția de apelare.







Dacă nu puteți reda sunetul specificat, funcția va încerca să redea sunetul implicit setat în mod implicit, dacă acest lucru nu este posibil, semnalul standard va fi redat prin difuzor.

Și în cele din urmă, este cea mai interesantă și utilă funcție de reproducere a sunetului, acum vom vorbi despre asta.

Această funcție poate reda sunete valurilor, nu doar sunetele evenimentelor Windows. Funcția Windows API, parametrii căruia sunt descriși în modulul mmsystem. Prin urmare, pentru a utiliza această funcție în programele dvs., trebuie să includeți modulul mmsystem în secțiunea utilizări. Funcția PlaySound este definită după cum urmează:

funcția PlaySound (pszSound: PChar; hmod: HINST; fdwSound: Cardinal): boolean;

Parametrul pszSound este un șir terminat null (ultimul caracter al șirului are un cod zero), determină sunetul de redare. Parametrul hmod este utilizat în cazul în care sunetul este preluat din resursă, deoarece nu vom face acest lucru, putem seta acest parametru la 0 sau la zero.

Ultimul parametru fdwSound este setul care determină modul în care va fi redat sunetul (modul redare). Voi da cele mai importante valori ale acestui set pentru reproducerea steagurilor de undă arbitrare.

  • SND_ASYNC - Sunetul este redat în mod asincron și funcția revine imediat după pornirea redării. Pentru a opri redarea, trebuie să apelați funcția PlaySound cu parametrul pszSound setat la 0.
  • SND_LOOP - redarea continuă a sunetului, în același timp trebuie să fie setat steagul SND_ASYNC.
  • SND_NOSTOP - Dacă sunetul specificat nu poate fi redat din cauza resurselor ocupate, funcția va reveni imediat false (iar sunetul nu va fi redat). Dacă acest steag nu este specificat, funcția va încerca să oprească redarea unui alt sunet pentru a elibera resurse.
  • SND_PURGE - Opreste redarea oricaror sunete cauzate de aceasta sarcina.
  • SND_SYNC - Redarea sincronă a sunetului evenimentului. Funcția PlaySound este returnată numai după terminarea redării.

Important: steagurile pot fi combinate cu operațiunea sau.

Sunetul specificat de parametrul pszSound ar trebui să fie adecvat pentru driverul instalat al dispozitivului de redare a fișierelor de undă și ar trebui, de asemenea, să fie plasat în memoria disponibilă.

Puteți întrerupe redarea audio prin rularea operatorului

PlaySound (0, 0, SND_PURGE);

sau prin specificarea unui sunet nou.

De exemplu, pentru a reda în mod repetat și asincron orice sunet selectat cu OpenDialog, puteți scrie acest cod:

Sper că totul este clar! Data viitoare va fi ceva mai complicat și mai interesant!







Articole similare

Trimiteți-le prietenilor: