unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer, ShellApi, mmsystem, Math, ExtCtrls;
type
TForm4 =
class(TForm)
MediaPlayer1: TMediaPlayer;
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Button3: TButton;
Button4: TButton;
Button5: TButton;
OpenDialog1: TOpenDialog;
Timer1: TTimer;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
procedure MediaPlayer1Notify(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
Procedure AddToPlayList(s:
string);
procedure PlayFile(songNumber: integer);
Procedure WMDropFiles (
Var aMsg: tMessage);
message WM_DROPFILES;
//Drag und drop
end;
var
Form4: TForm4;
var PlayList: TStringList;
CurrentSong: integer = -1;
// neue globale variable um uns das aktuelle lied zu merken
Lautstaerke: integer = -1;
implementation
{$R *.dfm}
//Sound
procedure GetVolume(
var volL, volR: Word);
var
hWO: HWAVEOUT;
waveF: TWAVEFORMATEX;
vol: DWORD;
begin
volL:= 0;
volR:= 0;
// init TWAVEFORMATEX
FillChar(waveF, SizeOf(waveF), 0);
// open WaveMapper = std output of playsound
waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
// get volume
waveOutGetVolume(hWO, @vol);
volL:= vol
and $FFFF;
volR:= vol
shr 16;
waveOutClose(hWO);
end;
procedure SetVolume(
const volL, volR: Word);
var
hWO: HWAVEOUT;
waveF: TWAVEFORMATEX;
vol: DWORD;
begin
// init TWAVEFORMATEX
FillChar(waveF, SizeOf(waveF), 0);
// open WaveMapper = std output of playsound
waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
vol:= volL + volR
shl 16;
// set volume
waveOutSetVolume(hWO, vol);
waveOutClose(hWO);
end;
//Sound
Procedure TForm4.WMDropFiles (
Var aMsg: tMessage);
Var
Idx, Size, FileCount: Integer;
Filename: pChar;
Begin
Inherited;
FileCount := DragQueryFile (aMsg.WParam, $FFFFFFFF,
nil, 255);
For Idx := 0
To FileCount -1
Do Begin
Size := DragQueryFile (aMsg.WParam, Idx,
nil, 0) + 1;
Filename := StrAlloc (Size);
If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1
Then { nothing }
else AddToPlayList (pChar (Filename));
// hier wird das jeweilige file unserer Prozedur AddToPlaylist überwiesen.
StrDispose (Filename);
End;
DragFinish (aMsg.WParam);
End;
Procedure TForm4.AddToPlayList(s:
string);
begin
playList.Add(s);
ListBox1.Items.Add(extractfilename(s));
end;
procedure TForm4.Button1Click(Sender: TObject);
begin
PlayFile(ListBox1.ItemIndex);
end;
//sound auslesen
procedure TForm4.Button2Click(Sender: TObject);
var
X,TonLi, TonRe, VolLi, VolRe: Word;
begin
GetVolume(VolLi,VolRe);
TonLi:= Floor(VolLi / 65535 * 100);
TonRe:= Floor(VolRe / 65535 * 100);
Label1.Caption:=IntToStr(TonLi);
Label2.Caption:=IntToStr(TonRe);
end;
procedure TForm4.Button3Click(Sender: TObject);
begin
mediaplayer1.next;
end;
procedure TForm4.Button4Click(Sender: TObject);
begin
mediaplayer1.back;
end;
procedure TForm4.Button5Click(Sender: TObject);
var SAlterPfad,SNeuerPfad :
string;
begin
if OpenDialog1.Execute
then
begin
SAlterPfad := Opendialog1.files[0];
SNeuerPfad := ExtractFilePath(ParamStr(0))+('
Musik\'+ ExtractFileName(OpenDialog1.FileName));
if not FileExists(SNeuerPfad)
then
begin
CopyFile(PChar(SAlterPfad), PChar(SNeuerPfad), true);
ListBox1.Items.Add(ExtractFileName(OpenDialog1.FileName));
end
else
MessageDlgPos('
Datei ist bereits in der Liste',mtInformation,[mbOk],0,280,170);
end;
end;
//Sound auslesen
procedure TForm4.FormCreate(Sender: TObject);
begin
DragAcceptFiles (
Handle, True);
// drag und drop akzeptieren
playList := TStringList.Create;
end;
procedure TForm4.FormDestroy(Sender: TObject);
begin
playList.Free;
end;
procedure TForm4.PlayFile(songNumber: integer);
// deklaration von playfile ändern, hier das 2. mal
begin
if fileexists(Playlist.Strings[songNumber])
then begin
CurrentSong := songNumber;
mediaplayer1.Close;
mediaplayer1.FileName := Playlist.Strings[songNumber];
mediaplayer1.Open;
mediaplayer1.play;
end;
end;
procedure TForm4.Timer1Timer(Sender: TObject);
var
hilf, hilfbuchstabe:
string;
begin
hilf := Label3.Caption;
//einlesen der gesamten caption
hilfbuchstabe := hilf[1];
//merken des ersten zeichens der caption
delete(hilf, 1, 1);
//erstes zeichen löschen
hilf := hilf + hilfbuchstabe;
//caption + gemerktes zeichen
Label3.Caption := hilf;
//das ganze ausgeben
application.ProcessMessages;
//um sicher zu gehen, dass das ganze angezeigt wird
//timer intervall auf ca. 200ms stellen
end;
procedure TForm4.ListBox1DblClick(Sender: TObject);
var i : integer;
begin
for i := 0
to listbox1.Count - 1
do
if listbox1.Selected[i]
then break;
{ nun haben wir in i die nummer der selektierten Zeile
da Listbox und Playlist eine identische Reihe der Einträge und gleiche Sortierung
vorweisen, können wir mit dem erhaltenen index den richtigen Eintrag der Playlist
auslesen. }
PlayFile(i);
end;
procedure TForm4.MediaPlayer1Notify(Sender: TObject);
begin
if mediaplayer1.Position = mediaplayer1.Length
then begin
// position = gesamtlänge, bedeutet dass das lied beendet wurde
Listbox1.Selected[currentSong] := false;
// das gerade gespielte lied de-selektieren
inc(currentSong);
// aktuellen song um eines erhöhen
if currentSong < Playlist.Count
then { alles passt, songindex im rahmen}
else currentsong := 0;
{ende der liste erreicht, setze aktuelles lied auf anfang}
PlayFile(CurrentSong);
Listbox1.Selected[currentSong] := true;
// das aktuelle lied selektieren
end;
end;
end.