Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с микшером

27K
23 октября 2010 года
TDK
29 / / 30.09.2008
Как изменить звук в микшере в разных программах. Например из своей программ в Aimp
Вот нарыл код он изменяет уровень звука для "себе"
есть еще вопрос как правильно пользоваться mixerOpen он отрабатывает только раз и программа закрывается. GetLastError возращяет 0
Код:
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>

HMIXER hMixer;
MIXERLINE ml;
MIXERLINECONTROLS mlc;
MIXERCONTROL mc;
MIXERCONTROLDETAILS mcd;
MIXERCONTROLDETAILS_UNSIGNED mcdu;
DWORD Volume;
MMRESULT Ret;

int main(int argc, char **argv)
{
/*    mixerOpen(&hMixer, MIXER_OBJECTF_MIXER, NULL, 0, CALLBACK_WINDOW);
    DWORD dw = GetLastError();
    char txtt[32] = "";
    char Tess[32] = "Code: ";
    sprintf(txtt,"%d",dw);
    strcat(Tess, txtt);
    MessageBox(0, Tess, "Error!", MB_ICONERROR);*/
    DWORD t = 0;
    int i = 0;
    while (true)
    {
        t = t+655;
        i++;
       
        ml.cbStruct = sizeof(ml);
        ml.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;

        Ret = mixerGetLineInfo((HMIXEROBJ)hMixer, &ml, MIXER_GETLINEINFOF_COMPONENTTYPE);
        if (Ret != MMSYSERR_NOERROR) return 0;

        Ret = mixerGetLineInfo((HMIXEROBJ)hMixer, &ml, MIXER_GETLINEINFOF_COMPONENTTYPE);
        if (Ret != MMSYSERR_NOERROR) return 0;

        mlc.cbStruct = sizeof(mlc);
        mlc.dwLineID = ml.dwLineID;
   
        mlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
   
        mlc.cControls = 1;
        mlc.cbmxctrl = sizeof(mc);
        mlc.pamxctrl = &mc;
        mc.cbStruct = sizeof(mc);

        Ret = mixerGetLineControls((HMIXEROBJ)hMixer, &mlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
        if (Ret != MMSYSERR_NOERROR) return 0;

        mcdu.dwValue = t; // the volume is a number between 0 and 65535

        mcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
        mcd.hwndOwner = 0;
        mcd.dwControlID = mc.dwControlID;
        mcd.paDetails = &mcdu;
        mcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
        mcd.cChannels = 0;
        Ret = mixerSetControlDetails((HMIXEROBJ) hMixer,
        &mcd, MIXER_SETCONTROLDETAILSF_VALUE);

        mixerSetControlDetails((HMIXEROBJ)hMixer, &mcd, MIXER_SETCONTROLDETAILSF_VALUE);
        PlaySound(TEXT("C:\\Windows\\winsxs\\x86_microsoft-windows-s..undthemes-landscape_31bf3856ad364e35_6.1.7600.16385_none_1e650d9135666d13\\Windows Battery Low.wav"), NULL, SND_FILENAME | SND_ASYNC);

        mixerClose(hMixer);
        printf("%d\n",i);
        Sleep(2000);
        if (i==100)
        {
            break;
        }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
41K
28 октября 2010 года
kisssko
108 / / 28.10.2010
Сразу бросилось в глаза... Что там делает CALLBACK_WINDOW, в openMixer если приложение консольное?! o_O И тем более, в качестве окна задано NULL. И вообще, эта строчка у тебя должна выглядеть так:

 
Код:
mixerOpen(&hMixer, 0, NULL, 0, MIXER_OBJECTF_MIXER);


А у тебя даже параметры местами попутаны были.
27K
28 октября 2010 года
TDK
29 / / 30.09.2008
та это так прототип писал для оконного приложения и увлекся )
у меня такой вопрос можно как то указать программу для которой нужно изменить звук?
41K
29 октября 2010 года
kisssko
108 / / 28.10.2010
Эт для висты что ли? Этими функциями никак.
В висте они только для вызывающего приложения звук регулируют.
Там совсем другой API для управления глобальным уровнем громкости.
WASAPI (Windows Audio Session API) зовётся.
Почитать про это можно тут и тут.
27K
29 октября 2010 года
TDK
29 / / 30.09.2008
хотелось бы и на WinXP, но в основном Win 7/Vista
41K
29 октября 2010 года
kisssko
108 / / 28.10.2010
Цитата: TDK
хотелось бы и на WinXP, но в основном Win 7/Vista



На XP нет WASAPI вроде. Только через winmm.dll, но глобально,
для всех приложений сразу. А для висты и w7 этот интерфейс устаревший.

Кстати, для XP есть ещё более простой способ управления громкостью --
через функции auxGetVolume() и auxSetVolume().
Но так только Master Volume регулируется.

7
30 октября 2010 года
@pixo $oft
3.4K / / 20.09.2006
Подведя итог всему вышенаписанному–реализуйте разный функционал в зависимости от версии ОС
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог