1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Делаем Звук На Основе Voodoohda

Тема в разделе 'Звуковые карты', создана пользователем slice, 23 июн 2009.

  1. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    8`459
    Драйвер VoodooHDA полностью работает!
    Мы с AutumnRain сделали новую версию, в которой можно вносить свои изменения. Впереди еще будут косметические изменения, но сделано главное - он работает!

    офф-версия
    https://sourceforge.net/projects/voodoohda/

    Подробная инструкция как настраивать звук от RodionS здесь

    В атаче этого поста проверенная версия.

    Подробности

    Новая версия появилась благодаря новому разработчику Zenith432. Респект!

    Преимущества перед AppleHDA
    1. Гораздо проще настроить под свою звуковушку. Во многих случаях будет работать из коробки.
    2. Имеется контрольная панель для более тонких регулировок.
    3. В драйвере нет обработки звука, нет шумоподавления, это вроде и плохо, но это и хорошо, мы имеем девственно чистый звук.
    4. Работает передний микрофон и встроенный микрофон ноутбука.

    Советы:
    Правильно укажите тип внутреннего микрофона
    <string>0x90a70120</string> -- внутренний аналоговый красная цифра
    <string>0x90a6e140</string> -- внутренний цифровой
    И сделайте все входа в разных группах - синяя цифра

    Способ правки Пин Конфига.
    Откройте VoodooHDA.kext/Contents/Info.plst и подредактируйте секцию
    NodesToPatch. Образец здесь.
    Уточнение информации про пинконфиг.
    ПРОЧИТАЙТЕ ОБЯЗАТЕЛЬНО! ТОЛЬКО ПОТОМ ПОСТИТЕ!
    Пробуйте и выставляйте удачные инфо-плисты с комментариями, что изменилось.

    Список изменений (open)
    17.09.2009
    - добавлен автодетект микрофонов
    - автодетект выходных устройств в более сложной ситуации, чем спикер/наушники
    - исправлены цифровые выходы (не проверено)

    21.09.2009
    Мелкие исправления внутренних ошибок.
    [attachment=8399:VoodooHDA.prefPane-Snow.zip]

    31.03.2010
    Исправления работы миксеров. Добавил в качестве эксперимента flushControl. По задумке должны уменьшиться задержки звука и чистота.

    17.04.2010
    Версия 0.2.6.
    - поддержка большего количества чипсетов и кодеков
    - поддержка HDMI
    - исправления работы Input Monitor
    Берем здесь
    Или здесь


    18.09.2010
    Версия 2.7.0
    Более громкий звук и вообще исправления обработки звука.
    http://www.projectos...p?showtopic=355

    Версия 2.7.2
    Посмотреть вложение 23718


    Всем страдальцам VoodooHDA, с паникой:
    Обязательно, перед установкой кекста, AppleHDA бэкапить/удалять/дизаблить.
    Вот вариант AppleHDADisabler в аттаче

    Утилита для сохранения/восстановления настроек, сделанных в префпанели VoodooHDA. Автор Talagan, основывался на исходниках от Fassl.

    17.05.2012
    Добавляю версию 2.7.4. К ней нужно использовать префпанель версии1.1 и VoodooHDASaveSettings1.0
    08.08.2012
    Все в одном флаконе. Версия 2.74 ревизия63 - ХДМИ не мешает аналогу.

    04.01.2013 - новый разработчик - Zenith432
    Версия 2.8.0 - в составе панель версии 1.2
    Исправлены ошибки, сделана работа с двумя устройствами. HDA и HDMI.
    Поправлены цепочки с миксерами.

    26.01.2013
    Версия 2.8.2
    Более стабильная версия. Главное изменение - косметическое

    ==


    29.06.2013
    Версия 2.8.4
    Странно, но для Льва не такая версия, как для Горного.
    ЗЫ. горную версию удаляю, Львиная работает лучше.

    ==============================================
    09.09.2015
    Версия 2.8.8
    Исправлена работа с AAC
    В архиве VodooHDA.kext, префпанель и дополнительные файлы.

    В настройках драйвера открыт сквозной канал, поэтому возможен шум с микрофона. Убрать шум в префпанели - InputGain, Monitor или другой т.к. зависит от кодека. Обратите внимание что вы настраиваете, возможно HDMI, переключите на нужный кодек и выберите разьем.
    Снимок экрана 2015-10-25 в 19.58.39.
    Снимок экрана 2015-10-25 в 19.59.27.

    Закрепить настройки утилитой VoodooHdaSettingsLoader.app - запустить и поставить утилиту в "Объекты входа"
    ================================================
    19.08.2016
    Версия 2.8.9
    В плисте сделана простая галочка DisableInputMonitor, и она по-умолчанию стоит.
    Это принесло потрясающий эффект, тем, кто ничего не умеет настраивать. Теперь драйвер грузится без громкого хлопка сабвуфером, и при работе нет посторонних шумов, шипения и свиста.
    Еще замечу, что драйвер протестирован в Сиерре, нареканий нет.
    Смотрите в его Info.plist возможные настройки, они изменились по сравнению с предыдущими.
    ================================================

    В этой теме, все сообщения и вопросы без железа(конфигурации) в подписи, будут удалены.
     

    Вложения:

    Sergey_Galan, Tor, RedScorp и 44 другим нравится это.
     
  2. clubber_77

    clubber_77 iГуру Помог материально!

    Симпатии:
    598
    Slice, вопрос такого характера: коннекторы-это определение параметра для самой ноды, или же указание ноде, куда ей следует подцепиться, т.е. следующее устройство?

    P.s. Поправь название топика, а то непонятно кто делает... может ты имел ввиду "делаем"..
     
  3. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    8`459
    Именно следующее устройство в цепочке нод. Т.е. мы можем влиять но составление цепочек этим драйвером.
    Поправил.
     
  4. clubber_77

    clubber_77 iГуру Помог материально!

    Симпатии:
    598
    а как быть с цепочками, которые отличаются всего одной нодой, допустим внешний и встроенный микрофон, спикеры и наушники? просто в моем случае получается так, что на некоторых нодах будет не один коннектор, а два...
     
  5. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    8`459
    Вопрос, что называется, на засыпку.
    Придется поправить исходники так, чтобы можно было писать несколько коннекторов.
    А если ты эти ноды не трогаешь, так в дампе будут правильные коннекторы?
     
  6. clubber_77

    clubber_77 iГуру Помог материально!

    Симпатии:
    598
    не понял вопроса, перефразируй....

    предыдущий вопрос был вот к чему:
    как быть с автодетектом, ведь в драйвере на основе родного ХДА два отдельных устройства можно было задать как субустройства одного, убрав один закрывающий и один открывающий эрреи между устройствами. тут же каждая нода имеет свою собственную веточку, как нам обозначить эти самые субустройства? если просто добавить возможность внесения двух коннекторов, не будет ли это причиной, из-за которой драйвер может запутаться?
     
  7. pinguinjkeke

    pinguinjkeke Модератор Команда форума

    Симпатии:
    45
    тут я могу выбрать инпут или аутпут?
     
  8. Sax-mmS

    Sax-mmS iНовичок

    Симпатии:
    2
    С автодетектом тут ситуация прямо противоположная родному AppleHDA. Если для AppleHDA надо категорически избавится от двух устройств в одной группе, для чего в PinConfig-e (PinDefault) последние две цифры заменялись по маскам X0,Y0,Z0, в вуду наоборот надо два устройства засунуть в одну группу - X0 и XF

    Для
    Код:
    <key>Config</key>
    <string>0x01011050</string>
    пара может быть такой
    Код:
    <key>Config</key>
    <string>0x0101105F</string>
     
  9. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    8`459
    0 - аутпут, 1 - инпут
    Но следует все-таки следовать даташиту, и не переиначивать пин-комплекс как аутпут.
    Только если драйвер капитально ошибся.

    А вот за это - СПАСИБО!

    И по-поводу вопроса о двух коннекторах к одной ноде. У меня такое подозрение, что этого быть не должно. Звук с миксера должен идти только на один выход. А то, что в дампе несколько коннекторов, то это на выбор, и вуду пытается сам выбрать по своим алгоритмам, нравятся нам они или нет. В ЭпплХДА выбор осуществляется в цепочках нод, что я и пытался здесь сыммитировать.
     
  10. clubber_77

    clubber_77 iГуру Помог материально!

    Симпатии:
    598
    Slice, для большинства людей понять, что-либо из поста о масках и устройствах в одной группе достаточно сложно.... На мой взгляд наибольшую ценность представляют практические, наглядные примеры, в которых четко и ясно показано, что, где и как должно выглядеть... я конечо понимаю, что мы в лаборатории, но как мне представлялось тема про VoodooHDA
    [​IMG]
    не стоит ли излагать полезную информацию в доступном виде, чтобы люди могли пользоваться?

    построю вопрос иначе: у меня два микрофона встроенный и подключаемый, цепочки для них соответственно 18-26-23 и 18-26-20, отличаются они одной нодой, как мне это прописать в VoodooHDA? как это должно выглядеть?
     
    1 человеку нравится это.
  11. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    8`459
    Извини, я пока сам на начальной стадии изучения, что тут можно сделать. Я просто реализовал идею, что на этот драйвер вообще можно повлиять. Осталось понять как.

    Теперь твой вопрос.
    Для начала запусти VoodooHDA без патчей, и сними дамп
    getdump >HDAdump0.txtx
    Теперь разглядывай его, и на основе своего опыта, какие ноды и какие цепочки должны быть, а они не такие, и придумывай, что прописать в инфо-плисте. Вместе посоображаем.
     
  12. Sax-mmS

    Sax-mmS iНовичок

    Симпатии:
    2
    Slice, для "повышения наглядности", предлагаю тебе добавить в конфиг такой ключ Patch для скармливания VoodooHDADevice::widgetPinPatch (как альтернатива Config)

    Код:
    <key>Patch</key>
    <string>device=... ctype=... color=... misc=... as=... seq=... conn=... loc=...</string>
     
  13. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    8`459
    Дай пример с цифрами, что было, и что стало. А то я не очень понимаю, что прописать в программе.

    Еще я думаю, как сделать MuteGPIO или VREF, у меня, наверно, из-за этого микрофон не работает.
     
  14. Sax-mmS

    Sax-mmS iНовичок

    Симпатии:
    2
    Значения color:
    Код:
    gColorTypes[16] = { "Unknown Color", "Black", "Grey", "Blue", "Green", "Red",
    "Orange", "Yellow", "Purple", "Pink", "Unknown Color", "Unknown Color",
    "Unknown Color", "Unknown Color", "White", "Other Color" };
    device:
    Код:
    gDeviceTypes[16] = { "Line Out", "Speaker", "Headphones", "CD",
    "SPDIF Out", "Digital Out", "Modem Line", "Modem Handset", "Line In",
    "AUX", "Microphone", "Telephony", "SPDIF In", "Digital In", "Unknown Device",
    "Other" };
    conn:
    Код:
    gConnTypes[4] = { "Jack", "None", "Fixed", "Both" };
    остальное десятичными (0..15) цифрами

    Код:
    device=Microphone ctype=0 color=Pink misc=0 as=2 seq=15 conn=Jack loc=0
    А по поводу микрофона - попробуй слать прямые команды через sendCommand. Сначала для тестов что-то такое - HDA_CMD_SET_AMP_GAIN_MUTE(cad, nid, 0x7300) или 0x7380.

    Код:
    bool VoodooHDAEngine::initHardware(IOService *provider)
    {
    ....
    if (!createAudioControls()) {
    errorMsg("error: createAudioControls failed\n");
    goto done;
    }
    
    result = true;
    // не знаю куда это надо, но наверное сюда
    // пропиши для тестов жестко свои параметры, если заработает можно будет и с настройкой подумать
    this::sendCommand(cad, HDA_CMD_SET_AMP_GAIN_MUTE(cad, nid, 0x7300));
    // а лучше просто this::sendCommand(0, 0x0NN7300); или какой у тебя там адрес.
    done:
    ...
    {
    }
     
  15. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    8`459
    Если ты хочешь заставить меня заменить Конфиг в цифровом виде на вот эту цепочку слов, то я этого делать не буду. У меня нет времени наводить косметику, когда нужно добиваться результата.
    Если сам сделаешь - честь тебе и хвала.
     
  16. Sax-mmS

    Sax-mmS iНовичок

    Симпатии:
    2
    Я никого ничего не заставляю делать, тут все сугубо добровольно. Драйвера для меня пока еще темный лес, да и с++ я не знаю. Могу только предложить такие добавления к твоему коду (не знаю, насколько они верны, но попробовать можно)

    так
    Код:
    typedef struct {
    UInt32 Enable;
    UInt32 Node;
    UInt32 Config;
    UInt32 Type;
    UInt32 Conns;
    UInt32 Cap;
    -->	char   patchString[512];
    } PatchArray;
    так в VoodooHDADevice::probe
    Код:
     ...
    } else if (tmpString->isEqualTo("Patch")){
    UInt32 patchSize = 0;
    bzero(NodesToPatchArray[i].patchString, 512);
    patchSize = tmpString->getLength();
    if (patchSize > 511) patchSize = 511;
    strncpy(NodesToPatchArray[i].patchString, tmpString->getCStringNoCopy(), patchSize);						
    NodesToPatchArray[i].Enable |= 0x16;
    }
    ...
    ну и так в VoodooHDADevice::vendorPatchParse
    Код:
     ...
    if (!widget || (widget->enable == 0))
    continue;
    
    if (NodesToPatchArray[i].Enable & 0x16)
    {
    UInt32 old = widget->pin.config; 
    widget->pin.config = widgetPinPatch(widget->pin.config, NodesToPatchArray[i].patchString);
    dumpMsg("Patch: old - 0x%08lx new - 0x%08lx", old, widget->pin.config);			
    continue;
    }
    ...
    А еще твоя версия в виде "как есть" вызывает кернел паник. Лечится очисткой словаря NodesToPatch, не у всех ноды как у тебя.
     
  17. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    8`459
    :D :D :D (N) ;)
    Американцы в инструкции к микроволновке пишут: "Собачек не сушить!".
    Мне тоже нужно было написать, что прописанные ноды именно для моей звуковухи, и здесь приведены в качестве образца.

    Я стал немного разбираться в устройстве VoodooHDA, и выяснил что драйвер очень примитивен
    Код:
    	direction = getEngineDirection();
    if (direction == kIOAudioStreamDirectionOutput) {
    usage = kIOAudioControlUsageOutput;
    initOssDev = SOUND_MIXER_VOLUME;
    }	
    else if (direction == kIOAudioStreamDirectionInput) {
    usage = kIOAudioControlUsageInput;
    initOssDev = SOUND_MIXER_MIC;
    }
    Т.е. выход только одного типа, и вход только одного типа.
    А у меня, к примеру, нету входа типа SOUND_MIXER_MIC, а есть входы типа SOUND_MIXER_LINE и SOUND_MIXER_MONITOR.
    Вот потому у меня и не работает микрофон, а выхода работают только LineOut, HeadРhone молчит.
    Знать диагноз - уже наполовину вылечить. Но как мне сделать два типа входа? Или тоже во входных параметрах патчить?
     
  18. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    8`459
    На прожектеОХ есть один отчет, что с таким патчем человек получил 100% работающий вудуХДА.
    А у нас что-то никто не хочет пробовать.
     
  19. AutumnRain

    AutumnRain iНовичок

    Симпатии:
    0
    slice А можно ли как-нибудь повлиять на усиление сигнала в нодах Audio Mixer?
    И каким образом можно задать несколько источников сигнала для одного миксера?
     
  20. slice

    slice Apple Life Dev Разработчик

    Симпатии:
    8`459
    Э-э-эммм...
    Я уже думаю над проблемой, чтобы внести в патч что-то типа AMP или VREF, но у меня недостаточно понимания устройства этого драйвера, чтобы знать, куда всунуть эти значения.
    А несколько источников скорее всего делаются из
    <key>Node</key>
    <integer>26</integer>
    <key>conns</key>
    <integer>15</integer>
    т.е. с ноде 26 прикреплена нода 15

    Хочу заметить, что драйвер не очень стойкий к ошибкам. Не то напишем - паника.
     

Поделиться этой страницей