sndo-mixer.alisp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. ;
  2. ; Toplevel configuration for the ALSA Ordinary Mixer Interface
  3. ;
  4. ; Copyright (c) 2003 Jaroslav Kysela <perex@perex.cz>
  5. ; License: GPL v2 (http://www.gnu.org/licenses/gpl.html)
  6. ;
  7. (defun sndo_include (hctl stream)
  8. (setq info (Acall "ctl_card_info" (Acall "hctl_ctl" hctl)))
  9. (if (= (Aerror info) 0)
  10. (progn
  11. (setq info (Aresult info))
  12. (setq driver (cdr (assq "driver" (unsetq info))))
  13. (setq file (concat (path "data") "/alsa/cards/" (snd_card_alias driver) "/sndo" stream "-mixer.alisp"))
  14. (setq r (include file))
  15. (when (= r -2) (Asyserr "unable to find file " file))
  16. )
  17. (setq r (Aerror info))
  18. )
  19. (unsetq info driver file r)
  20. )
  21. (defun sndo_mixer_open_fcn (hctl stream pcm)
  22. (setq fcn (concat "sndo" stream "_mixer_open"))
  23. (setq r (if (exfun fcn) (funcall fcn hctl pcm) 0))
  24. (when (= r 0)
  25. (setq hctls (if hctls (cons hctls (cons hctl)) hctl))
  26. )
  27. (unsetq fcn r)
  28. )
  29. (defun sndo_mixer_open_hctl (name stream pcm)
  30. (setq hctl (Acall "hctl_open" name nil))
  31. (setq r (Aerror hctl))
  32. (when (= r 0)
  33. (setq hctl (Aresult hctl))
  34. (setq r (sndo_include hctl stream))
  35. (if (= r 0)
  36. (setq r (sndo_mixer_open_fcn hctl stream pcm))
  37. (Acall "hctl_close" hctl)
  38. )
  39. )
  40. (unsetq hctl r)
  41. )
  42. (defun sndo_mixer_open_virtual (name stream pcm)
  43. (setq file (concat (path "data") "/alsa/virtual/" name "/sndo" stream "-mixer.alisp"))
  44. (setq r (include file))
  45. (when (= r -2) (Asyserr "unable to find file " file))
  46. (when (= r 0) (setq r (sndo_mixer_open_fcn nil stream pcm)))
  47. (unsetq file r)
  48. )
  49. (defun sndo_mixer_open1 (name stream)
  50. (if (compare-strings name 0 2 "hw:" 0 2)
  51. (sndo_mixer_open_hctl name stream nil)
  52. (sndo_mixer_open_virtual name stream nil)
  53. )
  54. )
  55. (defun sndo_mixer_open (pname cname)
  56. (setq r (sndo_mixer_open1 pname "p"))
  57. (when (= r 0) (setq r (sndo_mixer_open1 cname "c")))
  58. (when (!= r 0) (sndo_mixer_close))
  59. (unsetq sndo_mixer_open
  60. sndo_mixer_open_pcm sndo_mixer_open_pcm1
  61. sndo_mixer_open_virtual sndo_mixer_open_fcn
  62. sndo_include r)
  63. )
  64. (defun sndo_mixer_open_pcm1 (pcm stream)
  65. (setq info (Acall "pcm_info" pcm))
  66. (setq r (Aerror info))
  67. (when (= r 0)
  68. (setq info (Aresult info))
  69. (setq card (cdr (assq "card" info)))
  70. (setq r
  71. (if (< card 0)
  72. (sndo_mixer_open_virtual (Acall "pcm_name" pcm) stream pcm)
  73. (sndo_mixer_open_hctl (format "hw:%i" card) stream pcm)
  74. )
  75. )
  76. )
  77. (unsetq info card r)
  78. )
  79. (defun sndo_mixer_open_pcm (ppcm cpcm)
  80. (setq r (sndo_mixer_open_pcm1 ppcm "p"))
  81. (when (= r 0) (setq r (sndo_mixer_open_pcm1 cpcm "c")))
  82. (when (!= r 0) (sndo_mixer_close))
  83. (unsetq sndo_mixer_open
  84. sndo_mixer_open_pcm sndo_mixer_open_pcm1
  85. sndo_mixer_open_virtual sndo_mixer_open_fcn
  86. sndo_include r)
  87. )
  88. (defun sndo_mixer_close1 (hctl stream)
  89. (when hctl
  90. (progn
  91. (setq fcn (concat "sndo" stream "_mixer_close"))
  92. (when (exfun fcn) (funcall fcn hctl))
  93. (unsetq fcn)
  94. (Acall "hctl_close" hctl)
  95. )
  96. )
  97. )
  98. (defun sndo_mixer_close nil
  99. (sndo_mixer_close1 (nth 1 hctls) "c")
  100. (sndo_mixer_close1 (nth 0 hctls) "p")
  101. (snd_card_alias_unset)
  102. (unsetq hctls)
  103. )
  104. (include (concat (path "data") "/alsa/cards/aliases.alisp"))