Подскажите пожалуйста, как выбрать элемент, откуда будет считываться звук (аналог — регулятора записи — там у каждого элемента есть галка — "выбрать") — то есть микрофонный вход или линейный...
Полагаю надо копать в сторону микшеров, но не знаю тип контрола — собственно в этом основная проблема...
вот пример моего кода — я пытаюсь выбрать в качестве средства записи линейный вход
//обявления некоторых переменных не попали в кусок...
HMIXER hLineIn;
if(::mixerOpen(&hLineIn,0,0,0,MIXER_OBJECTF_HMIXER)!= MMSYSERR_NOERROR)
{
return;
}
ml.cbStruct = sizeof(ml);
ml.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
if(::mixerGetLineInfo(
(HMIXEROBJ)hLineIn,
&ml,
MIXER_GETLINEINFOF_COMPONENTTYPE
) != MMSYSERR_NOERROR)
{
return;
}
MIXERCONTROL mc1;
mcs.cbStruct = sizeof(mcs);
mcs.dwControlType = MIXERCONTROL_CONTROLTYPE_MUX;
//MIXERCONTROL_CONTROLTYPE_VOLUME;
mcs.dwLineID = ml.dwLineID;
mcs.cControls = 1;
mcs.cbmxctrl = sizeof(mc1);
mcs.pamxctrl = &mc1;
MMRESULT res = ::mixerGetLineControls(
(HMIXEROBJ)hLineIn,
&mcs,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
if(res != MMSYSERR_NOERROR)
{
return;
}
m_dwVolumeCtrlID = mc1.dwControlID;// вот здесь мне все время приходит 0
MIXERCONTROLDETAILS_BOOLEAN mcd_b;
mcd_b.fValue = 1;
mcd.cbStruct = sizeof(mcd);
mcd.dwControlID = m_dwVolumeCtrlID;
mcd.cChannels = ml.cChannels;
mcd.cMultipleItems = mc1.cMultipleItems;
mcd.cbDetails = sizeof(mcd_b);
mcd.paDetails = &mcd_b;
res = ::mixerSetControlDetails((HMIXEROBJ)hLineIn, &mcd, MIXER_SETCONTROLDETAILSF_VALUE);
//здесь возвращается код ошибки MM...INVALPARAM
Подскажите пожалуйста, что я делаю не так...
ЗЫ. И еще вопрос немного не по теме — можно ли как нибудь определить, работает ли линейный вход — я проверял так — соединял выход со входом — включал песню и записываал ее при помощи стандартной звукозаписи. В записанном файле были только шумы...
Заранее спасибо!