Форум: "Media";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Внизкак изменить звук Найти похожие ветки
← →
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 вся ветка
Форум: "Media";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c