Zalążki artykułów

Dzwięki w Delphi

Funkcja PlaySound


Odtwarzanie dźwięków w Delphi nie musi następować bezpośrednio z komponentu MediaPlayer. Do odgrywania plików .wav wystarczy funkcja PlaySound();

Dodaj najpierw do sekcji uses słowo MMSystem

Struktura funkcji


PlaySound(pszSound, PCHar; hmod: HMODULE; fdwSound: DWORD);


Oto wyjaśnienie jej parametrów:  

  • pszSound - Oznacza nazwę pliku lub pozycji rejestru.
  • hmod - jeżeli plik nie jest ładowany z zasobu ta wartość powinna mieć wartość 0.
  • fdwSound - określa tzw. flagi. W tym miejscu możesz wstawić:
    • SND_ALIAS - pozycja jest odgrywana z rejestru.
    • SND_FILMENAME - plik odgrywany jest z dysku.
    • SND_RESOURCE - plik odgrywany jest z zasobu.
    • SND_PURGE - Polecenie to kończy odtwarzanie plików muzycznych.
    • SND_ASYNC - odtwarzanie odbywa się równocześnie z działaniem aplikcaji.
    • SND_LOOP - odtwarzanie następuje w sposób ciągły.

Odtwarzanie instniejącego pliku


Jeżeli chcesz odtworzyć teraz jakiś plik dźwiękowy z dysku to robisz tak:

PlaySound('C:\plik.wav', 0, SND_FILENAME);


I to wszystko! Jedna linia odtworzy plik C:\plik.wav.

Zatrzymywanie odtwarzania


Żeby wyciszyć wszytkie dźwięki tj. wyłączyć je musisz zrobić coś takiego:

PlaySound(nil, 0, SND_PURGE); 


Dźwięki systemowe


PlaySound('SystemStart', 0, SND_ALIAS);


Wszystkie dźwięki wraz z ich angielskimi odpowiednikami można znaleźć w rejestrze pod kluczem:

HKEY_CURRENT_USER\AppEvents\EventLabels

Może się jednak zdarzyć, że dźwięk nie uruchamiania systemu nie jest przypisany. Wtedy odtworzony zostanie standardowy dźwięk: ding.wav.
Aby temu zapobiedz musisz zastosować znacznik SND_NODEFAULT.  Będzie to wyglądało tak:

PlaySound('SystemStart', 0, SND_ALIAS or SND_NODEFAULT);


Program MMPlayer


Na podstawie tego wszystkiego można napisać mały programik wczytujący z dysku plik .wav i odtwarzający go.
Daj na formę dwa BitButtony z ikonami stop i play. Ustaw ich właściwości Align na alRight.

Wstaw:
  • BitButton z Ikonką Play i Align na alRight
  • BitButton z Ikonką Stop i Align na alRight
  • OpenDialog z Filtrem do *.wav

Ustaw:
  • Szerokość formy na 235
  • Wysokość formy na 47
  • BorderStyle na bsToolWindow

Kod programu (z góry przepraszam za Form2 zamiast Form1)
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MMSystem, StdCtrls, Buttons;
 
type
  TForm2 = class(TForm)
    Label1: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    OpenDialog: TOpenDialog;
    procedure FormShow(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
  NazwaPliku : String;
 
implementation
 
{$R *.dfm}
 
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
if NazwaPliku <> '' then
begin
  PlaySound(PWideChar(NazwaPliku), 0, SND_FILENAME or SND_ASYNC)
end
else
begin
  if OpenDialog.Execute then
  begin
    NazwaPliku := OpenDialog.FileName;
    OpenDialog.FileName := '';
    Label1.Caption := ExtractFileName(NazwaPliku);
    PlaySound(PWideChar(NazwaPliku), 0, SND_FILENAME or SND_ASYNC);
  end;
end;
end;
 
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
PlaySound(nil, 0, SND_PURGE);
 
end;
 
procedure TForm2.FormShow(Sender: TObject);
begin
Form2.Width := 235;
Form2.Height := 47;
Form2.BorderStyle := bsToolWindow;
 
if ParamStr(1) = '' then
NazwaPliku := ''
else
begin
NazwaPliku := ParamSTR(1);
PlaySound(PWideChar(NazwaPliku), 0, SND_FILENAME or SND_ASYNC);
end;
 
 
end;
end.


392ddb294182.jpg

To by było na tyle jeśli chodzi o funkcję PlaySound.

Komponent MediaPlayer

  

Komponent MediaPlayer jest rozbudowanym komponentem do odtwarzania filmów, plików *.mid ,*.wav, *.avi. Na samym początku należy przypisać wartość FileName do pliku, który masz zamiar odtwarzać. Następnie należy go otworzyć no i odegrać:

with MediaPlayer do
begin
   FileName := 'muzyka.mid';
   Open; // Otwarcie...
   Play;  // Odtwarzanie...
end; 


Przy pomocy tego komponentu można także nagrywać dźwięki. Oto przykład:

with MediaPlayer do
begin
  FileName := 'test.wav'; // nadanie nazwy
  Open;
  StartRecording; // rozpoczęcie nagrywania
end; 


Aby to teraz zatrzymać:

with MediaPlayer do
begin
  Stop; // zatrzymanie nagrywania
  FileName := 'plik.wav'; // nadanie nowej nazwy pliku
  Save; // zapisanie...
  Close; // zamknięcie
end; 



Artykuł  został umieszczony na liście Zalążków artykułów. Jeżeli możesz rozbuduj go!

8 komentarzy

wypoker 2013-03-29 23:21

Tu tylko odtwarzanie - a ja polecę mój artykuł na temat nagrywania dźwięku w Delphi:
http://lukashp.pl/Artykul/Prog[...]lphi/delphi-nagrywanie_dzwieku

segres 2010-03-08 21:29

no ale to działa jak się chce odtworzyć jeden plik... a jeśli chce odtworzyć dwa pliki na raz to jak miałbym to zrobić? A tak konkretnie jak otworzyć port, odegrać dźwięk no i potem ten port zamknąć?

stingear 2007-04-02 12:09

{---------------------------------------------}
  i:=1;
  repeat
    if sciezka[i]<>'\' then label1.caption:=label1.Caption+sciezka[i];
    if sciezka[i]='\' then label1.caption:=;
    i:=i+1;
  until (sciezka[i]=
)and(sciezka[i]<>' ');
{-------------------------------------------------------}
jest to procedura wyciągająca ze ścieżki sama nazwę odtważanego obiektu czyli krutko mówiac tytuł, bo po co komu cała ścieżka z nazwą widoczna

pm_coder 2005-12-19 20:06

Pozwoliłem sobie poprawić jedną literówkę w kodzie ;)

dzikimisiu 2005-07-19 21:13

a jak zrobić żeby otwarzzało w pętli??

Spine 2003-05-07 20:03

Wstawiasz komponent MediaPlayer (System),
dajesz Visible na False, potem 2 procedury:
MediaPlayer.FileName:='data\muza\cmentarz.mid';
MediaPlayer.Open;
MediaPlayer.Play;

Paszczak000 2003-04-29 10:38

Paszczak
Jak odgrywać dźwięki midi w programie??

Spine 2003-04-16 22:56

Npiasz mi Adaś, czy to ty piszesz sobie te oceny, czy gdzieś da się dać swoją??