Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2011, 21:40   #21
KWN, lnc
Delphi 7
Форумчанин
 
Аватар для KWN, lnc
 
Регистрация: 10.02.2009
Сообщений: 354
По умолчанию

у меня чета не пашет! (( регулирует только окошко проекта.
Вложения
Тип файла: zip Volume.zip (3.0 Кб, 16 просмотров)
Дайте мне власть и я переверну ваш мир!...
KWN, lnc вне форума Ответить с цитированием
Старый 26.12.2011, 00:18   #22
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Сделай изменения
Код:
//Добавь процедуру для изменения громкости музыки Midi,
procedure MidiSetVolume(const volL, volR: Word);
 var
 hWO: HWAVEOUT;
   vol: DWORD;
 begin
  midiOutOpen(@hWO, MIDI_MAPPER, 0, 0, 0);
   vol := volL + volR shl 16;
   // set volume
  midiOutSetVolume(hWO, vol);
   mixerClose(hWO);
 end;

//Сделай изменения в таймере
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Следим за загрузкой игры
If ProcessExists('GOM.exe') then
begin
SetVolume(10000, 10000); //Громкость звуков когда игра загружена
MidiSetVolume(8000, 8000); //Громкость Midi когда игра загружена
end
else
begin
SetVolume(65000, 65000);//Громкость звуков когда игра закрыта
MidiSetVolume(65000, 65000);//Громкость Midi когда игра закрыта
end;
end;
Подбери нужную громкость меняя значения в SetVolume и MidiSetVolume
Можно было бы все в Aux громкость общую менять но вдруг понадобиться отделно регулировать звук и музыку.

Последний раз редактировалось Aliens_wolfs; 26.12.2011 в 01:26.
Aliens_wolfs вне форума Ответить с цитированием
Старый 26.12.2011, 01:16   #23
vladiny
 
Регистрация: 16.07.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Сделай изменения громкость на минимум поставь и проверь
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Следим за загрузкой игры, имя игры введи ниже и подбери нужную громкость меняя значения в параметре SetVolume
If ProcessExists('GOM.exe') then
SetVolume(0, 0) //Громкость на минимуме
else
SetVolume(65000, 65000); //Громкость когда игра закрыта
end;
Alien :P зайди в скайп.
vladiny вне форума Ответить с цитированием
Старый 27.12.2011, 20:37   #24
KWN, lnc
Delphi 7
Форумчанин
 
Аватар для KWN, lnc
 
Регистрация: 10.02.2009
Сообщений: 354
По умолчанию

даже здесь он не меняет ((( VKMusic4.exe
Изображения
Тип файла: jpg 27.12.2011 - 20.34.44.jpg (23.8 Кб, 129 просмотров)
Дайте мне власть и я переверну ваш мир!...
KWN, lnc вне форума Ответить с цитированием
Старый 28.12.2011, 20:37   #25
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

точно не знаю, но похоже waveOut похоже у каждого приложения "свой" и регулируется только свое...
значит нужно стать "своим" инжектиться в целевое приложение и уже в инжекте регулировать
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 28.12.2011, 23:19   #26
KWN, lnc
Delphi 7
Форумчанин
 
Аватар для KWN, lnc
 
Регистрация: 10.02.2009
Сообщений: 354
По умолчанию

вот это я и пытаюсь понять - как?!
Дайте мне власть и я переверну ваш мир!...
KWN, lnc вне форума Ответить с цитированием
Старый 29.12.2011, 07:43   #27
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Код который я написал выше должен работать у тебя там MIDI его регулировать по другому нужно
Aliens_wolfs вне форума Ответить с цитированием
Старый 29.12.2011, 10:07   #28
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Прежде всего замечу, что вопрос не имеет смысла для Windows XP и ниже - там не существует понятия per-application volume, там есть только master volume. Поэтому этот вопрос можно рассматривать только в Windows Vista и выше.

Мат-чать по контролю громкости в Windows Vista и Windows 7. Подробнее.

Соответственно, как я понимаю, тебе нужен "Simple Value" для конкретного приложения.

Для получения сессии приложения можно использовать IAudioSessionManager.

Аудио сессия идентифицируется двумя или тремя вещами: GUID сессии, ID процесса и флагом кросс-процессности (если флаг установлен, то ID процесса игнорируется).

"Simple volume" контролирует громкость всех аудио потоков в одной аудио сессии.

Большинство аудио-библиотек (включая Legacy-функции, DirectSound и т.п.) используют GUID_NULL в качестве идентификатора сессии. Но если приложение само указывает другой GUID, то у сессии будет иной GUID. В одном приложении может быть несколько сессий. Хотя самый типичный случай - одна сессия.

Регулятор громкости в системе, на самом деле, тебе врёт. Не существует такой вещи как "громкость приложения ABC". Регулятор громкости просто берёт все аудио сессии в системе и группирует их вместе, помечая их согласно ID процесса. Так что в общем случае у тебя может быть показано более одного ползунка для одной программы (если она использует две аудио-сессии), равно как и разделяемые сессии, не принадлежащие приложению (и тогда они будут не подписаны).

Теперь что касается ответа на вопрос... мне лень копать. Могу набросать примерный план-набросок.

Рекомендую глянуть в сторону IAudioSessionEnumerator - им можно перечислить сессии для устройства.

План действий (примеры кода см. по ссылкам):
- Создаём IMMDeviceEnumerator (CoCreateInstance).
- У него вызываем метод GetDefaultAudioEndpoint для получения устройства по умолчанию (динамики).
- У него вызываем метод Activate для получения менеджера сессий.
- У менеджера сессий вызываем GetSessionEnumerator для получения энумератора.
- Вызываем энумератор для перечисления сессий.
- Имя сессии можно узнать GetDisplayName, иконку - через GetIconPath, а её GUID - через GetGroupingParam.
- Получаем регулятор громкости сессии вызовом метода GetSimpleAudioVolume у менеджера сессий, передав ему GUID сессии с предыдущего пункта (не уверен, но можно попробовать запросить регулятор у сессии напрямую через QueryInterface).
- Контролируем громкость каждой сессии.

С тебя 500 рублей :P
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 29.12.2011, 12:07   #29
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Прежде всего замечу, что вопрос не имеет смысла для Windows XP и ниже
...замечу также, что еще в посту #9 об этом было сказано, но как то прошло мимо ушей TC.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 22.01.2012, 21:53   #30
KWN, lnc
Delphi 7
Форумчанин
 
Аватар для KWN, lnc
 
Регистрация: 10.02.2009
Сообщений: 354
По умолчанию

хм.. долговато чета я вожусь и не пойму ((
Дайте мне власть и я переверну ваш мир!...
KWN, lnc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как выключить компъютер команлдой в С++ angelada Помощь студентам 10 19.01.2011 19:47
Как в окне delphi открыть приложение word Juliya_1_04 Компоненты Delphi 5 04.10.2010 22:36
Как выключить один из двух мониторов? Silentdi Общие вопросы Delphi 3 17.09.2010 14:02
Как програмно выключить комп?? Дима я Общие вопросы Delphi 3 23.10.2009 00:14
как выключить/перезагрузить компьютер motaro Паскаль, Turbo Pascal, PascalABC.NET 1 28.03.2008 02:01