40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/ksh
 | |
| 
 | |
| # set the sound device via argument (if you put something stupid her, so be it...)
 | |
| [ ! -z $1 ] && sndioctl -q server.device=$1
 | |
| 
 | |
| # we need it a few times, and caching is faster
 | |
| DUMP=$(dmesg)
 | |
| 
 | |
| # save the current active sound device
 | |
| _cur=$(sndioctl -n server.device)
 | |
| 
 | |
| # starting from dev 4, you need to cd /dev && sh MAKEDEV audioX
 | |
| for i in 0 1 2 3 4 5 6
 | |
| do
 | |
|     # find audio attach and detach lines
 | |
|     _input="$(echo "$DUMP" | grep -E "^audio$i\ at.*|^audio$i detached" | tail -n 1)"
 | |
| 
 | |
|     # if the last match is a detached line, stop here
 | |
|     echo "$_input" | grep -q "detached" && continue
 | |
| 
 | |
|     # take the number from audioX, then grep for what's attached to find
 | |
|     # the last description for this device (usb devices may change order
 | |
|     # during runtime)
 | |
| 
 | |
|     _type=$(echo "$_input" | cut -d" " -f3)
 | |
|     _number=$(echo "$_input" | cut -d" " -f1 | sed 's/[a-z]//g')
 | |
|     _desc=$(echo "$DUMP" | grep -E "^$_type at.*" | tail -1 | cut -d'"' -f2)
 | |
| 
 | |
|     # Once we walked to the first non-existing device, we stop.
 | |
|     [ -z $_number ] && exit 0
 | |
| 
 | |
|     # Show the device list and mark the current one
 | |
|     if [ $_cur -eq $_number ]
 | |
|     then
 | |
|         echo "> $_number: $_desc"
 | |
|     else
 | |
|         echo "  $_number: $_desc"
 | |
|     fi
 | |
| done
 | 
