Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.11.24;
Скачать: [xml.tar.bz2];

Вниз

DirectShow Filters - DirectSound - set audio device   Найти похожие ветки 

 
toropoff   (2012-11-29 00:29) [0]

Подскажите пожалуйста, использую DSPack для вывода видео.
Необходимо выбрать устройство вывода звука.
Возможно как-то глобально это сделать?
Если нет, пусть например звук выводится через DirectSound фильтры.
Что искать и как указать необходимое устройство вывода звука?

читая msdn нифига не понял:

"The audio renderer category contains two additional filter instances, named "Default DirectSound Device" and "Default WaveOut Device." These correspond to the default sound device, as chosen by the user through the Control Panel. They are actually mappings to one of the pairs described in the previous paragraph. For example, if the system has two audio devices, Device A and Device B, the audio renderer category will contain the following:
Device A
DirectSound: Device A
Device B
DirectSound: Device B
Default DirectSound Device
Default WaveOut Device

If the user selected Device A as the default device, then "Default DirectSound Device" is equivalent to "DirectSound: Device A," and "Default WaveOut Device" is equivalent to "Device A." If the user selects Device B as the default device, these mappings will change.

"Default DirectSound Device" is assigned a merit of MERIT_PREFERRED. The others have merit MERIT_DO_NOT_USE. Therefore, Intelligent Connect will always choose the default DirectSound device."


 
toropoff   (2012-12-01 00:02) [1]

разрешите поднять тему вверх, может кто подкаскажет, т.к. пока топчусь на месте..


 
KilkennyCat ©   (2012-12-01 23:28) [2]

я бы подсказал, да туго соображаю, что ты хочешь.
есть определенные методы работы с ДиректСоунд, не следование им странно и чревато, примеров как реализовать множество, книги даже на русском есть.
а чтоб явно все видеть, как енто работает совместно и переключается и фильтруется и т.д. то вот есть такая вещица: http://ru.wikipedia.org/wiki/GraphEdit с нею удобненько, хотя есть и другие, еще удобней, просто непомню уже.


 
toropoff   (2012-12-02 00:36) [3]

KilkennyCat ©, орогмное спасибо за ответ!

я прекрасно знаю этот софт..
я вижу какой граф строится..
поначалу я уверенно в своей проге искал в фильтрах "DirectSound Audio Renderer" с мыслью что запросто через него смогу изменить устройство вывода звука, но... нашел там только громкость и т.п.

через GraphEdit подключился удаленно, - перебрал вроде бы все фильтры - нихрена не нашел где бы можно было выбрать устройство вывода звука - тупо звук идет на устройство, что выбрано по умолчанию в системе..

мысль - писать свой фильтр под звук..  но это уже крайняя меря..
пока всё же надеюсь что где-то оно должно выбираться стандартно...


 
toropoff   (2012-12-02 00:38) [4]

>>  я бы подсказал, да туго соображаю, что ты хочешь.

используя DSPack я проигрываю видео файлы.
звук идет на устройство что выбрано по умолчанию в системе.
у меня стоит две звуковых карты.
хотелось бы иметь возможность выбрать вторую карту для вывода звука при проигрывании видео..


 
kilkennycat   (2012-12-02 11:03) [5]

ну, порядок работы такой:
http://msdn.microsoft.com/ru-ru/library/windows/desktop/ee416969%28v=vs.85%29.aspx
как это реализовано в dspack - фиг его знает.


 
nss   (2013-02-15 23:52) [6]

получить перечисление устройств аудио вывода, выбрать, по моникеру получить фильтр устройства, добавить его в граф, дорендерить фильтр до нового фильтра. тоже самое для компрессоров.


 
nss   (2013-02-15 23:58) [7]

получить  перечисление. Вызовы:
GetSystemEnumList(CLSID_VideoInputDeviceCategory  ,ListBox1.Items,ma);
GetSystemEnumList(CLSID_AudioRendererCategory  ,ListBox3.Items,ama);
GetSystemEnumList(CLSID_VideoCompressorCategory  ,ListBox4.Items,vrf);

сама функция:

procedure GetSystemEnumList(CategoryGUID:TGUID;ResultList:TStrings;var Monikers:TMonikerArray);
  var a:Cardinal;  Filter:IBaseFilter;
 begin
 try
  hr:=CoCreateInstance(CategoryGUID,nil,CLSCTX_INPROC_SERVER,IID_ICreateDevEnum,De vEnum);
  if hr<>S_OK then
    raise Exception.Create("ошибка создания перечислителя")
   else
   begin
    hr:=DevEnum.CreateClassEnumerator(CategoryGUID,MonikerEnum,0);
     if hr<>S_OK then
          if hr=S_FALSE then
           raise Exception.Create("Нет устройств")
          else
            raise Exception.Create("Ошибка получения устройств")
     else
      begin
     HError:=S_Ok;
  HErrorText:="";
        While (MonikerEnum.Next(1,Moniker,@a)=S_OK) do
         begin

           if Moniker.BindToStorage(b,Moniker,IID_IPropertyBag,PropertyBag)=S_OK then
             if PropertyBag.Read("FriendlyName",vDeviceName,ee)=S_ok then
               begin
               PropertyBag.Read("Description",vDeviceDesc,ee);
               PropertyBag.Read("CLSID",vDeviceCLSID,ee);
               ResultList.Add(vDeviceName+":"+vDeviceDesc+":"+vDeviceCLSID);
               SetLength(Monikers,Length(Monikers)+1);
               Monikers[Length(Monikers)-1]:=Moniker;
               end;
             end;
           end;

         end;
except
on e:Exception do
 begin
  HError:=hr;
  HErrorText:=e.Message;
 end
end;


 
nss   (2013-02-16 00:04) [8]

после добавления нужных фильтров делаем построение:

hr := MyGraphBuilder.RenderStream(@PIN_CATEGORY_PREVIEW, bf, nil, RenderVideoFilter);
 hr := MyGraphBuilder.RenderStream(@PIN_CATEGORY_PREVIEW, bf, nil, a);

по идее так не правильно получаются лишний smart tee фильтр на аудио канале, но у меня отказалось петь при ручном соединении.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.11.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
1-1319001199
hoolio
2011-10-19 09:13
2013.11.24
Функция скриншота кушает память


15-1370118603
Юрий
2013-06-02 00:30
2013.11.24
С днем рождения ! 2 июня 2013 воскресенье


11-1248467365
Dy1
2009-07-25 00:29
2013.11.24
WMI


2-1361087240
jonis_84
2013-02-17 11:47
2013.11.24
Кнопка вернуть


2-1361050015
Zuide
2013-02-17 01:26
2013.11.24
Prorisovat knopku





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский