На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Прочитать режим аудиокарты , Нужно узнать частоту дискретизации по умолчанию
    Как известно, начиная с Vista, аудиосистема Windows была полностью переделана, и все звуки проходят принудительную передискретизацию в дефолтный режим, указанный в настройках на скрине. Внимание, вопрос - откуда и как вычитать этот режим (т.е. именно саму настройку) из Delphi для аудиоустройства по умолчанию?
    user posted image
      Как вариант из реестра напрямую:
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\{30645201-bb5c-4d3a-b794-d4503a270a1b}\Properties

      Только мне неизвестно куда именно он пишет разрядность, в какой параметр

      Добавлено
      У меня на вин 7 пишет сюда:
      user posted image
        ^D^ima, я RegMon-ом тоже это всё смотрел, куда стандартный апплет Windows лезет. Там для начала надо идентификатор устройства по умолчанию откуда-то вычитать. Ну а без знания формата вот этой абракадабры этот способ бесполезен.
          Может, в "Программирование звука" перекинуть тему?

          Добавлено
          Мне тоже интересно :)
            Уф, разобрался!!!!
            Понял и про eRender/eCapture и про eMultimedia/eCommunications. Только вот что такое eConsole не совсем понятно...
            В целом вот так:
            ExpandedWrap disabled
              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)
              Цитата Jin X @
              Теперь бы выяснить как сделать то же самое, но не для устройства по умолчанию, а для любого устройства

              IMMDeviceEnumerator->EnumAudioEndpoints ?

              Вот тут пример есть.
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0506 ]   [ 19 queries used ]   [ Generated: 28.03.24, 08:03 GMT ]