Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

как изменить звук   Найти похожие ветки 

 
Fantom   (2004-08-06 03:52) [0]

Я пишу audio-player и сталкнулся стакой проблемои мне нужно зделать так чтоюы в программе можно было измянять громкость


 
Александр1   (2004-08-07 18:54) [1]

А звук ты знаешь как проигрывать?


 
Fantom   (2004-08-08 02:09) [2]

Александр1  
Да знаю


 
Константинов ©   (2004-08-08 02:38) [3]

из FAQ взятого на сайте АП

Да всё пpосто. Даже, я бы сказал, тyпо. :-)

INT GetMasterVolumeControlID()
{
 // get dwLineID
 MIXERLINE mxl;
 mxl.cbStruct = sizeof(MIXERLINE);
 mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
 if (::mixerGetLineInfo((HMIXEROBJ)ghmx, &mxl,
   MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE)
   != MMSYSERR_NOERROR)
   return 34;
 // get dwControlID
 MIXERCONTROL mxc;
 MIXERLINECONTROLS mxlc;
 mxlc.cbStruct = sizeof(MIXERLINECONTROLS);
 mxlc.dwLineID = mxl.dwLineID;
 mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
 mxlc.cControls = 1;
 mxlc.cbmxctrl = sizeof(MIXERCONTROL);
 mxlc.pamxctrl = &mxc;
 if (::mixerGetLineControls((HMIXEROBJ)ghmx, &mxlc,
   MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE)
   != MMSYSERR_NOERROR)
   return 34;
 return mxc.dwControlID;
}

BOOL SetMasterVolume(DWORD dwVolume)
{
  MIXERCONTROLDETAILS mxcd;
  MIXERCONTROLDETAILS_UNSIGNED mxcd_u;
  mxcd.cbStruct = sizeof(mxcd);
  mxcd.dwControlID = MasterVolumeControlID;
  mxcd.cChannels = 1;
  mxcd.cMultipleItems = 0;
  mxcd.cbDetails = 4;
  mxcd.paDetails = &mxcd_u;
  mmr = mixerGetControlDetails((HMIXEROBJ)ghmx, &mxcd, 0L);
  if (MMSYSERR_NOERROR != mmr) return FALSE;
  mxcd_u.dwValue = dwVolume;
  mmr = mixerSetControlDetails((HMIXEROBJ)ghmx, &mxcd, 0L);
  if (MMSYSERR_NOERROR != mmr) return FALSE;
  return TRUE;
}

Переписывать на Delphi, думаю, ни к чему. Надо лишь не забыть добавить uses MMSystem; Громкость отдельных каналов очень просто устанавливается через auxSetVolume и аналогичные.


 
Александр1   (2004-08-08 18:56) [4]

Ну тоже мне программист. Собрался писать свой audio-player и не знает как его наделить функцией второй по значимости после собственно проигрывания музыки. audio-player-ов написано выше крыши. Зачем писать свой, если ты всё равно не сможешь переплюнуть Microsoft и других.
Знаешь я когда-то тоже пытался написать свой audio-player, но потом понял, что этим плером в принципе никто пользоваться даже не будит, т.к. он будет хуже других.
Я считаю, что велосипед изобретать второй раз не следует. Нужно писать те программы которые ещё не написаны и которых нет на дисках.
К стати а как ты создать эквалайзеры? Я помню в своё время так их не смог описать.
Ну ладно ты не обижайся чё писать это дело каждого. Если тебя не затруднит как напишешь скинь на почту свой audio-player. Я в долгу не останусь, помогу чем смогу.

А громкость меняется так:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Edit1: TEdit;
   Edit2: TEdit;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}
uses MMSystem;

function GetWaveVolume: DWord;
var Woc : TWaveOutCaps;
   Volume : DWord;
begin
 result:=0;
 if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) =
      MMSYSERR_NOERROR then begin
   if Woc.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then begin
     WaveOutGetVolume(WAVE_MAPPER, @Volume);
     Result := Volume;
   end;
 end;
end;

procedure SetWaveVolume(const AVolume: DWord);
var Woc : TWaveOutCaps;
begin
 if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) =
      MMSYSERR_NOERROR then begin
   if Woc.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
     WaveOutSetVolume(WAVE_MAPPER, AVolume);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Beep;

end;

procedure TForm1.Button2Click(Sender: TObject);
var LeftVolume: Word;
   RightVolume: Word;
begin
 LeftVolume := StrToInt(Edit1.Text);
 RightVolume := StrToInt(Edit2.Text);
 SetWaveVolume(MakeLong(LeftVolume, RightVolume));

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Caption := IntToStr(GetWaveVolume);

end;

end.

Если хочешь могу прислать исходный код, только укажи мыло.


 
Александр1   (2004-08-10 06:03) [5]

Fantom - Ну ты хоть напеши работает громкость звука?


 
Mihey_temporary ©   (2004-08-10 13:12) [6]

2 Александр1:

Я тоже писал плеер, но не как отдельный, а в составе игры. Очень нужная вещь.


 
Fantom   (2004-08-12 02:42) [7]

Александр1  
спасибо за код он работает
но у меня снова проблема как можно узнать время и сколько уже прошло


 
antonn ©   (2004-08-12 05:24) [8]

Now-функция возвращает текущее время-дату.



Страницы: 1 вся ветка

Текущий архив: 2004.11.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.064 c
3-1098104433
denis24
2004-10-18 17:00
2004.11.14
определение названия тейбла в dbedite связаного с Datasours


1-1098872297
MikePol
2004-10-27 14:18
2004.11.14
TChart


14-1099004036
GuestTM
2004-10-29 02:53
2004.11.14
Существует ли компонент для работы с драйверами RegMon от SysInt?


1-1099327256
Ralf
2004-11-01 19:40
2004.11.14
Перетаскивание окон


1-1099385372
Sash
2004-11-02 11:49
2004.11.14
excel