Posted to tcl by saedelaere at Tue Oct 27 07:32:19 GMT 2009view raw

  1. SOURCE:
  2. 00-00: ALC889A Analog : ALC889A Analog : playback 1 : capture 1
  3. 00-01: ALC889A Digital : ALC889A Digital : playback 1 : capture 1
  4. 00-02: ALC889A Analog : ALC889A Analog : capture 2
  5.  
  6. Wanted result:
  7.  
  8. 0.0 ALC889A Analog
  9. 0.1 ALC889A Digital
  10.  
  11. if {[file exists /proc/asound/pcm]} {
  12. set open_alsa [open /proc/asound/pcm r]
  13. set alsa_dev [read $open_alsa]
  14. close $open_alsa
  15. set alsadev_status [catch {agrep -m "$alsa_dev" playback} resultat_alsadev]
  16. if {$alsadev_status == 0} {
  17. set i 1
  18. foreach line [split $resultat_alsadev \n] {
  19. set device($i) "$line"
  20. set first [expr [string first : $device($i)] + 1]
  21. set second [expr [string first : $device($i) $first] - 1]
  22. set device_name($i) "[string trim [string range $device($i) $first $second]]"
  23. set devices_max $i
  24. incr i
  25. }
  26. for {set i 1} {$i <= $devices_max} {incr i} {
  27. set ident [string trimright [lindex $device($i) 0] ":"]
  28. foreach char [split $ident "-"] {
  29. set char [scan $char %d]
  30. if {[info exists alsa_hw]} {
  31. append alsa_hw ".$char"
  32. } else {
  33. append alsa_hw $char
  34. }
  35. }
  36. set device_ident($i) "$alsa_hw $device_name($i)"
  37. puts "device_ident $i: $device_ident($i)"
  38. unset -nocomplain alsa_hw
  39. }
  40. } else {
  41. puts "no alsa devices found"
  42. }
  43. }