Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 670

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!

Помогите создать программу которая будет регулировать общий звук в Windows 10, просмотрел кучу программ в интернете но не подходят именно для windows 10.
Например поставил в свойстве OnChange код и работала бы, я в программировании не сильно силён так что не судите строго, если можно чтоб код небольшой был

Бедрин Евгений Иванович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Бедрин Евгений Иванович (статус: Посетитель)
Вопрос отправлен: 19 июля 2017, 12:27
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 19 июля 2017, 13:38; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 19 июля 2017, 12:35 [#1]:

скачай какие-нить мультимедиа-копоненты с torry.net
Их там полно.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 19 июля 2017, 12:38 [#2]:

Навскидку:
http://torry.net/vcl/mmedia/audio/TAudioVolumev095Eng.zip
http://torry.net/vcl/sound/mixer/smvolumectrl.zip
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Бедрин Евгений Иванович

Бедрин Евгений Иванович (статус: Посетитель), 19 июля 2017, 13:33 [#3]:

Сторонние компоненты не хотелось бы использовать, лучше бы со стандартными например MMSystem ;-)
min@y™

min@y™ (статус: Доктор наук), 19 июля 2017, 13:38 [#4]:

Цитата (Бедрин Евгений Иванович):

Сторонние компоненты не хотелось бы использовать

Это блять почему же, а?

Я открыл исходник одного из них по ссылке. И чо я вижу?!

unit SSVolumeController;

interface

uses SysUtils, Classes,
MMSystem, // <------------ хули тебе ещё-то надо? :)) Бери и юзай.
Windows, Math;

type
TssVolumeController = class(TComponent)
private
m_mixerHandle : Cardinal;
m_MuteControl : MixerControl;
m_VolControl : MixerControl;

m_Mute : Boolean;
m_Volume: Integer;
m_Balance : Integer;

procedure InitMixerControls;
procedure UnInitMixerControls;
procedure SetVolume(Vol, Balance : Integer);
procedure GetVolume(var Vol, Balance : integer);
procedure SetMute(Value : Boolean);

procedure SetMuteProp(const Value: Boolean);
procedure SetVolumeProp(const Value: Integer);
procedure SetBalanceProp(const Value: Integer);
function GetBalanceProp: Integer;
function GetVolumeProp: Integer;

public
constructor Create(AOwner : TComponent); override;
destructor Destroy(); override;

published
property Mute : Boolean read m_Mute write SetMuteProp;
property Volume : Integer read GetVolumeProp write SetVolumeProp;
property Balance : Integer read GetBalanceProp write SetBalanceProp;

end;

procedure Register;

implementation


procedure Register;
begin
RegisterComponents('Sunisoft FreeVCL', [TssVolumeController]);
end;


procedure TssVolumeController.InitMixerControls;
var
LineControls : MIXERLINECONTROLS;
MixerLine : TMIXERLINE;
Controls : array [0 .. 30] of TMixerControl;
i : integer;
begin
ZeroMemory(@Controls[0], sizeof(TMixerControl) * 31);
mixerOpen(@m_MixerHandle, 0, 0, 0, MIXER_OBJECTF_MIXER);

ZeroMemory(@MixerLine, sizeof(TMIXERLINE));
MixerLine.cbStruct := sizeof(TMIXERLINE);
MixerLine.dwDestination := 1;
MixerLine.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
mixerGetLineInfo(m_MixerHandle, @MixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE);

ZeroMemory(@LineControls, sizeof(MIXERLINECONTROLS));
LineControls.cbStruct := sizeof(MIXERLINECONTROLS);
LineControls.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
LineControls.dwLineID := MixerLine.dwLineID;
LineControls.cControls := MixerLine.cControls;
LineControls.cbmxctrl := sizeof(MIXERCONTROL);
LineControls.pamxctrl := @Controls[0];
mixerGetLineControls(m_MixerHandle, @LineControls, MIXER_GETLINECONTROLSF_ALL);

for i := 31 downto 0 do
begin
if Controls[i].dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME then
m_VolControl := Controls[i];

if Controls[i].dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE then
m_MuteControl := Controls[i];
end;

m_VolControl.Metrics.dwReserved[1] := 1;
m_VolControl.Metrics.dwReserved[2] := 1;
end;

procedure TssVolumeController.SetVolume(Vol, Balance : Integer);
var
V : integer;
aDetails : array [0 .. 1] of MIXERCONTROLDETAILS_UNSIGNED;
ControlDetails : TMIXERCONTROLDETAILS;
begin
V := Vol * $FFFF div 100;

if Balance < 0 then
begin
aDetails[0].dwValue := V;
aDetails[1].dwValue := V * (100 + Balance) div 100;
end
else
begin
aDetails[0].dwValue := V * (100 - Balance) div 100;
aDetails[1].dwValue := V;
end;

ZeroMemory(@ControlDetails, sizeof(TMIXERCONTROLDETAILS));
ControlDetails.cbStruct := sizeof(TMIXERCONTROLDETAILS);
ControlDetails.dwControlID := m_VolControl.dwControlID;
ControlDetails.cChannels := 2; // 2 sound channels
ControlDetails.cMultipleItems := 0;
ControlDetails.cbDetails := sizeof(MIXERCONTROLDETAILS_UNSIGNED);
ControlDetails.paDetails := @aDetails[0];
mixerSetControlDetails(0, @ControlDetails, MIXER_SETCONTROLDETAILSF_VALUE);
end;

procedure TssVolumeController.GetVolume(var Vol, Balance:integer);
var
aDetails : array [0 .. 30] of Integer;
ControlDetails : TMIXERCONTROLDETAILS;
L, R : Integer;
begin
ZeroMemory(@ControlDetails, sizeof(TMIXERCONTROLDETAILS));
ControlDetails.cbStruct := sizeof(TMIXERCONTROLDETAILS);
ControlDetails.dwControlID := m_VolControl.dwControlID;
ControlDetails.cbDetails := sizeof(integer);
ControlDetails.hwndOwner := 0;
ControlDetails.cChannels := 2;
ControlDetails.paDetails := @aDetails;
MixerGetControlDetails(m_mixerHandle, @ControlDetails, MIXER_GETCONTROLDETAILSF_VALUE);
L := aDetails[0];
R := aDetails[1];
Vol:=Max(L, R) * 100 div $FFFF;

if Vol <> 0 then
if L>R then
Balance := -(L - R) * 100 div L
else
Balance := (R - L) * 100 div R
else
Balance := 0;
end;

procedure TssVolumeController.SetMute(Value : Boolean);
var
cdetails : TMixerControlDetails;
details : array [0 .. 30] of Integer;
begin
cdetails.cbStruct := sizeof(cdetails);
cdetails.dwControlID := m_MuteControl.dwControlID;
cdetails.cbDetails := sizeof(integer);
cdetails.hwndOwner := 0;
cdetails.cChannels := 1;
cdetails.paDetails := @details[0];
details[0] := Integer(Value);
MixerSetControlDetails(m_mixerhandle, @cdetails, MIXER_GETCONTROLDETAILSF_VALUE);
end;

constructor TssVolumeController.Create(AOwner: TComponent);
begin
inherited;

InitMixerControls();
Mute := false;
GetVolume(m_Volume, m_Balance);
end;

destructor TssVolumeController.Destroy;
begin
UnInitMixerControls();

inherited;
end;

procedure TssVolumeController.UnInitMixerControls;
begin
//
end;

procedure TssVolumeController.SetMuteProp(const Value: Boolean);
begin
m_Mute := Value;

SetMute(m_Mute);
end;

procedure TssVolumeController.SetVolumeProp(const Value: Integer);
begin
if (Value < 0) or (Value > 100) then
Exit;

m_Volume := Value;

SetVolume(m_Volume, m_Balance);
end;

procedure TssVolumeController.SetBalanceProp(const Value: Integer);
begin
if (Value < -100) or (Value > 100) then
Exit;

m_Balance := Value;

SetVolume(m_Volume, m_Balance);
end;

function TssVolumeController.GetBalanceProp: Integer;
begin
GetVolume(m_Volume, m_Balance);
Result := m_Balance;
end;

function TssVolumeController.GetVolumeProp: Integer;
begin
GetVolume(m_Volume, m_Balance);
Result := m_Volume;
end;

end.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 20 ноября 2018, 08:37
Выполнено за 0.05 сек.
Рейтинг@Mail.ru