Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Доступ к некоторым линиям микшера


Автор: AndreySol 1.2.2007, 08:28
Код

MIXERLINE SpeakerLine = {0};
MMRESULT Result;
HMIXER hMixer = NULL;

Result = mixerOpen(&hMixer, MIXER_OBJECTF_MIXER, DWORD(this->GetSafeHwnd()), NULL, СALLBACK_WINDOW);
if(Result == MMSYSERR_NOERROR)
{ // микшер успешно открыт - продолжаем
    SpeakerLine.cbStruct = sizeof(SpeakerLine);
    SpeakerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
    Result = mixerGetLineInfo(HMIXEROBJ(hMixer), &SpeakerLine, MIXER_GETLINEINFOF_COMPONENTTYPE);
    if(Result == MMSYSERR_NOERROR)
    {
            ///////// ВОТ сюда с нижеперечисленными типами линий не попадаем
        }
}

Почему не получается с некоторыми типами линий (а именно: MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY, 
MIXERLINE_COMPONENTTYPE_SRC_DIGITAL, MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER) а с остальными SRC_-линиями все нормально ? Что надо исправить или добавить ?

Автор: AndreySol 11.2.2007, 14:11
Уф, вроде разобрался. Следующий код работает нормально - выдает названия сначала всех линий воспроизведения, затем всех линий записи.
MMRESULT Result;
HMIXER hMixer;
MIXERLINE Line = {0};
MIXERCAPS mxCaps = {0};
CString strNameLine = "";

Line.cbStruct = sizeof(Line);
Line.dwSource = 0;

Result = mixerOpen(&hMixer, MIXER_OBJECTF_MIXER, DWORD(this->GetSafeHwnd()), NULL, CALLBACK_WINDOW);
if(Result == MMSYSERR_NOERROR)
{
    Result = mixerGetDevCaps((UINT_PTR)hMixer, &mxCaps, sizeof(mxCaps));
    if(Result == MMSYSERR_NOERROR)
    {
        for(int iDest = 0; iDest <= (int)mxCaps.cDestinations - 1; iDest++)
        {
            unsigned long iConnections = 0;
            Line.dwDestination = iDest;
            Line.dwSource = 0;
            Result = mixerGetLineInfo(HMIXEROBJ(hMixer), &Line, MIXER_GETLINEINFOF_DESTINATION);
            if(Result == MMSYSERR_NOERROR)
                iConnections = Line.cConnections - 1;

            for(unsigned long i = 0; i <= iConnections; i++)
            {
                Line.dwSource = i;
                Result = mixerGetLineInfo(HMIXEROBJ(hMixer), &Line, MIXER_GETLINEINFOF_SOURCE);
                if(Result == MMSYSERR_NOERROR)
                {
                    strNameLine = "";
                    strNameLine.Format("Dest %i, %s", iDest, Line.szName);
                    MessageBox(strNameLine,"",0);
                }
            }
        }
    }

    mixerClose(hMixer);
}
Последний вопрос по этой теме: как выяснить соответствие доступных каналов необходимому, т.е. к примеру мне надо перечислить линии канала записи - как определить что канал с номером 1 именно канал записи ? На другом форуме мне написали
Цитата

Сначала определяем канал записи (обычно 1)

но слово "обычно" это не то что нужно, должен быть какой-то флаг или еще что ?

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