Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.171.121] |
|
Сообщ.
#1
,
|
|
|
Как известно, начиная с Vista, аудиосистема Windows была полностью переделана, и все звуки проходят принудительную передискретизацию в дефолтный режим, указанный в настройках на скрине. Внимание, вопрос - откуда и как вычитать этот режим (т.е. именно саму настройку) из Delphi для аудиоустройства по умолчанию?
|
Сообщ.
#2
,
|
|
|
Как вариант из реестра напрямую:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{30645201-bb5c-4d3a-b794-d4503a270a1b}\Properties Только мне неизвестно куда именно он пишет разрядность, в какой параметр Добавлено У меня на вин 7 пишет сюда: |
Сообщ.
#3
,
|
|
|
^D^ima, я RegMon-ом тоже это всё смотрел, куда стандартный апплет Windows лезет. Там для начала надо идентификатор устройства по умолчанию откуда-то вычитать. Ну а без знания формата вот этой абракадабры этот способ бесполезен.
|
Сообщ.
#4
,
|
|
|
Может, в "Программирование звука" перекинуть тему?
Добавлено Мне тоже интересно |
Сообщ.
#5
,
|
|
|
Уф, разобрался!!!!
Понял и про eRender/eCapture и про eMultimedia/eCommunications. Только вот что такое eConsole не совсем понятно... В целом вот так: procedure TfmMain.GetInfo; const PKEY_AudioEngine_DeviceFormat_GUID: TGUID = '{F19F064D-082C-4E27-BC73-6882A1BB8E4C}'; PKEY_AudioEngine_DeviceFormat_pid = 0; // DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat, 0xf19f064d, 0x82c, 0x4e27, 0xbc, 0x73, 0x68, 0x82, 0xa1, 0xbb, 0x8e, 0x4c, 0); STGM_READ = 0; var FMMDevEnum: IMMDeviceEnumerator; FMMDev: IMMDevice; FEndPoint: IPropertyStore; Prop: tag_inner_PROPVARIANT; Key: _tagpropertykey; Format: TWaveFormatEx; begin CoCreateInstance(CLASS_MMDeviceEnumerator, nil, CLSCTX_ALL, IID_IMMDeviceEnumerator, FMMDevEnum); FMMDevEnum.GetDefaultAudioEndpoint(eRender, eMultimedia, FMMDev); FMMDev.OpenPropertyStore(STGM_READ, FEndPoint); Key.fmtid := PKEY_AudioEngine_DeviceFormat_GUID; Key.pid := PKEY_AudioEngine_DeviceFormat_pid; // FillChar(Prop, SizeOf(Prop), 0); FEndPoint.GetValue(Key, Prop); Move(Prop.__MIDL____MIDL_itf_mmdeviceapi_0003_00810001.blob.pBlobData^, Format, SizeOf(Format)); Edit1.Text := IntToStr(Format.nChannels); Edit2.Text := IntToStr(Format.nSamplesPerSec); Edit3.Text := IntToStr(Format.wBitsPerSample) end; Теперь бы выяснить как сделать то же самое, но не для устройства по умолчанию, а для любого устройства... Прикреплённый файлGetFormat.zip (14,99 Кбайт, скачиваний: 153) |
Сообщ.
#6
,
|
|
|
Цитата Jin X @ Теперь бы выяснить как сделать то же самое, но не для устройства по умолчанию, а для любого устройства IMMDeviceEnumerator->EnumAudioEndpoints ? Вот тут пример есть. |