Delphi - Mp3 Player в Delphi7

Ответить
Аватара пользователя
Max009

Delphi - Mp3 Player в Delphi7

Сообщение Max009 »

Пишу на Delphi7 (и 3Ds Max) проигрыватель MP3.

Использую как основу компонент Mediaplayer(полностью самому написать пока нереально - всего пол года прошло как начал прогать,

а ведь ещё учёба...)Изображение



Друзья, когда увидели мою прогу сказали, что предпочтут её Winamp'у!

В 3Ds Max6 сделал 3D катушечный мафон, который реагирует на

перемотку, конец песни(обрыв ленты) и т.д.

Всё работает в общем нормально.Изображение



Трамбла произошла когда начал создавать плей лист.Изображение

В общем я его создал, но если вы бы увидили "код" отвечающий за его

работу, то упали бы в обморок...Изображение

Создавал на основе компонента ListView панели Win32.

Песни в него загружаются, но если щелкнуть не по ней, а рядом с ней

всё зависает. И как сделать, чтобы по окончании песни сама включалась

следующая? По-жа-луй-ста покажите на примере.



А как сделать чтобы регулировалась громкость?Изображение



Может киданёте ссылочку или посоветуете книгу?Изображение



Спасибо!:beer:
Аватара пользователя
[mzd]

Re: Delphi - Mp3 Player в Delphi7

Сообщение [mzd] »

Попробуй это код для громкости



Код:

Код: Выделить всё

 var
 VolumeBar: TProgressBar;
     cmdMinVolume: TSpeedButton;
     cmdMaxVolume: TSpeedButton;
 procedure TMainForm.FormCreate(Sender: TObject);
 var
   i: integer;
   MixLine: TMixerLine;
   MixLineCtrl: TMixerLineControls;
   MixCtrl: TMixerControl;
 begin
   inherited;
   MixerOpen(@hmix, 0, Handle, 0, MIXER_OBJECTF_MIXER or CALLBACK_WINDOW);
   MixerGetDevCaps(0, @mixcaps, SizeOf(MixCaps));
   for I := 0 to MixCaps.cDestinations - 1 do
   begin
     Mixline.dwDestination := I;
     Mixline.cbStruct := SizeOf(Mixline);
     MixerGetLineInfo(hmix, @mixline, MIXER_GETLINEINFOF_DESTINATION);
     if Mixline.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS then
       break;
   end;
   if Mixline.dwComponentType  MIXERLINE_COMPONENTTYPE_DST_SPEAKERS then
   begin
     ShowMessage('Микшер не найден !');
     svEnable := False;
     Exit;
   end
   else
     svEnable := True;
   MixLineCtrl.cbStruct := SizeOf(MixLineCtrl);
   MixLineCtrl.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
   MixLineCtrl.dwLineID := MixLine.dwLineID;
   MixLineCtrl.cControls := 2;
   MixLineCtrl.cbmxctrl := Sizeof(MixCtrl);
   MixCtrl.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
   MixLineCtrl.pamxctrl := @MixCtrl;
   MixerGetLineControls(hmix, @mixlinectrl, MIXER_GETLINECONTROLSF_ONEBYTYPE);
   VolumeID := MixCtrl.dwControlID;
   VolMin := MixCtrl.Bounds.dwMinimum;
   VolMax := MixCtrl.Bounds.dwMaximum;
   Details.cbStruct := Sizeof(Details);
   Details.dwControlID := VolumeID;
   Details.cChannels := 1;
   Details.cMultipleItems := 0;
   Details.cbDetails := SizeOf(Valdets);
   Details.paDetails := @valdets;
   MixerGetControlDetails(hmix, @details, MIXER_GETCONTROLDETAILSF_VALUE);
   CurVolume := Valdets.dwValue;
   VolumeBar.Min := VolMin;
   VolumeBar.Max := VolMax;
   VolumeBar.Position := CurVolume;
 procedure TMainForm.VolumeBarMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: integer);
 begin
   if not svEnable then exit;
   X := Round(X / VolumeBar.Width * (VolumeBar.Max - VolumeBar.Min) + VolumeBar.Min);
   VolumeBar.Position := X;
   Details.cbStruct := Sizeof(Details);
   Details.dwControlID := VolumeID;
   Details.cChannels := 1;
   Details.cMultipleItems := 0;
   Details.cbDetails := Sizeof(Valdets);
   Details.paDetails := @Valdets;
   if X > 4000 then
     Valdets.dwValue := VolumeBar.Position
   else
     Valdets.dwValue := 0;
   MixerSetControlDetails(hmix, @details, MIXER_SETCONTROLDETAILSF_VALUE);
 end;
 procedure TMainForm.cmdMinVolumeClick(Sender: TObject);
 begin
   if not svEnable then Exit;
   VolumeBar.Position := VolumeBar.Position - (VolumeBar.Max - VolumeBar.Min) div 50;
   if VolumeBar.Position < VolumeBar.Min then
     VolumeBar.Position := VolumeBar.Min;
   Details.cbStruct := SizeOf(Details);
   Details.dwControlID := VolumeID;
   details.cChannels := 1;
   Details.cMultipleItems := 0;
   Details.cbDetails := SizeOf(Valdets);
   Details.paDetails := @Valdets;
   if VolumeBar.Position > 4000 then
     valdets.dwValue := VolumeBar.Position
   else
     valdets.dwValue := 0;
   MixerSetControlDetails(hmix, @details, MIXER_SETCONTROLDETAILSF_VALUE);
 end;
 procedure TMainForm.cmdMaxVolumeClick(Sender: TObject);
 begin
   if not svEnable then Exit;
   VolumeBar.Position := VolumeBar.Position + (VolumeBar.Max - VolumeBar.Min) div 50;
   if VolumeBar.Position > VolumeBar.Max then
     VolumeBar.Position := VolumeBar.Max;
   Details.cbStruct := SizeOf(Details);
   Details.dwControlID := VolumeID;
   Details.cChannels := 1;
   Details.cMultipleItems := 0;
   Details.cbDetails := SizeOf(Valdets);
   Details.paDetails := @Valdets;
   if VolumeBar.Position > 4000 then
     Valdets.dwValue := VolumeBar.Position
   else
     Valdets.dwValue := 0;
   MixerSetControlDetails(hmix, @details, MIXER_SETCONTROLDETAILSF_VALUE);
 end;
 end;
Ответить

Вернуться в «Программирование и базы данных»