Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемы с установкой громкости [D5, WinXP]


Deus ©   (2002-09-16 23:32:00) 

Всем привет.

Для регулировки громкости использую компоненту TAudioMixer.
Код могу привести, но он довольно громоздок.
Проблема такова:
Если баланс установлен не по центру, то при регулировке громкости баланс начинает изменяться, пока не станет по центру.
Это происходит из-за того, что при разной величине громкости, но одинаковом балансе разница между значениями громкости каналов разная. Т.е. когда громкость L=10585, R=19923, разница=-9338. А когда L=32768, R=65535, разница=-32767.
При этом значение баланса одинаковое!
Как это побороть? Можно конечно вывести формулу зависимости, но как то это криво....


Deus   (2002-09-18 15:30:00) [1]

Ура! Решил проблему.
Если кому интересно:
ПЕРЕД изменением громкости получаю значение громкости каждого канала. Если один больше другого => баланс не по центру. Высчитываю процентное соотношение между каналами; Изменяю громкость канала, у которого значение было больше; В соответствии с процентым соотношением высчитываю громкость другого канала. Всё.


Deus   (2002-09-18 13:35:00) [2]

Это понятно. Проблема в том, что нужно иметь возможность регулировать все возможные каналы, а не только wave/cd/midi.
Это делается через mixerSetControlDetails. Всё регулируется ОК, проблема только с балансом.
Кстати, стандартный виндовый регулятор громкости юзает именно mixerSetControlDetails. И у него тажа проблема: если при неровном балансе и установке громкости в 0 регулятор закрыть, а потом открыть, то баланс станет ровным!
Но при простой регулировке громкости он правильно корректирует громкость каналов. Вопрос - как?


AlexT1000   (2002-09-18 12:20:00) [3]

может тебе использовать.
waveOutSetVolume(0,$FFFF);
функция Windows API.

$FF - правый канал от 0 до 255
FF - левый канал от 0 до 255

OldVolume : dword;
waveOutGetVolume(0,@OldVolume);
получить громкость


Наверх

Титульная страница Поиск, карта сайта Написать письмо