ребят, подсобите плиз хочу увеличивать громкость на сколько позволяет звуковая карта и НЕ позволяет виндовс регулятор в трее висящий. т.е. чтоб в трее установлено на максимум, а я мог бы еще громче своей прогулинкой делать звук... возможно же вообще такое? кажется можно, но не знаю как.. PS. понимаю немного Асмовый код и Delphi
на работе не хоцца колонки особо громко не включишь а наушники - не тянет а у меня все равно свой плеер написан, так хоть доапдейтю
Код (Text): ////////////////////////////////////////////////////////////////////// // Volume Controler // by Whoo(whoo@isWhoo.com) // Oct.1 2001 ////////////////////////////////////////////////////////////////////// // Mixer.cpp: implementation of the CMixer class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Mixer.h" #include <mmsystem.h> #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CMixer::~CMixer() { } #undef FAILED #define FAILED(X) (MMSYSERR_NOERROR != X) ///////////////////////////////////////////////// // Component: value from dwComponentType member of MIXERLINE, eg:// MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE // Kind : 0 Wave ouput tunnle, 1 Wave input tunle, 2... other. CMixer::CMixer(DWORD ComponentType, DestKind dkKind): m_dwControlID(-1), m_bOK(false), m_dwChannels(0) { HMIXER hMixer; HRESULT hr; hr = mixerOpen(&hMixer, 0, 0, 0, 0); if (FAILED(hr)) return; MIXERLINE mxl; MIXERCONTROL mc; MIXERLINECONTROLS mxlc; DWORD kind, count; if (dkKind == Play) kind = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; else kind = MIXERLINE_COMPONENTTYPE_DST_WAVEIN; mxl.cbStruct = sizeof(mxl); mxl.dwComponentType = kind; hr = mixerGetLineInfo((HMIXEROBJ)hMixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE); if (FAILED(hr)) { mixerClose(hMixer); return; } count = mxl.dwSource; for(UINT i = 0; i < count; i++) { mxl.dwSource = i; mixerGetLineInfo((HMIXEROBJ)hMixer, &mxl, MIXER_GETLINEINFOF_SOURCE); if (mxl.dwComponentType == ComponentType) { m_dwChannels = mxl.cChannels; mc.cbStruct = sizeof(mc); mxlc.cbStruct = sizeof(mxlc); mxlc.dwLineID = mxl.dwLineID; mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME; mxlc.cControls = 1; mxlc.cbmxctrl = sizeof(MIXERCONTROL); mxlc.pamxctrl = &mc; hr = mixerGetLineControls((HMIXEROBJ)hMixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE); m_dwControlID = mc.dwControlID; break; }; } mixerClose(hMixer); m_bOK = true; } void CMixer::SetVolume(DWORD dwVol) { if (!m_bOK) return; HMIXER hMixer; HRESULT hr; hr = mixerOpen(&hMixer, 0, 0, 0, 0); if (FAILED(hr)) return; MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_UNSIGNED mxdu; mxdu.dwValue = dwVol; mxcd.cMultipleItems = 0; mxcd.cChannels = m_dwChannels; mxcd.cbStruct = sizeof(mxcd); mxcd.dwControlID = m_dwControlID; mxcd.cbDetails = sizeof(mxdu); mxcd.paDetails = &mxdu; hr = mixerSetControlDetails((HMIXEROBJ)hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE); mixerClose(hMixer); } DWORD CMixer::GetVolume() { if (!m_bOK) return 0; HMIXER hMixer; HRESULT hr; hr = mixerOpen(&hMixer, 0, 0, 0, 0); if (FAILED(hr)) return 0; MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_UNSIGNED mxdu; mxcd.cMultipleItems = 0; mxcd.cChannels = m_dwChannels; mxcd.cbStruct = sizeof(mxcd); mxcd.dwControlID = m_dwControlID; mxcd.cbDetails = sizeof(mxdu); mxcd.paDetails = &mxdu; hr = mixerGetControlDetails((HMIXEROBJ)hMixer, &mxcd, MIXER_GETCONTROLDETAILSF_VALUE); mixerClose(hMixer); return mxdu.dwValue; }
mixerSetControlDetails API функция - реализующая регулирование громкости audio - иконка висит в трее PS все равно спасибо, что не оставляете без ответов вообще хотелось бы что-то типо управление через драйвер звуковой или другой вариант (последнее будет сложнее - не представляю даже на сколько)
CyberMerlin А откуда вообще сведения, что миксер не позволяет обеспечить полный диапазон регулировок? ни разу про это не слышал
винамп запустил и в настройках dll wavoOut установил регулировка громкости в итоге громность почти на порядок больше была а если любым другим плеером слушать музыку (в том числе и моим) выставив звук на максимум виндовыми средствами - звук недотягивает тех высот - полученных винамповым драйвом
Может ошибаюсь, но в Winamp реализована функция усиления/ослабления звука 'preamp' в диапазоне -12...+12 dB. Думается, надо копать в ту же сторону - программно модифицировать саму звуковую волну перед записью в буфер.
хм а это девстивтельно идея ... и почему я недогадался сразу так же делать спасиб большое, пойду трудиться ОДНАКО, хотелось бы знать вообще возможно управление девайсом в этом направлении (регулировка громкости звука) минуя API ?
CyberMerlin Сдаётся мне, что дело в таком случае вовсе не в управлении девайсом )) Просто при записи\кодировании или кривом декодировании (частенько бывает когда вовремя не обновил кодек) звуковые данные могут иметь диапазон не +-32767, а допустим +-1000 и сколько регуляторы ни крути, громче чем он есть не станет ) А сделать его громче можно сотворив АРУЗ (авторегулятор уровня звука) - ищешь максимальное (пиковое) значение звука во всём файле, считаешь коэффициент приведения этого уровня к 32767 и множишь на этот коэффициент все выборки - и будет тебе счастие ЗЫ: а драйвера для этого вовсе не обязательно ковырять - вполне достаточно АПИ уровня
Y_Mur А сделать его громче можно сотворив АРУЗ (авторегулятор уровня звука) это как раз то о чем писал roman_pro... ну да ладненько ну раз у нас так красивенько все получается в этой ветке есть инфа о обработке звука на таком уровне? все что я нашел - работа с использофанием API и activemove ms windows'a я же хочу в программе самостоятельно обрабатывать звук и кодировать не только mp3, но и другие форматы. Если есть инфа, не обделите плиз вниманием, буду признателен если на мыло могете сослать - CyberMerlin.xaker.ru с пометкой ЗВУК