Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2009, 14:30   #1
iiunbreakableii
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 89
По умолчанию Как получить доступ к микшерам винды

Привет, Всем!
Помогите пожалуйста разобраться. Мне нужно получить доступ к микшерам винды, а именно к тому который отвечает за регулировку уровня "микрофона" в "уровне записи".

Откопал в инете сорцы, в которых реализована регулировка "микрофона", находящегося в "Воспроизведении", только вот не знаю как его модифицировать, чтобы получилось именно то, что мне надо.

Вот код:
Код:
function TForm1.SetMicrophoneVolume(bValue: Word): Boolean;
var { 0..65535 }
  hMix: HMIXER;
  mxlc: MIXERLINECONTROLS;
  mxcd: TMIXERCONTROLDETAILS;
  vol: TMIXERCONTROLDETAILS_UNSIGNED;
  mxc: MIXERCONTROL;
  mxl: TMixerLine;
  intRet: Integer;
  nMixerDevs: Integer;
  PrevVol: Pointer;
begin
  // Check if Mixer is available
  nMixerDevs := mixerGetNumDevs();
  if (nMixerDevs < 1) then
  begin
    Exit;
  end;

  // open the mixer
  intRet := mixerOpen(@hMix, 0, 0, 0, 0);

  if intRet = MMSYSERR_NOERROR then
  begin
    mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
    mxl.cbStruct := SizeOf(mxl);

    // get line info
    intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);

    if intRet = MMSYSERR_NOERROR then
    begin
      ZeroMemory(@mxlc, SizeOf(mxlc));
      mxlc.cbStruct := SizeOf(mxlc);
      mxlc.dwLineID := mxl.dwLineID;
      mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
      mxlc.cControls := 1;
      mxlc.cbmxctrl := SizeOf(mxc);

      mxlc.pamxctrl := @mxc;
      intRet := mixerGetLineControls(hMix, @mxlc,
        MIXER_GETLINECONTROLSF_ONEBYTYPE);

      if intRet = MMSYSERR_NOERROR then
      begin
        ZeroMemory(@mxcd, SizeOf(mxcd));
        mxcd.dwControlID := mxc.dwControlID;
        mxcd.cbStruct := SizeOf(mxcd);
        mxcd.cMultipleItems := 0;
        mxcd.cbDetails := SizeOf(vol);
        mxcd.paDetails := @vol;
        mxcd.cChannels := 1;
        vol.dwValue := bValue;
        intRet := mixerSetControlDetails(hMix, @mxcd,
          MIXER_SETCONTROLDETAILSF_VALUE);

        if intRet <> MMSYSERR_NOERROR then
          ShowMessage('SetControlDetails Error');
      end
      else
        ShowMessage('GetLineInfo Error');
    end;
    intRet := mixerClose(hMix);
  end;
end;
Подскажите пожалуйста, что надо переделать, чтобы получилось доступ к другим регуляторам, и в частности к "микрофону" из "уровня записи".

Спасибо!!!
iiunbreakableii вне форума Ответить с цитированием
Старый 09.11.2009, 15:00   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

А сторонние компоненты нельзя?
SERG1980 вне форума Ответить с цитированием
Старый 09.11.2009, 16:03   #3
iiunbreakableii
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 89
По умолчанию

а какой компонент Вы предлогаете? Если это "Audio Lab" , то пожалуйста, скиньте небольшой исходничёк в котором, реализована эта функция, буду очень признателен!
iiunbreakableii вне форума Ответить с цитированием
Старый 10.11.2009, 11:02   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

В демках на аудио лаб есть много примеров
SERG1980 вне форума Ответить с цитированием
Старый 12.11.2009, 14:49   #5
iiunbreakableii
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 89
По умолчанию

SERG1980, в демках я нашёл только пример на использование компонента ALAudioMixer, а мне бы понять как работать с AlSystemMixer. Если Вам не трудно, объясните пожалуйста как с ним работать, буду крайне благодарен!
Спасибо!
iiunbreakableii вне форума Ответить с цитированием
Старый 12.11.2009, 17:50   #6
Arxangelname
Пользователь
 
Аватар для Arxangelname
 
Регистрация: 12.03.2009
Сообщений: 30
По умолчанию

Вот тут есть пример правда с ипользованием bass.dll качай
Вложения
Тип файла: rar RecordTest.rar (300.2 Кб, 48 просмотров)
Arxangelname вне форума Ответить с цитированием
Старый 13.11.2009, 13:18   #7
iiunbreakableii
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 89
По умолчанию

большое спасибо!
iiunbreakableii вне форума Ответить с цитированием
Старый 13.11.2009, 14:32   #8
iiunbreakableii
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 89
По умолчанию

всё хорошо, работает как надо!
Мне бы только кое-что подпраить. Для изменения уровня ползунка в коде используется функция
Код:
BASS_RecordSetInput(ComboBox1.ItemIndex, 0, TrackBar1.Position / 100);
Как узнать индекс конкретной линии, например того же микрофона? Скорее всего это можно как-то сделать потому, что среди констант библиотеки bass.dll я нашел BASS_INPUT_TYPE_WAVE, который скорее всего надо задать какой-то функции (цель выяснить, какая же это функция) в виде параметра и получить соответсвующий индекс.

Если кто знает помогите пожалуйста : )
iiunbreakableii вне форума Ответить с цитированием
Старый 13.11.2009, 16:03   #9
iiunbreakableii
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 89
По умолчанию

Решение нашлось!
чтобы найти индекс можно пробежаться по всем линиям с маской и проверить микрофон ли это. Вот пример:
Код:
i := 0;
  dName := BASS_RecordGetInputName(i);
  while dName <> nil do
  begin
    // catch mic line
    if (BASS_RecordGetInput(i, level) and BASS_INPUT_TYPE_MASK)=BASS_INPUT_TYPE_MIC then
    MicIndex:=i;
  Inc(i);
  dName := BASS_RecordGetInputName(i);
end;
Всем спасибо за помощь! Вопрос закрыт.
iiunbreakableii вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить доступ к сайту в DELPHI cowboy Общие вопросы Delphi 8 10.09.2009 16:12
Как получить доступ к файлу в локальной сети. DV-Karpov Работа с сетью в Delphi 2 18.11.2008 21:53
Как получить доступ к Свойства файла -> Сводка? Ruzzz Win Api 1 18.10.2008 18:39
Как получить доступ к данным kiber0net0 Помощь студентам 2 03.09.2008 08:14
Как получить доступ к ячейке DBGrid RatMir БД в Delphi 1 16.06.2008 22:35