Форум: "Начинающим";
Текущий архив: 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