Permanentní změna parametrů kodeku HDA Intel

Založil Roman Horník, 29. 12. 2012, 13:16:13

Předchozí téma - Další téma

Roman Horník

No nazdar,

pomocí nástroje HDAAnalyzer jsem si sešteloval parametry zvukovky, mám větší zesílení mikrofónu, než mi dovoloval mixér, u mikrofonního vstupu jsem si vypnul napájení mikrofónu (nemám elektret, mám místo něj dynamickej, vlastně repráček), výstup LFE má vyšší úroveň, proto u zesilovače nemusím nastavovat vstupní citlivost tak vysoko, že je trochu slyšet brum, navíc jsou basy hutnější, příjemnější. Prostě krása. Má to ale jeden háček- hejbnu s mixérem a nastavení je v defaultu.
Vygeneroval jsem si ale skript, kterej když spustím, znovu se použije moje nastavení (zase dokud nesáhnu na mixér).
Proto bych rád, aby to moje nastavení bylo trvalý. Dá se to nějak udělat?

Tady je obsah onoho skriptu:
#!/usr/bin/env python

import os
import struct
from fcntl import ioctl

def __ioctl_val(val):
  # workaround for OverFlow bug in python 2.4
  if val & 0x80000000:
    return -((val^0xffffffff)+1)
  return val

IOCTL_INFO = __ioctl_val(0x80dc4801)
IOCTL_PVERSION = __ioctl_val(0x80044810)
IOCTL_VERB_WRITE = __ioctl_val(0xc0084811)

def set(nid, verb, param):
  verb = (nid << 24) | (verb << 8) | param
  res = ioctl(FD, IOCTL_VERB_WRITE, struct.pack('II', verb, 0)) 

FD = os.open("/dev/snd/hwC0D0", os.O_RDONLY)
info = struct.pack('Ii64s80si64s', 0, 0, '', '', 0, '')
res = ioctl(FD, IOCTL_INFO, info)
name = struct.unpack('Ii64s80si64s', res)[3]
if not name.startswith('HDA Codec'):
  raise IOError, "unknown HDA hwdep interface"
res = ioctl(FD, IOCTL_PVERSION, struct.pack('I', 0))
version = struct.unpack('I', res)
if version < 0x00010000: # 1.0.0
  raise IOError, "unknown HDA hwdep version"

# initialization sequence starts here...

set(0x17, 0x300, 0x6100) # 0x17036100 (SET_AMP_GAIN_MUTE)
set(0x17, 0x300, 0x6200) # 0x17036200 (SET_AMP_GAIN_MUTE)
set(0x17, 0x300, 0x6300) # 0x17036300 (SET_AMP_GAIN_MUTE)
set(0x17, 0x300, 0x6400) # 0x17036400 (SET_AMP_GAIN_MUTE)
set(0x17, 0x300, 0x6500) # 0x17036500 (SET_AMP_GAIN_MUTE)
set(0x17, 0x300, 0x5100) # 0x17035100 (SET_AMP_GAIN_MUTE)
set(0x17, 0x300, 0x5200) # 0x17035200 (SET_AMP_GAIN_MUTE)
set(0x17, 0x300, 0x5300) # 0x17035300 (SET_AMP_GAIN_MUTE)
set(0x17, 0x300, 0x5400) # 0x17035400 (SET_AMP_GAIN_MUTE)
set(0x17, 0x300, 0x5500) # 0x17035500 (SET_AMP_GAIN_MUTE)
set(0x19, 0x300, 0xa01b) # 0x1903a01b (SET_AMP_GAIN_MUTE)
set(0x19, 0x300, 0x901b) # 0x1903901b (SET_AMP_GAIN_MUTE)
set(0x1a, 0x300, 0xa01b) # 0x1a03a01b (SET_AMP_GAIN_MUTE)
set(0x1a, 0x300, 0x901b) # 0x1a03901b (SET_AMP_GAIN_MUTE)
set(0x1b, 0x300, 0xa01b) # 0x1b03a01b (SET_AMP_GAIN_MUTE)
set(0x1b, 0x300, 0x901b) # 0x1b03901b (SET_AMP_GAIN_MUTE)
os.close(FD)
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz