Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Проигрывание звуковых файлов


Автор: Поручик 9.8.2005, 17:52
Здравствуйте, кто знает как изменять громкость у проигрываемого музыкального файла компонентом MediaPlayer???
Подскажите, если не трудно.

Автор: Dubinsky 11.8.2005, 19:31
по моему менять громкость надо функциями mmsystem а mediaplayer'ом неполучится , но я могу ошибатся.

Автор: p0s0l 11.8.2005, 23:31
Вроде так:
Код

MCI_DGV_SETAUDIO_PARMS p;
p.dwCallback = 0;
p.dwItem = MCI_DGV_SETAUDIO_VOLUME;
p.dwValue = 0..1000; // это громкость
p.dwOver = 0;
p.lpstrAlgorithm = NULL;
p.lpstrQuality = NULL;
mciSendCommand( MediaPlayer->DeviceID, MCI_SETAUDIO,
MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, &p );    

Автор: Dubinsky 12.8.2005, 12:05
хм интересно а баланс как менять ?

Автор: p0s0l 12.8.2005, 16:21
Цитата(Dubinsky @ 12.8.2005, 12:05)
хм интересно а баланс как менять ?
Как такового баланса вроде менять нельзя (хотя... smile ). Можно только устанавливать громкость отдельных каналов (а это не баланс smile )
Цитата(MSDN)
MCI_DGV_SETAUDIO_LEFT
...When this flag is used with the combination of MCI_DGV_SETAUDIO_VALUE and MCI_DGV_SETAUDIO_VOLUME, it sets the volume of the left audio channel....
MCI_DGV_SETAUDIO_RIGHT
...

Если кто знает - пусть пишет, не стесняется smile

Автор: _hunter 12.8.2005, 16:43
дык ( IMHO ) баланс это отношение
Цитата
Относительные уровни громкости правого и левого каналов в аудиосистеме или отдельном компоненте. Баланс каналов — это также относительная разница между сигналами левого и правого каналов в системе многоканального звуковоспроизведения "Dolby Surround"; баланс каналов регулируется в некоторых A/V-ресиверах и A/V-предварительных усилителях для оптимизации декодирования фонограммы формата "Dolby".

т.е. двигая левый канал вверх и правый ( на столько же ) вниз мы и будем делать то, что делает бегунок Balance в Volume Control

Автор: p0s0l 12.8.2005, 17:10
Ага smile, это я попутал баланс с Panning-ом (всё время думал, что в FL Studio балансы везде, а щас посмотрел, оказывается - паннинги smile )...
Ну тогда баланс - это дело решенное smile

Автор: Dubinsky 13.8.2005, 14:59
Баланс - на самом деле разница громкостей левого и правых каналов и я менял его посредством хммм WaveOut... т.е менял баланс всего выхода .

p0s0l предложил способ который меняет натройки самого устройства а не выхода ! это круто , но я не очень с этими функциями разобрался , да сам допёр до MCI_DGV_SETAUDIO_LEFT флага менял его громкость но ничего не менялось ... примерчик бы для самоконтроля ...

Цитата(_hunter @ 12.8.2005, 16:43)
т.е. двигая левый канал вверх и правый ( на столько же ) вниз мы и будем делать то, что делает бегунок Balance в Volume Control

да и кстати баланс работает не совсем так ...
На самом деле он только понижает какой то канал (т.е. сдвигаем баланс вправо - понижаем левую громкость не повышая правой !)
100% проверено.

Автор: p0s0l 13.8.2005, 21:26
Цитата(Dubinsky @ 13.8.2005, 14:59)
примерчик бы для самоконтроля ...

Dubinsky, по сути дела это отличается только в 1 флаге: smile
Код
MCI_DGV_SETAUDIO_PARMS p;
ZeroMemory( &p, sizeof(p) );
p.dwItem = MCI_DGV_SETAUDIO_VOLUME;    
p.dwValue = 1000; // это громкость    
mciSendCommand( MediaPlayer->DeviceID, MCI_SETAUDIO,    
MCI_DGV_SETAUDIO_LEFT | MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, &p );

p.dwValue = 500; // это громкость    
mciSendCommand( MediaPlayer->DeviceID, MCI_SETAUDIO,    
MCI_DGV_SETAUDIO_RIGHT | MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, &p );

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)